2013-01-21 162 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發行包在臨時環境中重新創建生產計算機,並在此之前測試升級包的部署,直到您滿意爲止。

備份生產,升級生產。