RPC需要解决的问题:
1、函数映射,要附上函数的id
2、数据转换成字节流,需要把参数转化为字节流,而本地只需要压栈
3、网络传输
RPC概念模型:
IDL文件:
通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信。
RPC好处:
1、单一职责,有利于分工协作和运维开发
2、可扩展性强,资源使用率更优
3、故障隔离,服务的整体可靠性更高。
RPC带来的问题:
1、一方服务宕机
2、在调用过程中发生网络异常
3、请求量激增,无法应对。
分层设计:
编码层:
选用编码格式时,要考虑,兼容性,通用性(跨平台,跨语言),流行程度,性能(编码后数据大小和编码耗费时长)
协议层:
1、特殊结束符(一个特殊字符作为每个协议单元结束的标志)
2、变长协议(定长+不定长,然后在定长中描述不定长的长度)
网络通信层:
sockets API:介于应用层和传输层之间。
构建PRC关键指标
稳定性-保障策略
熔断:保护调用方,防止被访问的服务出现问题而出现整个链路
限流:保护被调用方,防止大亮亮被服务压垮
超时控制: 避免浪费资源在不可用节点上。
稳定性-请求成功率:
1、负载均衡:均匀的调用节点 2、重试
稳定性-长尾请求:
解决手段:Backup Request
易用性:开箱即用,周边工具。
扩展性:Middleware,Option,编解码层, 协议层,网络传输层,代码生成工具插件扩展。
观测性:Log, Metric, Tracing(传统三件套), 内置观测性服务(监测配置,线程等)。