这是我参与「第五届青训营」笔记创作活动的第10天。
RPC: 远程函数调用
RPC需要解决的问题:
- 函数映射: 我们怎么告诉支付服务我们要调用付款这个网数,而不是退款或者充值呢?所以两函数都有自己的一个ID,在做 RPC的时候要附上这个 ID,还得有个ID 和函数的对照关系表,通过 ID找到对应的西数井执行。
- 数据转成字节流
- 网络传输
一次完整的RPC过程:
- IDL (Interface description language) 文件
- IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
- 生成代码
- 通过编译器工具把1DL 文件转换成语言对应的静态库
- 编解码
- 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
- 通信协议
- 规范了数据在风络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据
- 网络传维
- 通常基于成熱的网络库走 TCP/UDP 传输
- 通常基于成熱的网络库走 TCP/UDP 传输
RPC好处
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
RPC 带来的问题
- 服务宕机,对方应该如何处理?
- 在调用过程中发生网络异常,如何保证消息的可达性?
- 请求量突增导致服务无法及时处理,有哪些应对措施?
分层设计
- 编解码层: 二进制编解码的实现原理和选型要点
- 协议层: 协议的一般构造,以及框架协议解析的基本流程
- 网络通信层:Socket API 的调用流程,以及选型网络库时要考察的核心指标