这是我参与「第五届青训营」伴学笔记创作活动的第14天
RPC
基本概念
-
远程函数调用(RPC - Remote Procedure Calls)
-
RPC需要解决的问题
- 函数映射
- 数据转换成字节流
- 网络传输
-
RPC概念模型
1984 年 Nelson 发表了论文《Implementing Remote Procedure Calls》,其中提出了 RPC 的过程由 5个模型组成:User、User-Stub、RPC-Runtime、Server-Stub、Server
-
一次RPC的完整过程
-
IDL(Interface description language)文件
IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
-
生成代码
通过编译器工具把 IDL 文件转换成语言对应的静态库
-
编解码
从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
-
通信协议
规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据
-
网络传输
通常基于成熟的网络库走TCP/UDP传输
-
-
RPC的好处
-
单一职责,有利于分工协作和运维开发
不同的服务可以采用不同语言进行开发,部署运维上线都是独立的,可以不同的团队进行维护
-
可扩展性强,资源使用率更优
压力大的时候可以独立扩充资源。例如说双十一的时候压力大,只需要针对直播间还有购物的服务进行扩容,对于首页,广告等不需要扩容那么多资源。底层服务可以复用,资源使用率会更高
-
故障隔离,服务的整体可靠性更高
某一个服务发生故障的时候,不会引起整体服务的奔溃
-
-
RPC带来的问题
- 服务宕机,对方应该如何处理?
- 在调用过程中发生网络异常,如何保证消息的可达性?
- 请求量突增导致服务无法及时处理,有哪些应对措施?
RPC带来好处的同时也带来了不少新的问题,将由 RPC 框架来解决