假设我有一个正在运行的在线游戏,其版本为1.0。
我一直在开发登台服务器并为游戏带来新功能。登台服务器是与实时服务器不同的服务器。 (我相信大多数人都是这样做的)
行。我完成了新版本1.1。现在进行在线游戏服务器升级的最佳做法是什么?
让我们假设它是一个简单的游戏服务器PHP + MYSQL。所以有新的PHP脚本或更改的脚本,以及新的mysql表,列或修改的列。我希望不要手动执行 - 在实时服务器上逐个手动执行相同的更改。这很丑陋,容易犯错误,必须记住你所做的每一项改变。
我能想到的另一种方法是使登台服务器生效,并导入所有现有的数据库数据。我不喜欢它,似乎任何时候都可能发生错误。
您可以推荐的最佳方式是什么?
答案 0 :(得分:8)
版本控制(Git)
你应该在实时服务器上有一个git服务器,就像你的测试/舞台服务器一样。您将对您所做的更改进行提交,然后您将“推送”这些提交/更改到服务器。一旦您的测试服务器工作,您就可以将其推送到您的实时服务器。
<强>迁移强>
大多数现代PHP框架都提供此功能。基本上,您将在代码中描述您的数据库模式。使用Laravel,您可以运行:artisan migrate
或将模式推送到数据库的东西。
只有一个数据库和一个Web服务器,您可能希望阻止公众访问它们直到更新,这主要是针对数据库,并且只会持续几秒钟,但会在迁移时防止任何错误。一个简单的git post hook就可以了。网上有大量关于此的信息。
答案 1 :(得分:2)
创建数据库升级脚本。最好使用工具生成一个。
如果您还没有为版本1.0构建发行包。 为1.1版构建升级包和部署脚本,将生产版本从1.0修补到1.1
有关如何更新现有部署的灵感,您可以查看How Wordpress upgrades:
使用1.0版本软件包在临时环境中重新创建生产计算机,并测试升级包的部署,直到您满意为止,然后才能上线。
备份生产,升级生产。
答案 2 :(得分:0)
我听说SharePoint使前端支持旧数据库和新数据库。然后,您首先更新所有前端代码并使用旧数据库。所有用户使用新的前端代码后,请更新数据库。升级完成后,您可以删除对旧数据库的支持,并为下一个版本再次执行相同的操作。
这样,您可以通过负载均衡的前端实现最短的停机时间。
也许他们让它听起来比现在容易,但我喜欢这个原则。