我们正在使用websockets (特别是Node.js上的uws.js )来运行一个多人测验。该服务器在eu-west-2a地区的AWS t2.micro上运行,但最近,我们看到一些玩家出现了令人难以置信的高延迟-但只是在间歇性的基础上。
通过延迟,我实际测量的是从发送广播消息(使用uws的内置pub-sub)到玩家的设备告诉服务器他们已经安全地收到它所花费的时间。我们正在跟踪的消息告诉玩家的设备进入下一阶段的测验,所以它对应用程序的工作非常关键。大多数时候,对于英国的玩家来说,这个时间大约是30 - 60毫秒,但偶尔我们会看到长达17秒的延迟。
最近,我们在世界的另一端有一组人在我们的服务器上做了一个测验,尽管只有10个左右的玩家,所以服务器绝对没有超载,我们看到大约有一半的人断断续续地获得这些非常,非常高的延迟峰值,这需要12,17,22,甚至39(!)他们的设备确认已收到消息的秒数。尽管这是一个慢节奏的测验,但这仍然是一个令人难以置信的延迟,并且具有真正有害的影响。
我的问题是,我如何知道是什么导致了这个问题,以及我如何解决它?我的猜测是,这与TCP和它的按序发送有关,再加上一些可能不可靠的互联网连接,因为昨天一个玩家似乎在39秒内什么都没有收到,然后连续三条消息都备份了。对我来说,这意味着丢包,但我甚至不知道在尝试解决它时从哪里开始。我也还没有弄清楚如何重现它(我从来没有见过它发生在我自己玩的时候),这让事情变得更加困难。
发布于 2021-10-27 22:23:05
TCP路由问题不太可能导致17+seconds的极端延迟。您确定没有“存储转发”队列系统在服务器或云发布/订阅队列上缓冲您的消息吗?
另一个重要的检查: t2.micro是你可以在亚马逊网络服务上启动的最便宜、最不可靠的networking QoS虚拟机。对网络性能没有吞吐量和抖动保证。您可能希望复习以下内容:
包括MTU parameters
的
例如,t2.micro没有任何最小基线保证带宽。
https://stackoverflow.com/questions/69712729
复制相似问题