《机甲旋风》为什么要关服?

《机甲旋风》为什么要关服?,第1张

官方没有给出具体原因,只发表如下声明:

由于各种原因,我们不得不做出一个艰难的决定,怀着万分遗憾的心情宣布:腾讯于2019年1月14日正式停止《机甲旋风》的运营。停运具体事项安排如下:

2018年11月16日,停止游戏充值和新用户注册。

2019年1月14日,正式停止游戏运营,关闭游戏服务器玩家无法登陆游戏。

2019年2月14日,游戏官网、论坛、专属客服关闭。

游戏服务器关闭后,游戏内的所有帐号数据及角色资料等信息将被全部清空。

关服当天异常火爆

《机甲旋风》于2012年7月17日开始内测。在之后的一段时间里,《机甲旋风》异常火爆,还被改成同名动画发布。

该游戏是腾讯公司继《洛克王国》之后推出的第二款拥有绿色儿童社区,以太空冒险为题材,以机器人格斗为核心玩法的游戏。

据说,当时在停服前5分钟,众多玩家来做最后的告别,《机甲旋风》人数达到了空前盛况。至此,这个乘载无数人童年机甲梦的游戏彻底的结束。

最近准备自己动手部署测试kubernetes集群,注备写一个 hands on 的手册。突发奇想将 centos 原有的内核从310更新到了414版本,并执行一些常规的优化 *** 作。没有想到在修改了 sysctlconf 里面的一些参数,希望能对新的 kubernetes 性能有所帮助。

sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory

纳尼,没有tcp_tw_recycle这个参数了? 怎么回事。。。

netipv4tcp_tw_reuse = 0  表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭

netipv4tcp_tw_recycle = 0  表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

netipv4tcp_fin_timeout = 60  表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间(可改为30,一般来说FIN-WAIT-2的连接也极少)

好像上面3个内核调整参数,都是很多 Linux 运维工程师的标配了,怎么我一升级内核就不行了? 自己狠下心来好好去的看了 kernel 的文档,Linux 从412内核版本开始移除了 tcp_tw_recycle 这个参数。 好嘛,小弟我手贱贱,升级到了414现在没有这个参数,只能硬着头皮去掉。

但是这个参数对 linux 系统回收大量 tcp timeout wait 有帮助, tcp_tw_recycle通常会和tcp_tw_reuse参数一起使用,用于解决服务器TIME_WAIT状态连接过多的问题 。 但是 kernel 为什么又要取消掉呢? 

简单来说就是,Linux会丢弃所有来自远端的timestramp时间戳小于上次记录的时间戳(由同一个远端发送的)的任何数据包。也就是说要使用该选项,则必须保证数据包的时间戳是单调递增的。同时从410内核开始,官方修改了时间戳的生成机制,所以导致  tcp_tw_recycle 和新时间戳机制工作在一起不那么友好,同时  tcp_tw_recycle 帮助也不那么的大。

此处的时间戳并不是我们通常意义上面的绝对时间,而是一个相对时间。很多情况下,我们是没法保证时间戳单调递增的,比如业务服务器之前部署了NAT,LVS等情况。相信很多小伙伴上班的公司大概率实用实用各种公有云,而各种公有云的 LVS 网关都是 FullNAT 。所以可能导致在高并发的情况下,莫名其妙的 TCP 建联不是那么顺畅或者丢连接。

而这也是很多优化文章中并没有提及的一点,大部分文章都是简单的推荐将netipv4tcp_tw_recycle设置为1,却忽略了该选项的局限性,最终造成严重的后果(比如我们之前就遇到过部署在nat后端的业务网站有的用户访问没有问题,但有的用户就是打不开网页)。

这次我们要关注的不是上半部分的 TCP 新建连接,而是下半部分的 TCP 断开连接。 别人老谈 TCP 3次握手,我就来谈 TCP 4次“挥手告别”。

在说 TCP 断开连接之前,我想先插入点内容。 就是 为什么要在 TCP 传输种引入 TIMEWAIT 这个概念。

第一个作用就是避免新连接接收到重复的数据包,由于使用了时间戳,重复的数据包会因为时间戳过期被丢弃。

第二个作用是确保远端不是处于LAST-ACK状态,如果ACK包丢失,远端没有成功获取到最后一个ACK包,则会重发FIN包。直到:

1放弃(连接断开)

2收到ACK包

3收到RST包

如果FIN包被及时接收到,并且本地端仍然是TIME-WAIT状态,那ACK包会被发送,此时就是正常的四次挥手流程。

如果TIME-WAIT的条目已经被新连接所复用,则新连接的SYN包会被忽略掉,并且会收到FIN包的重传,本地会回复一个RST包(因为此时本地连接为SYN-SENT状态),这会让远程端跳出LAST-ACK状态,最初的SYN包也会在1秒后重新发送,然后完成连接的建立,整个过程不会中断,只是有轻微的延迟。流程如下:
TIME_WAIT永远是出现在主动发送断开连接请求的一方(下文中我们称之为客户), 划重点:这一点面试的时候经常会被问到。 嘿嘿,这个可以做为面试官的杀手锏,上图逻辑保证好多人不知道。(我咋这么坏呢。。。)

客户在收到服务器端发送的FIN(表示"我们也要断开连接了")后发送ACK报文,并且进入TIME_WAIT状态,等待2MSL(MaximumSegmentLifetime 最大报文生存时间)。对于Linux,字段为TCP_TIMEWAIT_LEN硬编码为30秒,对于Windows为2分钟(可自行调整)。

说到 TCP_TIMEWAIT_LEN 这个我就多啰嗦几句,很多资深运维小伙伴,在早起为了加快 tcp timeout 的回收时间,经常会修改这个内核头文件中定义的宏数据,然后重编译内核。 说实话确实有一些用处,至少早起阿里很多基础平台的运维就是这么干的,至于其他大厂不得而知,这个仁者见仁吧。

    确保 TCP 连接在各种情况下,都能正常的关闭。我们的网络 IP 协议本身就是尽力而为的传输,所有传输的可靠性都是靠 TCP 协议栈来完成的。假如当 TCP 自身传输信令的过程中也出现了一些异常呢? 是不是我们 TCP 传输协议本身需要一定的容错机制。

又回到了上面说到的 IP 网络本身尽力而为的传输机制,并不保证数据包在底层传输的时候,接收方收到的数据包的数据顺序不一定是按照发送方的顺序,再加上数据传输延迟,就让上图的问题发生的情况成为了大概率事件。

TIME_WAIT占用的1分钟时间内,相同四元组(源地址,源端口,目标地址,目标端口)的连接无法创建,通常一个ip可以开启的端口为netipv4ip_local_port_range指定的32768-61000,如果TIME_WAIT状态过多,会导致无法创建新连接。

这个占用资源并不是很多,可以不用担心。 (现在服务器内存真心多,不怕。 如果你实用的虚拟机,而且还是短链接巨多,内存分配不那么充足的情况下,还要节省成本, 那就要当心咯)

1修改为长连接,代价较大,长连接对服务器性能有影响。

2增加可用端口范围(修改netipv4ip_local_port_range); 增加服务端口,比如采用80,81等多个端口提供服务; 增加客户端ip(适用于负载均衡,比如nginx,采用多个ip连接后端服务器); 增加服务端ip; 这些方式治标不治本,只能缓解问题。

3将netipv4tcp_max_tw_buckets设置为很小的值(默认是18000) 当TIME_WAIT连接数量达到给定的值时,所有的TIME_WAIT连接会被立刻清除,并打印警告信息。但这种粗暴的清理掉所有的连接,意味着有些连接并没有成功等待2MSL,就会造成通讯异常。

4修改TCP_TIMEWAIT_LEN值,减少等待时间,但这个需要修改内核并重新编译。(这个之前提过,有某个大厂的小伙伴之前这么做的,有效果,但是有其他负面情况,我没有做完整的评估,自己斟酌实用)

5打开tcp_tw_recycle和tcp_timestamps选项。

6打开tcp_tw_reuse和tcp_timestamps选项。

注意,注意,注意,重要的事情说三遍。 5和6之间只能选择一个,不能同时打开。

tcp_tw_recycle 选项在410内核之前还只是不适用于NAT/LB的情况(其他情况下,我们也非常不推荐开启该选项),但410内核后彻底没有了用武之地,并且在412内核中被移除

tcp_tw_reuse 选项仍然可用。在服务器上面,启用该选项对于连入的TCP连接来说不起作用,但是对于客户端(比如服务器上面某个服务以客户端形式运行,比如nginx反向代理)等是一个可以考虑的方案。

修改TCP_TIMEWAIT_LEN是非常不建议的行为。

随着中文Steam用户的日益增多,各类问题也层出不穷,其中比较常见的就是下载速度缓慢。很多情况下,下载速度都和你Steam设置中的“下载服务器”有非常大的关系。针对这一点,我写出这篇文章,指导各位设置Steam中的“下载服务器”,从此告别低速下载,享受最High的下载体验。 问题简介选择一个优秀的“下载服务器”是提高下载速度的关键,而一个下载服务器对你而言是否优秀由许多因素决定:一 地理:服务器所在地区与你所在地区的距离二 玩家:使用这个服务器的玩家数量、玩家群体三 游戏:使用这个服务器的玩家主要下载的游戏四 其他:服务器配置,网络线程,时段等其他因素 一 地理位置简介:所谓地理位置,就是一个下载服务器所设立的地区,一般而言,Steam会在全球各地Steam玩家较多的地点以及较大的城市与国家设立下载服务器,较大的国家会设立多一些的下载点。值得一提的是:目前所有中国大陆地区的下载服务器已经被全部撤走,所有选择了中国大陆下载服务器的玩家会被自动引导至香港下载服务器。推荐设置:根据惯例,建议选择距离你最近的下载服务器,因此数据可以在最快时间内传递到你的电脑中,而且数据丢失较少。不过离你最近的服务器不一定是最适合你的服务器,这还要看几个其他方面因素,继续往下阅读吧。话虽如此,地理的位置仍然是一个非常关键的因素哟。 二 玩家数量简介:首先你要知道的是,Steam的下载系统采用BT模式下载,在下载的同时也会上传数据供其他玩家下载,传统的解释是:“下载的人数越多,速度就会越快”。顺便一提的是,开发Steam的人就是那位BT下载创始人。因此,服务器的玩家数量也成为了一个非常关键的因素。推荐设置:”下载的人越多,下载速度就越快“,根据这个道理你应该选择一个下载人数较多的服务器,而决定一个服务器下载人数的关键因素就是它的地理位置,简单的说,玩家越多的地方,那个地方的服务器使用的人数一定多。这就是为什么许多北方用户选择韩国或日本服务器会快很多。从另外一个角度来考虑,韩国和日本作为经济较发达的地区,人民生活温饱,而且娱乐业发达,自然就有很多人玩得起游戏,使用Steam的人肯定也就多了。因此,在选择时也要注意一下你选择的服务器有多少人在使用。 三 主流游戏简介:Steam使用BT模式下载,所以同一个游戏,下载的人数越多,下载速度也会越快。当然根据Steam云计划中描述的那样,各个服务器会或多或少的分享资源,但是真正主要的因素还是在于下载这个游戏的人数。推荐设置:因此,你最好根据要下载的游戏来决定使用的服务器。不过前提是注意保证之前提到的两个因素。咋看之下,根本没有办法来判断,不过略经分析你就可以得到一个不错的基本思路。其一是游戏的区域限制发行,如果某个游戏在一个区域限制了发行,那么当地就不会有太多用户拥有这个游戏,因此使用当地服务器下载这个游戏的人就会很少,下载速度也会很慢(当然也不排除这个服务器与邻近服务器共享了资源)。其次是要分析一下服务器所在地区玩家的喜爱,例如日本玩家更喜爱RPG游戏,而香港玩家更喜爱FPS游戏,当然这个也只是一个简单的参考。很多时候你无法作出判断还是跳过这个因素吧。 四 其他因素影响下载服务器的因素还有很多,这里简单的介绍几个其中较为典型的问题。首当其冲的是服务器的拥挤,尽管BT下载的理念是“与多越好”。但是如果因为服务器的配置以及当地的网络繁忙出现了堵塞,下载速度也会受到一定影响。其次是时段,同样的条件,高峰时段与低谷时段的流量差可以达到50%以上,因此也要注意一下时段问题。再来还有其他一些零星的因素,这里皆不列举了。 总结无论如何,自己的网络环境还是很重要的因素,选择高端流量的网络套餐才是提升网络速度的首选。Steam服务器在中国大陆的撤离也是迫于无奈之举,我们表示非常的遗憾,同时也对一些支持正版的玩家表示抱歉,我们想各位推荐的平台无法带来便利。不过往好的方面看,Steam的中文玩家正在日渐增多,相信在不久的将来正版游戏在中国以及各地中文玩家中将会更加普及。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/13394213.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存