Kitex Thrift Streaming 的设计与实现
如果无法正常显示,请先停止浏览器的去广告插件。
        
                1. Kitex
Thrift Streaming
设计与实现
CloudWeGo 开源团队出品
2024/03            
                        
                2. CONTENT
目录
01. 需求和现实的矛盾
02. 基础用法
03. 设计与实现
04. 展望            
                        
                3. 01
需求和现实的矛盾
Streaming 迫在眉睫            
                        
                4. 需求场景
抖音搜索
飞书 People
大模型(LLM)            
                        
                5. Ping-Pong API v.s. Streaming API            
                        
                6. 其他类型的 Streaming API
场景具体:上传文件
没有限制,取决于业务需要            
                        
                7. Kitex 简介
https://github.com/cloudwego/kitex
[kaɪt'eks] Golang 微服务 RPC 框架
高性能
功能/扩展性            
                        
                8. “现状”(Kitex v0.8.0)
Kitex 只支持 Thrift 的 Ping-Pong API
Kitex 支持 GRPC 的 Streaming API
但是:            
                        
                9. Thrift Streaming 迫在眉睫
快速支持 Thrift Streaming
完善 Kitex Streaming 的能力            
                        
                10. 02
基本使用
以 Server Streaming API 为例            
                        
                11. Thrift IDL:注解            
                        
                12. 根据 Thrift IDL 生成脚手架代码            
                        
                13. 客户端调用 Server Streaming API            
                        
                14. 服务端处理 Server Streaming 请求
https://github.com/cloudwego/kitex-examples/tree/v0.3.1/thrift_streaming            
                        
                15. 03
设计与实现
Payload编码,中间件,可观测性            
                        
                16. HTTP/2
HTTP/1.1 存在的问题
HTTP/2 的应对方案            
                        
                17. GRPC: HTTP/2 + Protobuf
HTTP/2 Stream: Framed Based            
                        
                18. Payload 编码:Protobuf -> Thrift
ContentType+ContentSubType
grpcCodec:支持 Thrift            
                        
                19. 中间件:Client - gRPC 官方的 WrappedStream 方案            
                        
                20. 中间件:Client - Recv/Send Middleware            
                        
                21. 中间件:Server            
                        
                22. 中间件:Server - Recv/Send Middleware
cloudwego.io - Kitex 基本特性 - 协议 - Streaming 传输 -
Thrift Streaming            
                        
                23. 可观测性:RPCStat and Tracer
RPCStats
Tracer            
                        
                24. 可观测性 - 基本埋点
RPCStart
RPCFinish
Stream 结束
Server
Client
Bidirectional Streaming
Server Streaming
Client Streaming
Server Method Handler 返回后
stream.Recv() 返回 non-nil error (含 io.EOF)*
调用 stream.Recv() 后            
                        
                25. 可观测性 - 细粒度埋点
StreamSend & StreamRecv 事件
StreamEventReport 接口
新增指标
对排查线上问题很有帮助            
                        
                26. 注意事项 - 服务治理
超时:部分支持
熔断:部分支持
重试:暂不支持
限流(Server 端):部分支持            
                        
                27. 注意事项 - Recv、Send 操作的是 Stream 缓冲区            
                        
                28. 注意事项:中间件读不到 Request/Response            
                        
                29. 04
展望
更好的 Streaming?            
                        
                30. 泛化调用
Client:支持 Protobuf、Thrift 泛化调用
Server:支持收发任意编码数据            
                        
                31. 简洁,高效
HTTP2 TCP Multiplexing
基于自研协议的 Streaming
TTHeader            
                        
                32. 基于 TTHeader 的 Streaming
Flags:判断是否 Streaming、Stream 是否结束
const BitMaskFlagStreaming
= 0b0000_0000_0000_0001
const BitMaskFlagEndOfStream = 0b0000_0000_0000_0010
基于 Frame 的 Streaming            
                        
                33. Q & A
Kitex
https://github.com/cloudwego/kitex
https://cloudwego.io/zh/docs/kitex
CloudWeGo            
                        
                34. THANKS