Shellbye.github.io icon indicating copy to clipboard operation
Shellbye.github.io copied to clipboard

深入理解RPC:基于Python自建分布式高并发RPC服务

Open Shellbye opened this issue 4 years ago • 0 comments

深入理解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

Shellbye avatar Nov 04 '20 06:11 Shellbye