这是我参与「第五届青训营」笔记创作活动的第 14 天。笔记旨在记录自己的学习过程以及跟更多人分享交流,重点讲干货,不扣细节,从整体认知。废话不多说,上内容!!!
本堂课重点内容
- RPC 相关的基本概念
- RPC 框架的分层设计
- 衡量 RPC 框架的一些核心指标
- 字节内部 RPC 框架 Kitex 实践分享
详细知识点介绍
RPC 的基本概念
- RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
-
IDL(Interface Definition Language) 文件
- 生成代码
- 编解码(序列化/反序列化)
-
通信协议
- 应用层协议
-
网络通信
-
IO 网络模型
- blocking IO
- unblocking IO
- IO multiplexing
- signal driven IO
- asynchronous IO
-
传输层协议
- TCP
- UDP
-
-
相比本地函数调用,RPC调用需要解决的问题
- 函数映射
- 数据转换成字节流
- 网络传输
- 一次 RPC 的完整过程
-
RPC 带来的问题将由 RPC 框架来解决
- 服务宕机如何感知?
- 遇到网络异常应该如何应对?
- 请求量暴增怎么处理?
RPC 框架分层设计
-
编解码层
-
数据格式:
-
语言特定格式
-
文本格式
-
二进制编码
- TLV 编码:Thrift 使用 TLV 编码
- Varint 编码:Protobuf 使用 Varint 编码
-
-
选项:
- 兼容性
- 通用型
- 性能
-
-
传输协议层
-
消息切分
- 特殊结束符
- 变长协议:length+body
-
协议构造
- 以 Thrift 的 THeader 协议为例讲解
-
-
网络通信层
-
网络库
-
核心指标
- 吞吐高
- 延迟低
-
RPC 框架的核心指标
-
稳定性
-
保障策略
- 熔断
- 限流
- 超时
-
请求成功率
- 负载均衡
- 重试
-
长尾请求
- BackupRequest
-
-
易用性
- 开箱即用
- 周边工具
- 扩展性
-
观测性
- Log
- Metric
- Tracing
- 内置观测性服务
-
高性能
实践练习例子
字节内部 Kitex 实践分享
- Kitex 整体架构
- 自研网络库 Netpoll
-
性能优化:
- 网络库优化
- 编解码优化
-
合并部署
课后个人总结
-
RPC 就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
-
RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。 HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。