RPC框架分层设计简述

87 阅读2分钟

远程函数调用,Remote Procedute Calls,简称RPC。RPC需要解决的问题有:完成远程函数的映射,并且将数据转化为字节流,使用网络进行传输

RPC基本概念

IDL文件:IDL通过一种中立的方式来描述接口,使得不同平台上运行的对象和用不同语言编写的程序可以相互通信

生成代码:通过编译工具将IDL文件转换成语言对应的静态库

编解码:从内存中表示到字节序列的转化称之为编码,反之为解码,常称之为序列化和反序列化

通信协议:规范了数据在网络中传输的内容和格式,除了必要的响应请求数据外,通常还会包含额外的元数据

RPC的好处在于:

函数职责单一,有利于分工协作和运维开发

可扩展性强,可以独立扩充资源,资源使用率更优秀

故障隔离,单个服务故障不影响整体,服务的整体可用性更高

但是RPC也带来一定的挑战:

如果调用的函数所属的服务宕机应该如何处理

调用过程中网络异常,如何保证消息可达

请求量突增导致服务无法及时处理,如何应对

这些问题一般由RPC框架来解决

其中IDL可采用的文件数据格式有:

语言特定格式:许多编程语言都内建了将内存对象编码为字节序列的支持,比如Java的java.io.Serializable序列化格式。缺点是和语言深度绑定了

文本格式:JSON\XML\CSV等,具有人类可读性,但是描述不够严谨,而且缺乏模型约束,只能采用文档约束

二进制编码:具有跨语言和高性能等优点,比如说Thrift的BinaryProtocal等