本文是阅读老钱的《深入理解RPC:基于Python自建分布式高并发RPC服务》的笔记及摘录。 最早了解到的系统之间交互有Web service,那还是在学生时代。还没有彻底搞明白其运行原理,便接触了一种新的系统交互方式,或者叫准则更合适。那便是 RestFul。这种系统交互方式伴随了我的职业生涯好久,直到现在系统之间的交互,我的首选还是restful。它是一种简单交互方式,将请求信息看做资源,使用JSON这种数据结构作为传输格式,基于http协议,简单易用。只要把我们的http返回页面改为JSON格式的数据,并遵循一定的restful准则即可。restful 并没有严格的去限制你的使用,更多是提供了一种以http协议为基础的交互思路。 后来,接触到了 RPC 介绍RPC(Remote Procedure Call),远程过程调用,是一种分布式系统中常用跨机器的通信方法,更多的是指跨机器交互中的长连接交互。 RPC,传统意义上讲是指长连接数据交互,区别于 RPC的应用非常广泛,主要应用在大中型分布式系统中的组件交互,可以这样理解:各种夸网络协议的「长连接」系统交互中都使用了RPC或者类RPC。 其他分布式通信解决方案还有:分布式消息队列、HTTP请求调用、数据库和分布式缓存等。 各大厂开源的RPC框架有:
RPC 交互流程RPC 是两个子系统之间进行的直接消息交互,它使用操作系统提供的套接字(sockect)来作为消息的载体,以特定的消息格式(需要序列化)来定义消息内容和边界。 可以这样理解,RPC是对底层通信和交互协议的一个封装,便于上层使用。 RPC 协议构成RPC 消息协议组成: 消息边界因为 RPC 是在一条TCP链路上进行多次消息的交互,所以交互过程中为了区分一条一条消息的消息,必须将消息的边界定义好。 消息边界分隔有两种方式:
消息结构消息结构分为两种:
消息压缩消息在传输过程中为了节省带宽需要压缩。但是是否需要压缩,要根据具体业务场景。不要为了压缩占用大量系统资源,导致正常系统服务出现问题。 流量的优化消息传递中,必然是占用字节越少,效率的流量越少,传输速度也越快了。优化流量这里思路便是,尽量减少消息的字节占用。
RPC 通信协议列举分析Redis 通信协议分析Redis 作者自己设计了一套本文通信协议 RESP。按照RPC消息结构来分析如下:
更多协议详情,可参考官方相关文档。 ProtobufProtobuf 协议是 Google 开源的二进制 RPC 通讯协议,它可能是互联网开源项目中使用最为广泛的 RPC 协议。
扩展阅读: RPC vs HTTP vs WebService
现阶段个人理解:
|
|
来自: liang1234_ > 《rpc》