游戏是如何做到服务器维护不停机的?
发布时间:2019-04-10
       游戏的定期更新版本已经再寻常不过了,但频繁的更新会造成流失率非常严重,哪个玩家也不希望再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'。
       这种方法有效降低了因版本升级而导致的用户流失。当然,实现不停机更新的技术方法还有很多,欢迎一起交流经验。
联系我们,马上获得服务支持

400-000-6930

服务器维护贵宾专线

北京 上海 天津 重庆 河北 山东 辽宁 黑龙江 吉林 甘肃 青海 河南 江苏 湖北 湖南 江西 浙江 广东 云南 福建 海南 山西 四川 陕西 贵州 安徽 广西 内蒙古 西藏 新疆 宁夏 澳门 香港 台湾