如何进行在线游戏服务器升级的最佳实践?

5
假设我有一个在线游戏,它的版本是1.0。我在预发布服务器上进行开发,并将新功能添加到游戏中。预发布服务器与生产服务器是分开的。(我相信大多数人都是这样做的)好的,我完成了新版本1.1。现在,最佳实践是什么?假设它是一个简单的游戏服务器PHP+MYSQL。因此,有新的php脚本或更改的脚本,以及新的mysql表,列或修改的列。我希望不要手动操作-手动在生产服务器上逐个执行相同的更改。那很丑陋,容易犯错,而且必须记住你所做的每一个更改。我能想到的另一种方法是使预发布服务器成为生产服务器,并导入所有现有的数据库数据。我不喜欢它,似乎随时都可能出现错误。你能推荐最好的方式吗?
3个回答

8
  • 版本控制 - 使用它!
  • 迁移 - 使用它!

版本控制(Git)

您应该在生产服务器以及测试/阶段服务器上拥有一个git服务器。您会为所做的更改进行提交,然后将这些提交/更改“推送”到服务器上。一旦您的测试服务器运行正常,您就可以将其推送到生产服务器上。

迁移

大多数现代PHP框架都提供此功能。基本上,您将在代码中描述数据库模式。对于Laravel,您将运行:artisan migrate或类似命令,这将使模式推送到您的数据库中。

如果只有一个数据库和一个Web服务器,您可能希望阻止公众访问它们,直到更新完成,这主要是针对数据库的,只需要几秒钟,但可以避免任何迁移时的错误。一个简单的git后置钩子就可以解决这个问题。在线上有大量关于此的信息。


1
此外,请记住所有数据库迁移都应该向后兼容(至少在部署之间)。这将使您能够在更新服务器之前迁移数据库,同时服务器仍在运行。 - matt snider

2
创建一个数据库升级脚本。最好使用工具生成。
如果您还没有构建1.0版本的发布包,请先构建一个。为1.1版本构建升级包和部署脚本,将您的生产版本从1.0升级到1.1。
关于如何更新现有部署的灵感,您可以参考WordPress如何升级
  1. 下载升级包并解压到临时目录
  2. 确保文件已解压!
  3. 发布“正在维护”消息
  4. 复制新文件。这是一种直接复制/替换而不是删除的方式。
  5. 如果数据库尚未更新,则升级它
  6. 从临时目录中删除已解压的文件
  7. 移除“正在维护”消息
  8. 删除旧文件。遍历已弃用和未使用的文件列表并将其删除。
在您实际发布之前,使用1.0发布包重新创建您的生产环境,并在测试部署升级包的过程中进行测试,确保满意。
备份生产环境,升级生产环境。

0

我听说SharePoint使前端支持旧和新的数据库。那么你首先更新所有前端代码并使用旧数据库。当所有用户使用新前端代码后,再更新数据库。一旦升级完成,您可以删除对旧数据库的支持,并为下一个版本再次执行相同的技巧。

这样,您就可以拥有最小的停机时间与负载均衡的前端。

也许他们让它听起来比实际简单,但我喜欢这个原则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接