这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
一、本堂课重点内容:
-
RPC 相关的基本概念
-
RPC 框架的分层设计
-
衡量 RPC 框架的一些核心指标
-
字节内部 RPC 框架 Kitex 实践分享
二、详细知识点介绍:
- RPC需要解决的问题:函数映射、数据转换成字节流、网络传输。三层:编解码层、协议层和网络通信层。
- IDL(interface description language)通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
- RPC的好处:单一职责,有利于分工协作和运维开发;可拓展性强,资源使用率高;故障隔离,服务的整体可靠性更高
- 数据格式:
- 1、seriable 与编程语言深度绑定,兼容性不行
- 2、json 有一些歧义的地方,同时性能较差
- 3、Thrift、protobuf
- TLV编码 tag,lenght、value
- 特殊结束符 http协议是消息头结束\r\n
- 变长协议 定长部分需要描述不定长部分的长度
- 协议层 压缩方式 zlib和snappy
- 套接字编程中客户端需要知道ip+port
- read从fd读数据 write从fd写数据 默认时阻塞模式
- 网络通信层 socket api
- io网络模型 :阻塞io、非阻塞io、io多路复用、信号驱动io、异步io
- 稳定性:熔断、限流、超时控制(服务降级)
- 框架通过中间件来注入各种服务治理策略,保障服务的稳定性
三、实践练习例子:
- Kitex kitex core、kitex byted、kitex tool
- netpoll 引入epoll主动监听机制,感知连接状态。通过池化技术和缓存来提升性能。
四、课后个人总结:
- RPC框架通过引入网络损耗来对对服务进行解耦。比较核心的在于跨平台和网络的高性能。
五、引用参考:
- 无