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