回覆列表
  • 1 # 使用者7380796078

    事實上,大多遊戲伺服器分為邏輯程式伺服器和資料庫伺服器,如果是線上運營的伺服器,基本上是在至少兩臺主機上。

    在發現幾個邏輯伺服器中的bug,或者加了某些功能,比如少加了三個金幣,多算了一點經驗等,只需要在測試服測試完畢,上傳覆蓋執行檔案(jar或php),但是依然要重啟邏輯伺服器程序。

    而Erlang的熱升級技術,就帶了更好的體驗。Erlang原本脫胎於電信行業,Jow Armstrong 在描述Erlang的設計要求時期中就提到了“軟體維護應該能在不停止系統的情況下進行”。

    在實踐中,因為這種不停服務的熱更新獲益良多,終於不用再等到半夜沒人的時候再做更新了,對於一些緊急的bug修復,熱更新實在是一把利器。

    Erlang熱更新的秘密其實都集中在wxxxcode-style模組、wxxxcode-style模組是Erlang Code Server暴露出來的對外介面,其職責就是把已經編譯好的模組載入到Erlang的執行時環境。

    程式碼版本有兩個概念,當前版本程式碼“current”和老版本程式碼“old”,一旦模組被載入就變成“current”,再有一個版本過來被載入,之前的版本就變成“old”,新載入的變成“current”。

    這時候,兩個版本還是同時存在,新的請求執行的時候會使用新的版本,而老版本的程式碼還會被使用因為還有其他模組的呼叫“old”版本中。

    再進行一次熱更新,這時就有第三個例項被載入,wxxxcode-style server就會終止掉還在駐留在“old”版本程式碼依賴的程序。然後第三個例項成為“current”,之前版本的“current”被標記成“old”。

    這種方法有效降低了因版本升級而導致的使用者流失。

  • 中秋節和大豐收的關聯?
  • 戀愛關係中互相理解和過度縱容的區別在哪?