2013-01-21 83 views
5

假设我有一个在线游戏正在运行,并且它的版本为1.0。做网络游戏服务器升级的最佳做法?

我继续在舞台服务器上开发并为游戏带来新功能。登台服务器是与现场服务器分开的服务器。 (我相信大多数人这样做)

好的。我完成了新版本1.1。现在做网络游戏服务器升级的最佳做法是什么?

我们假设它是一个简单的游戏服务器PHP + MYSQL。所以有新的PHP脚本或更改的脚本,以及新的MySQL表格,列或修改列。我希望不要手动执行 - 手动在活动服务器上进行相同的更改。这很丑陋,很容易犯错,而且必须记住你做过的每一项改变。

我能想到的另一种方式是使临时服务器成为活动状态,并导入所有现有的数据库数据。我不喜欢它,似乎任何时候都可能发生错误。

什么是您可以推荐的最佳方式?

回答

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

版本控制(GIT)

你应该有直播服务器的Git服务器,以及,为您的测试/台服务器上。你会提交你所做的更改,然后你将这些提交/更改“推送”到服务器。一旦您的测试服务器正常工作,您就可以将其推送到您的实时服务器

迁移

最现代化的PHP框架提供此功能。基本上,你会在代码中描述你的数据库模式。使用Laravel,您可以运行:artisan migrate或将模式推送到数据库的东西。

只有一个数据库和一个Web服务器,您可能想要阻止公众访问它们,直到它被更新为止,这主要是针对数据库的,并且只会持续几秒钟,但会在迁移时防止任何错误。一个简单的git post hook可以解决这个问题。网上有很多关于这方面的信息。

+1

另外,请记住,所有数据库迁移都应该向后兼容(至少在部署期间)。这将允许您在更新服务器之前迁移数据库,而服务器仍在运行。 –

0

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

这种方式可以使负载均衡前端的停机时间降至最低。

也许他们听起来比较容易,但我喜欢这个原则。

2

创建数据库升级脚本。最好使用工具生成一个。

为1.0版本构建发布包,如果您还没有这样做的话。 为版本1.1构建升级包和部署脚本,该脚本将将生产版本从1.0修补为1。1

有关如何更新现有部署的灵感,你可以看看How Wordpress upgrades

  1. 下载升级包并解压到一个临时目录
  2. 确保文件解压!
  3. 建立“Down for maintenance”消息
  4. 复制新文件。这是直接复制/替换。不删除。
  5. 升级数据库如果没有最新的
  6. 从临时目录
  7. 删除解压后的文件中删除了“停机维护”消息
  8. 删除旧的文件。查看已弃用和未使用的文件列表并删除它们。

使用1.0发行包在临时环境中重新创建生产计算机,并在此之前测试升级包的部署,直到您满意为止。

备份生产,升级生产。