这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
基本概念
Rpc需要解决的问题
- 函数映射
- 数据转化成字节流
- 网络传输
1984年Nelson发表了论文 提出了RPC的过程由五个模型组成: User,User_Stub.Rpc_Runtime,ServerStub,Server
IDL(interface description language)文件
IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以互相通信
生成代码 通过编译工具把IDL文件转化为对应语言的对应的静态库
编解码 从内存中表示字节序列的转换称为编码,反之为解码,也常叫序列化和反序列化 通信协议 规范了数据在网络中传输的内容和格式.除必须的请求/响应数据外,通常还会包含额外的元数据.
** 网络传输** 通常基于成熟的网络库,走TCP/UDP传输
rpc的好处
-
职责单一,有利于分工协作和运维开发 2. 可扩展性强,资源利用率更优 3. 故障隔离,服务的整体可靠性变高
rpc带来的问题
- 服务宕机,该怎么处理
- 调用过程中发生网络异常,如何保证消息的可达性质
- 请求量突增导致服务无法及时处理,有那些应对措施
分层设计
一般分为一下几个层级
- 用户自己编写的业务逻辑代码
- 通过代码生成工具把IDEL文件转化为不同语言对应的lib代码,封装了解编码逻辑
- 框架的编解码曾
- 框架的协议层
- 框架的网络通信层
一般来说,服务器和客户端依赖同一份IDL文件,生成不同语言的codegen
数据格式
- 语言特定的格式
- 许多编程语言都内建了将内存对象编码为字节序列的支持,比如java由java.io.serializable
- 文本格式
- json,xml,csv等文本格式,具有人类可读性
- 二进制编码
-
具备跨语言,和高性能的有点,比如thrift的binartprotocol,protobuf等
-