Skip to content

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

@Shellbye

Description

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions