RPC框架 | 青训营
一,基础概念
RPC调用(远程函数调用)
相比本地函数调用,其需要额外解决以下问题
1)函数映射
2)数据转化为字节流
3)网络传输
其理论运作原理主要是caller machine和callee mashine之间的数据传输,由caller machine段的user传出数据,然后打包后通过网络传输抵达calle machine,再通过解包后运输到servers进行处理,完成后再打包传回,并解包返回user段。
但在实际的RPC过程中,我们还需要以下条件:
1)IDL文件:通过中立的方式来描述接口使其能在不同平台不同的语言环境下运行
2)生成代码:通过编译工具把IDL文件转化为语言对应的静态库
3)编解码:从内存中表示字节序列的转化即为解码
4)通信协议:规范了网络中传输的内容和格式
5)网络传输:基于成熟的网络库走TCP/UDP传输
RPC具有以下好处:
1)单一职责,有利于分工的开发和维护
2)功能独立,可扩展性强,资源使用率高
3)故障隔离,更加可靠稳定
同样RPC也具有一些弊端:
1)服务器宕机会导致具体某些服务停用
2)网络发生异常会导致消息不可达
3)请求量剧增会导致请求无法及时处理
这些问题就需要接下来介绍的RPC框架来解决。
二,分层设计
主要分为以下几层:
1.编解码层
以apache thrift为例其servers,read/write,TProtocal可视为编解码层
在生成时,用户端和服务器端会同时根据同一份IDL文件生成代码来适应不同的语言环境,另外,编解码层的数据还具有不同的格式,使用语言特定的格式,可能会导致其无法兼容其他语言,使用文本格式如JSON,XML,CSV等,其具有人类可读性,但精确性不高,识别能力有限,性能较差,使用二进制编码可以使程序具有跨语言,高性能的特点。
下面主要介绍TLV编码:
——Tag:类型
——Lenght:长度
——Value:值
且Value可以嵌套,但有tag和lenght的额外内存开销。
在具体的环境下我们应按照兼容性,通用性和性能等方面考虑类型的选择。
2.协议层
如TTransport,其可具有特殊结束符如\r\n作为每个协议单元结束的标志,也可定长加不定长的形式组成。
协议构造:
1)LENGHTH:数据包大小
2)HEADER MAGIC:识别版本信息
3)SEQUENCE NUMBER:表示数据包的seqID,用于多路复用,但链路内递增
4)HEADER SIZE:头部长度,从十四个字节开始到playload前
5)PROTOCOL ID:解码方式,如binary和compact
6)TRANSFORM ID:压缩方式
7)INFO ID;传递一些meta信息
8)PLAY LOAD:消息体
对于协议的读取,首先会找到MAGIC NUMBER的位置来读取类型,再读取编解码方式,再将PLAYLOAD读取出来。
3.网络通信层
sockets API,在得到IP和端口后会进行bind操作,listen后将数据放到队列中,队列具有长度规定,接下来就是read/write操作,然后close。
网络层一般需要具有提供易用的API,支持多项协议,能够进行异常处理,应用层buffer减少copy,具有高性能对象池定时器等功能。
三,关键指标
1.稳定性 为保证稳定性性,多需要采取一些保护性措施,如
熔断:保护调用方,防止调用的服务器出现问题影响整个链路
限流:保护被调用方,防止流量过大压垮服务器
超时控制:防止资源被浪费在不可用的地方
请求成功率:负载均衡:尽量平均分配请求避免节点故障,重试:对于某次异常请求,重试可提高成功率。
对于长尾请求,可以通过备份来提高成功率。
注册中间键:可以灵活地添加超时,重试等功能。
- 易用性 具有合理的默认配置和文档,具有丰富的周边工具来生成代码及脚手架
- 扩展性 对于扩展性,RPC框架需要提供尽可能多的扩展点,如Middleware,Option,编解码层,协议层,网络传输层,代码生成工具插件扩展。
- 观测性 使用Log日志,metric监控,Tracing链路跟踪,以及一些内部观测性服务。
- 高性能 高吞吐,低延迟为目标,多使用连接池,多路复用,高性能编解码协议,高性能网络库等方式实现。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbajbi
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01