1.RPC需要解决的问题:函数映射,数据转换成字节流,网络传输
2.IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信;生成代码:通过编译器工具把IDL文件转换成语言对应的静态库;编解码:从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化;通信协议:规范了数据在网络中的传输内容和格式,除必须的请求/相应数据外,通常还会包含额外的元数据;网络传输:通常基于成熟的网络库走TCP/UDP传输
3.PRC的好处:单一职责,有利于分工协作和运维开发;可扩展性强,资源使用率更优;故障隔离,服务的整体可靠性更高
4.稳定性的保障策略:熔断-保护调用方,防止被调用的服务出现问题而影响到整个链路;限流-保护被调用方,防止大流量把服务压垮;超时控制-避免浪费资源在不可以节点上
5.易用性:开箱即用-合理的默认参数选项、丰富的文档;周边工具-生成代码工具、脚手架工具
6.观测性:Log、Metric、Tracing;内置观测性服务
7.高性能的场景:单机多级,单连接多连接,单/多client,单/多server,不同大小的请求包,不同的请求类型;目标:高吞吐,低延迟;手段:连接池,多路复用,高性能编解码协议,高性能网络库
8.自研网络库-Netpoll:解决无法感知连接状态问题,解决goruntine暴涨的风险,提升性能
9.Codegen:预计算并预分配内存,减少内存操作次数,包括内存分配和拷贝,Inline减少函数调用函数调用次数和避免不必要的反射操作等,自研了Go语言实现的Thrift IDL解析和代码生成器,支持完善的Thrift IDL语法和语义检查,并支持了插件机制-Thriftgo
10.JIT:使用JIT变异技术改善用户体验的同时带来更强的编解码性能,减轻用户维护生成代码的负担,基于JIT编译技术的高性能动态Thrift编解码器-Frugal
11.合并部署:微服务过微,传输和序列化开销越来越大,将亲和性强的服务实例尽可调度到同一个物理机,远程RPC调用优化为本地IPC调用