遊戲是如何做到伺服器不停機維護的?
遊戲的定期更新版本已經再尋常不過了,但頻繁的更新會造成流失率非常嚴重,哪個玩家也不希望再BOSS將要躺下那一刻,伺服器停機維護了。在小版本更新過程中,採用不停機維護成為現在遊戲的主流方式,那究竟是如何做到不停機維護的呢?
事實上,大多遊戲伺服器分為邏輯程序伺服器和資料庫伺服器,如果是線上運營的伺服器,基本上是在至少兩台主機上,在發現幾個邏輯伺服器中的bug,或者加了某些功能,比如少加了三個金幣,多算了一點經驗等,只需要在測試服測試完畢,上傳覆蓋執行文件(jar或php),但是依然要重啟邏輯伺服器進程。
而Erlang的熱升級技術,就帶了更好的體驗。Erlang原本脫胎於電信行業,Jow Armstrong 在描述Erlang的設計要求時期中就提到了「軟體維護應該能在不停止系統的情況下進行。」在實踐中,我們也因為這種不停服務的熱更新獲益良多,終於不用再等到半夜沒人的時候再做更新了,對於一些緊急的bug修復,熱更新實在是一把利器。
Erlang熱更新的秘密其實都集中在code模塊,code模塊是Erlang Code Server暴露出來的對外介面其職責就是把已經編譯好的模塊載入到Erlang的運行時環境。
代碼版本有兩個概念 當前版本代碼"current"和老版本代碼"old",一旦模塊被載入就變成"current",再有一個版本過來被載入,之前的版本就變成"old",新載入的變成"current"。這時候,兩個版本還是同時存在,新的請求執行的時候會使用新的版本,而老版本的代碼還會被使用因為還有其他模塊的調用"old"版本中。如果再進行一次熱更新,這時就有第三個實例被載入,code server就會終止掉還在駐留在"old"版本代碼依賴的進程。然後第三個實例成為"current",之前版本的"current"被標記成"old"。
這種方法有效降低了因版本升級而導致的用戶流失。當然,實現不停機更新的技術方法還有很多,歡迎一起交流經驗。
※一片小碎紙引起的故障,技術員教你如何解決印表機卡紙問題
※10大頂級網路監控軟體和可見性工具
※常年玩鷹卻被鷹啄了眼 網路安全公司慘遭黑客入侵
※乾貨分享:惠普1007印表機開機異響故障處理辦法分享
※未來世界 機器可能會幫你做更多決策
TAG:IT168企業級 |
※不用健身器材,如何徒手鍛煉肩部?從易到難,你能做到哪一步
※做機器人很難,他卻做到了全球唯一,如何讓「真有用」進行到底?
※機器學習:怎樣才能做到從入門到不放棄?
※手機定位是怎麼做到的?
※騎摩托車有哪些行為是危險的?如何做到安全駕駛?
※睡前玩手機,怎麼做到不傷眼
※喝水時最簡單的做法,幫助你防癌保健康,你能做到么?
※玩遊戲不卡頓的手機,這兩部可以做到
※相信嗎?如果做到這些穿衣細節 可以讓你更有品位!
※真事兒!手槍打下飛機,猜猜誰可以做到?
※用眼不適?多是手機色溫搞的鬼!自定義色溫,華為手機就能做到!
※那些不辦健身卡也有馬甲線的人,是如何做到的
※滾筒洗衣機如何清潔?只需做到這五步,輕鬆搞定!
※怎麼判斷自己是不是備胎?如何做到不會「當局者迷」?
※堅持游泳,你做到了嗎?
※相機里的照片可以直接傳到手機?還不用電腦!四個方法輕鬆做到
※《絕地求生》此伺服器竟無人敢開掛,到底是怎樣做到的?
※要怎樣做到才能讓手機不卡或者說減少卡頓?
※你敢用勺子挖人腦吃嗎?如果不敢,進來看看他是怎麼做到的……
※他「養」的金魚不用呼吸,也不會死!好想知道他是怎麼做到的……