跳到主要内容

消息类型与连接

如何选择 RPC 消息交互方式?​

类型交互适用场景约束
PingPong一次请求、一次响应常规 RPC默认选择
Oneway只发送、不等待业务响应可丢失通知仅 Thrift; 不推荐承担可靠业务
Streaming一个调用内多次收发推送、上传、对话处理 EOF、半关闭与取消
  • Thrift: 支持 PingPong、Oneway,以及 TTHeader Streaming 或基于 HTTP/2 的 streaming;
  • Kitex Protobuf: 支持 unary PingPong,不支持 streaming;
  • gRPC: 支持 unary、client streaming、server streaming、bidirectional streaming;

如何选择连接模型?​

  • 短连接: 每次请求建连; 成本高,只在实例数量或连接约束要求时使用;
  • 长连接池: Kitex 默认模型; 每个 address 维护可复用连接;
  • gRPC: HTTP/2 原生多路复用,一条连接可承载多个并发 stream;

如何调整长连接池?​

  • MaxIdlePerAddress: 每个目标保留的空闲连接上限;池空时会新建连接,因此它不是并发连接硬上限;
  • MaxIdleTimeout: 空闲回收时间;官方页的示例配置与文字默认值不一致,实际工程显式设置并核对所用版本;
  • MaxIdleGlobal: 全局空闲连接上限; 过小会降低复用率;
  • 调整依据: 下游实例数、并发、请求耗时、突发流量与文件描述符预算;
  • 经验: 先观察 active/idle 和复用率,再调参数,不要拍脑袋;

如何判断连接池是否有效复用?​

  • 连接数: 按目标实例观察 active、idle 与建连失败;
  • 复用率: 过低通常意味着池过大、idle timeout 过短或 Client 未复用;
  • 延迟: 分离 discovery、connect、write、server 与 read 阶段;
  • 状态报告: 可实现连接池 Reporter 接口接入监控;