1、Thrift Streaming设计与实现CloudWeGo 开源团队出品2024/03Kitex01.需求和现实的矛盾02.基础用法04.展望CONTENT目 录03.设计与实现01需求和现实的矛盾Streaming 迫在眉睫抖音搜索需求场景飞书 People大模型(LLM)Ping-Pong API v.s.Streaming API其他类型的 Streaming API场景具体:上传文件没有限制,取决于业务需要Kitex 简介kateks Golang 微服务 RPC 框架功能/扩展性高性能https:/ 只支持 Thrift 的 Ping-Pong API“现状”(Kitex v0.8
2、.0)Kitex 支持 GRPC 的 Streaming API但是:Thrift Streaming 迫在眉睫快速支持 Thrift Streaming完善 Kitex Streaming 的能力02基本使用以 Server Streaming API 为例Thrift IDL:注解根据 Thrift IDL 生成脚手架代码客户端调用 Server Streaming API服务端处理 Server Streaming 请求https:/ 存在的问题HTTP/2 的应对方案GRPC:HTTP/2+ProtobufHTTP/2 Stream:Framed BasedPayload 编码:Pro
3、tobuf-ThriftContentType+ContentSubTypegrpcCodec:支持 Thrift中间件:Client-gRPC 官方的 WrappedStream 方案中间件:Client-Recv/Send Middleware中间件:Server中间件:Server-Recv/Send Middlewarecloudwego.io-Kitex 基本特性-协议-Streaming 传输-Thrift Streaming可观测性:RPCStat and TracerRPCStatsTracer可观测性-基本埋点RPCStartRPCFinishStreamStream 结束结
4、束Bidirectional StreamingServer StreamingClient StreamingServerServer Method Handler 返回后Clientstream.Recv()返回 non-nil error(含 io.EOF)*调用 stream.Recv()后可观测性-细粒度埋点StreamSend&StreamRecv 事件StreamEventReport 接口新增指标对排查线上问题很有帮助注意事项-服务治理超时:部分支持熔断:部分支持重试:暂不支持限流(Server 端):部分支持注意事项-Recv、Send 操作的是 Stream 缓冲区注意事项
5、:中间件读不到 Request/Response04展望更好的 Streaming?泛化调用Client:支持 Protobuf、Thrift 泛化调用Server:支持收发任意编码数据简洁,高效HTTP2 TCP Multiplexing基于自研协议的 StreamingTTHeader基于 TTHeader 的 StreamingFlags:判断是否 Streaming、Stream 是否结束基于 Frame 的 Streamingconst BitMaskFlagStreaming=0b0000_0000_0000_0001const BitMaskFlagEndOfStream=0b0000_0000_0000_0010Q&AKitexCloudWeGohttps:/