这是我参与[第五届青训营]伴学笔记创作活动的第13天
RPC
RPC(Remote Procedure Call Protocol)-远程过程调用协议。通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。它假定某种传输协议的存在,如TCP,UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层,因分布式,微服务等而兴起
其实简单点来理解,就是比如有一个应用1,通过网络调用了应用2的服务,而不用关心应用2的协议。这就是最简单的示例。
为什么要使用RPC
微服务,分布式系统架构的兴起,为了实现服务可重用或者说系统间的交互调用
RPC由什么组成?
- IDL文件:通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编译的程序可以互相通信
- 生成代码:通过编译器工具把IDL文件转换成语言对应的静态库
- 编码、解码:又称为序列化和反序列化,序列化从内存中表示到字节序列的转换,反序列化就是反过来
- 通信协议:规范了数据在网络中的传输内容和格式。
- 网络通信:通常基于成熟的网络库(例如Muduo),利用TCP/UDP来传输
RPC的优势和劣势
优势
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源利用率高
- 故障隔离,服务的整体可靠性更高
劣势
- 目标服务器突然宕机,无法处理这种问题
- 调用过程中网络异常导致消息无法送达
- 请求量巨大的时候,接收端无法处理
刚好最近再用CPP手写一个简单的RPC轮子,今天刚好又上这门课,感觉收获到了很多