Go-RPC关键指标分析与企业实践
1.稳定性-保障策略
熔断:保护调用方
限流:保护被调用方
超时控制:避免浪费
2.稳定性-请求成功率(用重复发送 负载均衡)
3.稳定性-长尾请求(用备份请求)
4.稳定性-注册中间件
易用性:开箱即用 周边工具 支持protobuf和thrift 生成服务代码脚手架
扩展性:Middleware-option-编解码层-协议层-网络传输层-插件扩展
观测性:Log Metric Tracing 内置观测性服务
高性能:高吞吐 低延迟
Kitex问题:
自研网络库Netpoll的原因:
因为原生库无法感知连接状态
原生库还存在goroutine暴涨的风险
kitex扩展性的设计:
交互方式:ping-pong/streaming/oneway
编解码:thrift/protobuf
应用层:HTTP2
传输层:TCP
性能优化-网络库优化:
调度优化:重用goroutine
LinkBuffer:减少GC
Pool:内存池和对象池
性能优化-编解码优化:
Codegen
合并部署:微服务太微了,传输和序列化开销越来越大。可以将亲和性强的服务实例尽可能调度在同一个物理机,能够优化成IPC调用。