问题背景:
上线后延时抖动很频繁,正常延时为10ms左右,抖动时延达到300ms以上,严重影响了该业务的性能
问题结论:tcp传输报文段延时异常,传输内容越大,受网络影响越大
- index模块延时正常,controller模块延时异常
该服务的这个接口业务逻辑比较简单,即在controller模块用AiHttpClient访问index服务,做处理然后返回结果。经过日志发现,在经过http调用过后,接收时延时出现异常 - 排除wsClient的原因
因为AiHttpClient是对wsClient做了封装,加入负载均衡等功能。我们怀疑是wsClient的原因,尝试用apache httpclient替换wsclient。灰度测试后,不仅平均延时上涨,而且抖动也没有减少,效果不理想。 - 用wireshark抓包分析,部分报文段超时
a. 超时重传
b. 报文段延时过高
- 传输内容越大,报文段数量多,受网络影响越大
解决方案:
- index增加服务端http传输内容压缩机制,以降低报文段的数量,增加传输效率,降低网络质量的影响
[] inde服务增加压缩机制,上线灰度本周一 10:30
[] 全量C3观察上线, 昨天 17:30
[] 全量上线, 今天 15:00 - controller修改配置play.ws.compressionEnabled = true,使wsClient支持压缩
[] 灰度C3上线,昨天 17:30
[] 全量上线 , 今天 10:00
最新状态:
- 增加压缩传输内容机制,上线后灰度情况
上线后发现传输内容从112320 bytes压缩到了26768 bytes,报文段数量从10个减少到3个,经过一个早晚高峰的观察,灰度机器抖动情况已基本消失