5

假设我有一个在线游戏正在运行,它的版本是 1.0。

我一直在登台服务器上开发并为游戏带来新功能。登台服务器是独立于实时服务器的服务器。(我相信大多数人都是这样做的)

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

假设它是一个简单的游戏服务器 PHP+MYSQL。因此有新的 php 脚本或更改的脚本,以及新的 mysql 表、列或修改的列。我希望不要手动进行 - 在实时服务器上手动进行相同的更改。这很丑陋且容易出错,并且必须记住您所做的每一个更改。

我能想到的另一种方法是使登台服务器处于活动状态,并导入所有现有的数据库数据。我不喜欢它,似乎错误随时可能发生。

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

4

3 回答 3

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

版本控制 (Git)

你应该在实时服务器上有一个 git 服务器,以及在你的测试/阶段服务器上。您将对所做的更改进行提交,然后将这些提交/更改“推送”到服务器。一旦您的测试服务器工作,您将其推送到您的实时服务器。

迁移

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

只有一个数据库和一个 Web 服务器,您可能希望在更新之前阻止公众访问它们,这主要用于数据库,并且只会持续几秒钟,但可以防止迁移时出现任何错误。一个简单的 git post 钩子就可以了。网上有大量关于此的信息。

于 2013-01-24T02:58:56.740 回答
2

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

如果您还没有这样做,请为 1.0 版构建一个发布包。为 1.1 版本构建一个升级包和部署脚本,它将你的生产版本从 1.0 修补到 1.1

有关如何更新现有部署的灵感,您可以查看Wordpress 如何升级

  1. 下载升级包解压到临时目录
  2. 确保文件解压!
  3. 发布“停机维护”消息
  4. 复制新文件。这是直接复制/替换。不删除。
  5. 如果数据库尚未更新,请升级数据库
  6. 从临时目录中删除解压缩的文件
  7. 删除“停机维护”消息
  8. 删除旧文件。浏览已弃用和未使用文件的列表并删除它们。

使用 1.0 版本包在暂存环境中重新创建生产机器,并在那里测试升级包的部署,直到您满意为止,然后再上线。

备份生产,升级生产。

于 2013-01-30T21:30:25.293 回答
0

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

通过这种方式,您可以通过负载平衡的前端将停机时间降至最低。

也许他们让它听起来比实际上更容易,但我喜欢这个原则。

于 2013-01-30T11:11:00.153 回答