TCP ACK 推迟40ms

  • 时间:2018-09-10 23:25 作者:tiankongus 来源:tiankongus 阅读:91
  • 扫一扫,手机访问
摘要:不管声称如何完美的处理方案,都会引入另一个更复杂的问题。一、背景我负责的缓存系统有一个版本号板块,专门使用来对数据生成唯一的版本号seq来保证数据的唯一性,从而做到数据数据实时升级以及避免旧数据覆盖新数据的问题。这个板块是其余人交接给我的,之前服务一直都正常,也就没去细看。最近访问量越来越大了,服务出

不管声称如何完美的处理方案,都会引入另一个更复杂的问题。

一、背景

我负责的缓存系统有一个版本号板块,专门使用来对数据生成唯一的版本号seq来保证数据的唯一性,从而做到数据数据实时升级以及避免旧数据覆盖新数据的问题。
这个板块是其余人交接给我的,之前服务一直都正常,也就没去细看。
最近访问量越来越大了,服务出现少量失败,所以需要先梳理整个板块的情况,而后在从整体上来优化这个板块。

二、高延时

image

版本号板块一梳理不要紧,发现一大堆问题,如将来解决数据存在瓶颈、板块不可扩容、存在同步逻辑等等。
其中一个问题就是拉取版本号时,平均延时比较高。
看上图,可以发现,测试环境平均耗时只有1毫秒,而正式环境是20多毫秒。这个不应该这么高的。

那版本号服务的延时为什么这么高呢?
目前我只能说不知道。
上面那个监控也是那个服务交接过来后,在我给那个服务添加功能时添加的。
而对于版本号板块交接过来后发现没监控,但是加监控这种优先级最低的事情是不会单独去做的,除非出了问题,比方现在,不得不加了。

现在能做的是先tcpdump抓个包看看,结果发现一个奇怪的现象,是的,就是这篇文章的标题,某些ACK推迟了40ms才发出来(当然,监控的高延时不是这个导致的)。

三、推迟ACK

image

如上图,可以看到某些时候,服务端回数据包了,但是用户端却迟迟没有回复ACK,直到40毫秒之后才发出ACK。

为什么会这样呢?
查了TCP相关的资料,理解到TCP的 Nagel算法算法在某些时候,会进入这样一个推迟回复ACK的逻辑,而后等待40毫秒,触发超时逻辑,最终回复了ACK。

这对应了我的其中一个座右铭:不管声称如何完美的处理方案,都会引入另一个更复杂的问题

image

四、为什么推迟

对于后端服务,一般都是长连接,而且是一发一收的模式。
场景就像下面的样子。

CLIENT -> SERVER:发送请求数据
SERVER -> CLIENT:回应收到数据了
SERVER -> CLIENT:返回解决后的数据
CLIENT -> SERVER:回应收到数据了

是不是发现服务器连续想用户端发了两次数据,一次是会请求数据的ACK,一次是请求数据的结果。
这两次回包假如能够合并为一次,网络上的包是不是一下就少了四分之一。
说干就干,TCP的Nagel加了这样一个功能,先探测通信模型是不是一发一收的,符合条件了收到请求数据包时就先不回ACK,等一会,而后带着解决后的数据一起回ACK,俗称推迟ACK。

那自然就会面临一个问题:假如没有下个请求了,这个ACK就迟迟的发不会去了吗?
所以这个推迟功能就需要加个兜底时间,超过了兜底时间就补上迟迟没发的ACK。

那怎样手动关闭这个功能呢?
root权限下把/proc/sys/net/ipv4/tcp_no_delay_ack文件的值修改成1就可。
这样的问题就是每个TCP数据包都会有一个ACK包,添加了网络的包量。


本文首发于公众号:天空的代码世界,微信号:tiankonguse-code。

推荐阅读:

  • 经济危机(一)
  • 《长尾理论》解释了抖音为啥火了
  • 数据脏了怎样办
  • 读恐怖小说《1984》
  • 中年危机笔记与思考
  • 静态库遇到静态库

? 欢 迎 分 享 到 朋 友 圈 哦 ?

image
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】需要同时掌握AVA和Linux,才可以继续大数据课程的学习(2019-05-18 10:28)
【系统环境|软件环境】学习大数据,一定要了解大数据的这些用途(2019-05-16 10:49)
【系统环境|Linux】bt宝塔控制面板mysql频繁自动停止详细解决办法(2019-05-16 08:52)
【系统环境|】大数据零基础学习路线,新人记得保存收藏哦(2019-05-15 10:54)
【系统环境|】全网最全最新的大数据系统学习路径(2019-05-14 15:38)
【系统环境|Linux】毕业设计:音乐分享系统(2019-05-14 07:48)
【系统环境|】教你零基础如何快速入门大数据技巧(2019-05-12 11:25)
【系统环境|】想学习大数据?这才是完整的大数据学习体系(2019-05-11 11:33)
【系统环境|数据库】小白学习大数据掌握这几个方法可轻松入门(2019-05-10 10:52)
【系统环境|数据库】学习大数据必须了解的大数据开发课程大纲(2019-05-09 11:40)
手机二维码手机访问领取大礼包
返回顶部