Shellbye.github.io
Shellbye.github.io copied to clipboard
深入理解RPC:基于Python自建分布式高并发RPC服务
深入理解RPC:基于Python自建分布式高并发RPC服务
基础篇:深入理解 RPC 交互流程
协议 1:深入 RPC 消息协议
消息边界
特殊分割符法
长度前缀法
消息的结构
消息压缩
流量的极致优化
协议 2:Redis 文本协议结构
深入理解 RESP (Redis Serialization Protocol)
1. 单行字符串 以+符号开头;
+hello world\r\n
2. 多行字符串 以$符号开头,后跟字符串长度;
$11\r\nhello world\r\n
3. 整数值 以:符号开头,后跟整数的字符串形式;
:1024\r\n
4. 错误消息 以-符号开头;
-WRONGTYPE Operation against a key holding the wrong kind of value\r\n
5. 数组 以*号开头,后跟数组的长度;
*3\r\n:1\r\n:2\r\n:3\r\n
发送指令:客户端 -> 服务器
发送指令:服务器 -> 客户端
协议 3:Protobuf 二进制协议结构
协议格式
键值对
key
tag 和 type
value
整数
ZigZag
浮点数
字符串
长度前缀编码
参考
[整数压缩编码 ZigZag](https://www.cnblogs.com/en-heng/p/5570609.html)
[varint和zigzag编码](https://wikimore.github.io/2016/09/22/zig-zag-intro/)
协议 4: Redis 协议的缺陷
连接重连
请求重试
请求唯一 ID
Redis 客户端的缺陷
ConnectionError
TimeoutError
客户端:深入 RPC 客户端设计
安全锁
懒惰连接
健康检查
超时策略
性能追踪
多路复用 (multiplexing)
单向请求
心跳
服务器 1:【单线程同步】模型
socket
struct
json
消息协议
客户端代码
单线程同步模型服务器代码
服务器 2:【多线程同步】模型
thread
多线程同步模型
服务器 3:【多进程同步】模型
os.fork()
多进程同步模型
多进程 vs 多线程
服务器 4:【PreForking同步】模型
多进程 PreForking 模型
accept 竞争
服务器 5:【单进程异步】模型
非阻塞 IO
事件轮询
用户进程读写缓冲区
StringIO
asyncore
实现单进程异步模型
服务器 6:【PreForking异步】模型
多进程 PreForking 异步模型
同步模型 vs 异步模型
服务器 7:【多进程描述符传递】模型
Nginx 并发模型
Node Cluster 并发模型
分布式 1:深入 RPC 分布式原理
客户端
容灾 Failover
降权法
服务发现
分布式 2:分布式 RPC 知识基础
杀死子进程
信号处理函数
错误码
特殊信号
收割子进程
父进程退出
信号连续打断
服务发现
分布式 3:分布式 RPC 实战
完整的 RPC 服务器
完整的 RPC 客户端
拓展 1:gRPC 原理与实践
HTTP2.0
HTTP2.0 vs HTTP1.1
gRPC 入门
Streaming
单向消息
压缩
重试
超时
拦截器
分布式 gRPC 服务
拓展 2:Thrift 原理与实践
协议选择
服务器模式选择
传输层选择
Thrift 入门
gRPC 还是 Thrift