1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 游戏服务器停机维护 游戏是如何做到服务器不停机维护的?

游戏服务器停机维护 游戏是如何做到服务器不停机维护的?

时间:2021-12-04 23:01:50

相关推荐

游戏服务器停机维护 游戏是如何做到服务器不停机维护的?

【IT168 评论】游戏的定期更新版本已经再寻常不过了,但频繁的更新会造成流失率非常严重,哪个玩家也不希望再 BOSS 将要躺下那一刻,服务器停机维护了。在小版本更新过程中,采用不停机维护成为现在游戏的主流方式,那究竟是如何做到不停机维护的呢 ?

事实上,大多游戏服务器分为逻辑程序服务器和数据库服务器,如果是线上运营的服务器,基本上是在至少两台主机上,在发现几个逻辑服务器中的 bug,或者加了某些功能,比如少加了三个金币,多算了一点经验等,只需要在测试服测试完毕,上传覆盖执行文件 ( jar 或 php ) ,但是依然要重启逻辑服务器进程。

而 Erlang 的热升级技术,就带了更好的体验。Erlang 原本脱胎于电信行业,Jow Armstrong 在描述 Erlang 的设计要求时期中就提到了 " 软件维护应该能在不停止系统的情况下进行。" 在实践中,我们也因为这种不停服务的热更新获益良多,终于不用再等到半夜没人的时候再做更新了,对于一些紧急的 bug 修复,热更新实在是一把利器。

Erlang 热更新的秘密其实都集中在 code 模块 ,code 模块是 Erlang Code Server 暴露出来的对外接口其职责就是把已经编译好的模块加载到 Erlang 的运行时环境。

代码版本有两个概念 当前版本代码 'current' 和老版本代码 'old', 一旦模块被加载就变成 'current', 再有一个版本过来被加载 , 之前的版本就变成 'old', 新加载的变成 'current'。这时候 , 两个版本还是同时存在 , 新的请求执行的时候会使用新的版本 , 而老版本的代码还会被使用因为还有其他模块的调用 'old' 版本中。如果再进行一次热更新 , 这时就有第三个实例被加载 ,code server 就会终止掉还在驻留在 'old' 版本代码依赖的进程。然后第三个实例成为 'current', 之前版本的 'current' 被标记成 'old'。

这种方法有效降低了因版本升级而导致的用户流失。当然,实现不停机更新的技术方法还有很多,欢迎一起交流经验。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。