Go-RPC框架分层设计

news/2024/11/20 3:04:17/

本地函数调用:

远程函数调用RPC :Remote Procedure Calls

网上商城和支付服务并不在同一个服务器 所以得远程函数调用
需要解决的问题:
1.函数映射(映射到正确的函数 要付款而不是退款 每个函数得有自己的ID 才能找到)
2.数据转换成字节流(本地的只需要压栈 并不需要别的)
3.网络传输(怎么保证高效稳定传输呢)

一次RPC的完整过程

1.IDL文件:使用中立的方式来描述接口 不同的语言之间也可以相互通信了
2.生成代码:通过编译器工具把IDL文件转换为语言对应的静态库
3.编解码:也叫序列化与反序列化 从内存中表示–>字节序列 这就是一次编码
4.通信协议:规范传输内容和格式
5.网络传输:TCP/UDP

RPC的好处

1.单一职责了 不同的服务可以用不同的语言进行开发 比如视频-直播-商城-通知-支付等等
2.可扩展性强
3.故障可以隔离 整体可靠性增加了 高内聚低耦合

RPC分层设计-以Thrift为例

在这里插入图片描述在上图的generated code阶段:
client和server会依赖同一份IDL文件 然后生成不同语言的CodeGen(Golang C++ Java)

在这个编解码层:有数据格式:语言特定的格式-文本格式-二进制编码
而Thrift和Protobuf就是二进制编码格式 跨语言 高性能 比较常见

而现在谈的Thrift用的编码是TLV编码 tag-length-value
在这里插入图片描述上图所示 这个是自己写 然后TLV编码会把它编程二进制的BinaryProtocol
而这个编解码层:必须得有兼容性-通用性-性能好

协议层

网络通信层:Sockets API 这个介于应用层和传输层 传输层是TCP UDP
Sockets流程:bind listen accept read write


http://www.ppmy.cn/news/1548390.html

相关文章

STM32低功耗设计NFC与无线距离感应智能钥匙扣

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 在当今快速发展的物联网(IoT)时代&#xf…

InnoDB存储引擎对MVCC的实现

MVCC 是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。它是通过在每个数据行上维护多个版本的数据来实现的。当一个事务要对数据库中的数据进行修改时,MVCC 会为该事务创建一个数据快照,而不是直接修改实际…

Elasticsearch面试内容整理-核心概念与数据模型

在 Elasticsearch 中,理解核心概念与数据模型是非常重要的,因为它们定义了数据如何被组织、存储和搜索。以下是 Elasticsearch 的核心概念和数据模型的详细介绍。 核心概念 集群(Cluster) ● 集群是由一个或多个节点组成的,用于共同存储和搜索数据的集合。

django从入门到实战(一)——路由的编写规则与使用

Django 路由的编写规则与使用 在 Django 中,路由(URLconf)是将 URL 映射到视图函数的机制。它允许我们定义网站的 URL 结构,并将请求分发到相应的处理函数。以下是关于 Django 路由的定义规则及使用的详细介绍。 1. Django 的路…

【青牛科技】视频监控器应用

1、简介: 我司安防产品广泛应用在视频监控器上,产品具有性能优良,可 靠性高等特点。 2、图示: 实物图如下: 3、具体应用: 标题:视频监控器应用 简介:视频监控器工作原理是光&#x…

docker--工作目录迁移

前言 安装docker,默认的情况容器的默认存储路径会存储系统盘的 /var/lib/docker 目录下,系统盘一般默认 50G,容器输出的所有的日志,文件,镜像,都会存在这个地方,时间久了就会占满系统盘。 一、…

【Pytorch】torch.nn.functional模块中的非线性激活函数

在使用torch.nn.functional模块时,需要导入包: from torch.nn import functional 以下是常见激活函数的介绍以及对应的代码示例: tanh (双曲正切) 输出范围:(-1, 1) 特点:中心对称,适合处理归一化后的数据…

精通Rust系统教程-过程宏入门

本文介绍Rust过程宏定义、分类及应用示例。假设你已经熟悉Rust及基本概念、如数据类型、迭代和特性(traits)。 Rust宏简介 宏是Rust编程语言的重要组成部分,当你学习Rust语言时,很快就会遇到它们。Rust宏以最简单的方式让你在编译…