假设我有一个在线游戏正在运行,它的版本是1.0。
我一直在临时服务器上开发,并为游戏带来新功能。暂存服务器是独立于活动服务器的服务器。(我相信大多数人都是这样做的)
OK。我完成了新版本1.1。现在做网络游戏服务器升级的最佳做法是什么?
假设它是一个简单的游戏服务器PHP+MYSQL。所以有新的php脚本或修改的脚本,新的mysql表,列或修改的列。我希望不要手动做它-手动做相同的更改一个接一个的在线服务器上。这样很难看,也很容易出错,而且还得记住你做过的每一个改动。
我能想到的另一种方法是使登台服务器是活动的,并导入所有现有的数据库数据。我不喜欢这样,似乎错误随时都可能发生。
你能推荐的最好方法是什么?
- 版本控制-使用它!
- 迁移-使用它!
版本控制(Git)
你应该在活动服务器上有一个git服务器,以及在测试/阶段服务器上。您将对所做的更改进行提交,然后将这些提交/更改"推送"到服务器。一旦您的测试服务器工作,您将把它推送到您的活动服务器。
<<p> 迁移/strong>大多数现代PHP框架都提供了这个特性。基本上,您将在代码中描述数据库模式。使用Laravel,您可以运行:artisan migrate
或其他将模式推送到数据库的程序。
如果只有一个数据库和一个web服务器,你可能想要阻止公众访问它们,直到它更新,这主要是针对数据库,只会持续几秒钟,但可以防止迁移时出现任何错误。一个简单的git post钩子就可以完成这个任务。网上有很多关于这个的信息
创建数据库升级脚本。最好使用工具生成一个。
如果你还没有为1.0版本构建一个发布包。构建1.1版本的升级包和部署脚本,将生产版本从1.0补丁到1.1
关于如何更新现有部署的灵感,您可以查看如何升级Wordpress:
- 下载升级包并解压缩到临时目录
- 确保文件解压缩!
- 设置"停机维护"消息
- 复制新文件。这是直接的复制/替换。不是删除。
- 如果数据库不是最新的,请升级数据库
- 从临时目录 中删除未压缩的文件
- 删除"停机维护"消息
- 删除旧文件。查看弃用和未使用的文件列表并删除它们。
使用1.0发布包在登台环境上重新创建您的生产机器,并在登台环境中测试升级包的部署,直到您满意为止。
备份生产,升级生产。
我听说SharePoint让前端支持新旧数据库。然后首先更新所有前端代码并使用旧数据库。在所有用户使用了新的前端代码之后,更新数据库。升级完成后,您可以删除对旧数据库的支持,并在下一个版本中再次执行相同的技巧。
通过这种方式,您可以使用负载均衡的前端最小化停机时间。
也许他们让它听起来比实际容易,但我喜欢这个原则。