实战自己动手搭建RPC框架
Posted ITSK
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战自己动手搭建RPC框架相关的知识,希望对你有一定的参考价值。
顶顶顶顶
雅静,公众号:ITSK
这篇文章我们介绍一下常用的RPC框架,以及自己动手搭建了一个基于HTTP协议的RPC框架。
-
网络IO模型:在高并发状态下,阻塞式同步IO、非阻塞式同步IO或者多路IO模型对RPC服务器影响很大,特别是单位处理性能下对内存、CPU资源使用率的影响。 -
基于的网络协议:RPC框架可选择的协议有HTTP协议、HTTP/2协议、TCP协议等。HTTP协议使用文本协议对传输内容进行编码,相对于采用二进制编码协议的TPC/IP协议码流更大。选择不同的协议对RPC框架的性能有一定的影响。目前没有采用UDP协议作为主要的传输协议。 -
消息封装格式:消息封装格式的设计是影响RPC框架性能最重要的原因,这就是为什么几乎所有主流的RPC框架都会设计私有的消息封装格式。选择或者定义一种消息格式的封装要考虑的问题包括消息的易读性、描述单位内容时的消息体大小、编码难度、解码难度、解决半包/粘包问题的难易度。 Dubbo消息体数据包含Dubbo版本号、接口名称、接口版本、方法名称、参数类型列表、参数、附加信息等。 -
Schema和序列化(Schema & Data Serialization):序列化、反序列化的时间,序列化后数据的字节大小直接影响RPC框架性能。
客户端方法调用从客户对象经占位程序(Stub)、远程引用层(RemoteReference Layer)和传输层(Transport Layer)向下,然后再次经传输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。
-
占位程序:扮演着远程服务器对象的代理角色,使该对象可被客户激活。 -
远程引用层:处理语义、管理单一或多重对象的通信,决定调用应发往一个服务器还是多个服务器。 -
传输层:管理实际的连接,并且追踪可以接受方法调用的远程对象。 -
骨干网:完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、传输层,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
-
Dubbo:国内较早开源的服务治理的Java RPC框架,虽然在阿里巴巴内部竞争中落败于HSF,沉寂了几年,但是在国内得到了广泛的应用,目前Dubbo项目又获得了支持,并且Dubbo 3.0也开始开发。 -
Motan:微博内部使用的RPC框架,底层支持Java,生态圈往ServiceMesh发展以支持多语言。 -
RPCX:基于Go的服务治理的RPC框架,客户端支持跨语言。 -
腾讯Tars:腾讯公司的RPC框架。 -
百度BRPC:百度公司的RPC框架。 -
Thrift:跨语言的RPC框架,由Facebook贡献。 -
Hessian:由Caucho Technology开发的轻量级二进制RPC框架 -
Avro:来自Hadoop子项目。 -
gRPC:Google出品的跨语言RPC框架,很弱的(实验性的)负载均衡。 -
twirp:twitch.tv开源的一个RESTful风格的RPC框架。 -
go-micro:Go语言的一个服务治理RPC框架。 -
Spring Cloud:新兴产物。
-
协议模块http-rpc-protocol:定义了客户端到服务端做交互时用的协议; -
序列化模块http-rpc-serialize:实现对象和网络传输所需二进制数据的相互转换; -
网络通讯模块http-rpc-transport:传输序列化后的数据; -
客户端模块http-rpc-client:有一个存根的代理对象:完成序列化操作、网络交互; -
服务端模块http-rpc-server:Server存根:完成了服务调用、反射的存储; -
公共模块http-rpc-commom:封装了公共的工具类,eg:用于反射处理的工具类;
这些模块的依赖关系图如下所示:(IDEA中选中项目,ctrl+alt+shift+u可以快速生成模块依赖图)
相对于HTTP协议,TCP/IP协议的性能更高,因为HTTP协议的内容除了应用数据本身外,还带有描述本次请求上下文的数据(比如Header信息、响应码等)。HTTP协议使用文本协议对传输内容进行编码,相对于采用二进制编码协议的TPC/IP协议码流更大。
本文总结到这里,想要交流的小伙伴欢迎评论区留言哦
欢迎关注ITSK,每天进步一点点,我们追求在交流中收获成长和快乐
以上是关于实战自己动手搭建RPC框架的主要内容,如果未能解决你的问题,请参考以下文章