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

【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'。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值