做网络游戏服务器升级的最佳做法?
假设我有一个在线游戏正在运行,并且它的版本为1.0。做网络游戏服务器升级的最佳做法?
我继续在舞台服务器上开发并为游戏带来新功能。登台服务器是与现场服务器分开的服务器。 (我相信大多数人这样做)
好的。我完成了新版本1.1。现在做网络游戏服务器升级的最佳做法是什么?
我们假设它是一个简单的游戏服务器PHP + MYSQL。所以有新的PHP脚本或更改的脚本,以及新的MySQL表格,列或修改列。我希望不要手动执行 - 手动在活动服务器上进行相同的更改。这很丑陋,很容易犯错,而且必须记住你做过的每一项改变。
我能想到的另一种方式是使临时服务器成为活动状态,并导入所有现有的数据库数据。我不喜欢它,似乎任何时候都可能发生错误。
什么是您可以推荐的最佳方式?
- 版本控制 - 使用它!
- 迁移 - 使用它!
版本控制(GIT)
你应该有直播服务器的Git服务器,以及,为您的测试/台服务器上。你会提交你所做的更改,然后你将这些提交/更改“推送”到服务器。一旦您的测试服务器正常工作,您就可以将其推送到您的实时服务器
迁移
最现代化的PHP框架提供此功能。基本上,你会在代码中描述你的数据库模式。使用Laravel,您可以运行:artisan migrate
或将模式推送到数据库的东西。
只有一个数据库和一个Web服务器,您可能想要阻止公众访问它们,直到它被更新为止,这主要是针对数据库的,并且只会持续几秒钟,但会在迁移时防止任何错误。一个简单的git post hook可以解决这个问题。网上有很多关于这方面的信息。
我听说SharePoint使前端支持旧数据库和新数据库。然后,您首先更新所有前端代码并使用旧数据库。在所有用户使用新的前端代码之后,更新数据库。升级完成后,您可以移除对旧数据库的支持,并再次为下一个版本执行相同的技巧。
这种方式可以使负载均衡前端的停机时间降至最低。
也许他们听起来比较容易,但我喜欢这个原则。
创建数据库升级脚本。最好使用工具生成一个。
为1.0版本构建发布包,如果您还没有这样做的话。 为版本1.1构建升级包和部署脚本,该脚本将将生产版本从1.0修补为1。1
有关如何更新现有部署的灵感,你可以看看How Wordpress upgrades:
- 下载升级包并解压到一个临时目录
- 确保文件解压!
- 建立“Down for maintenance”消息
- 复制新文件。这是直接复制/替换。不删除。
- 升级数据库如果没有最新的
- 从临时目录
- 删除解压后的文件中删除了“停机维护”消息
- 删除旧的文件。查看已弃用和未使用的文件列表并删除它们。
使用1.0发行包在临时环境中重新创建生产计算机,并在此之前测试升级包的部署,直到您满意为止。
备份生产,升级生产。
另外,请记住,所有数据库迁移都应该向后兼容(至少在部署期间)。这将允许您在更新服务器之前迁移数据库,而服务器仍在运行。 –