【知識分享】遊戲伺服器和web伺服器的不同

小鑫fwq 發表於 2022-11-24

遊戲伺服器與Web伺服器的不同?對於遊戲伺服器的一些介紹也許會說遊戲伺服器是一個需要長時間執行的程式,接下來該怎麼辦。對於Web伺服器,我個人認為需要長時間執行,而且還需要對非定點、不定時的請求作出響應。二者在宏觀層面實際上並無本質的不同。與此同時Web伺服器還會對穩定性和效能有要求,遊戲服一般分為大小服,壹基比小鑫這裡按小服舉例來說。
1、狀態

第一個要提到的是狀態。也許你聽過這樣一種觀點,遊戲伺服器是有狀態的,而Web伺服器是無狀態的。這意味著什麼?Web伺服器的資料流大部分直接到達資料庫。並且遊戲伺服器的資料流先被存入記憶體,然後定期寫入資料庫(落地)。

換言之,在執行時,遊戲伺服器自身的資料和資料庫中的資料將有一個不一致的視窗。這個時候,遊戲伺服器出現故障,將導致資料先到達的記憶體資料與資料庫存資料不一致。
但是Web伺服器並沒有這個問題,Web上所有的資料狀態都會出現,並且可以在操作中新增事務,不必擔心由於操作失敗而引入髒資料。由於存在狀態限制,遊戲伺服器將非常謹慎地使用記憶體、CPU。在資源有限的條件下,為了最大化承載量,並減少服務延遲。自然,Web伺服器需要進行相應的最佳化,以減少特定介面的響應時間。
2、擴建。

對於Web伺服器,如果您不能評估服務者所面臨的壓力,也不希望由於即時熱點訪問而直接導致服務不可用,則可以將其設定為自動擴充套件,因為每個服務僅僅是簡單地接收請求,然後處理請求、返回結果,而不會將資料儲存在伺服器的記憶體中。為了將資料儲存到記憶體,Redis中同樣如此。而且Redis資料丟失對資料的一致性基本上沒有影響。

但要實現遊戲伺服器的靈活性,就難以達到網路的靈活性。第一,資料流不是資料庫,而是記憶體。

舉例來說,玩家的主要城市都被攻打著火燒,如果有自動擴容,很有可能在落地視窗中,玩家再次請求,請求到另一個。主要城市又沒起火。由於資料將首先存在於記憶體中。
又比如,玩家氪空間購買了一個禮包。接著退出遊戲,在落地視窗中再次上線沒有。這個資料並不簡單,玩家這是花真金白銀買來的道具,突然間沒了,一、兩個還好處理,如果多個玩家都有這樣的問題,那就屬於嚴重的線上事故了。修理資料的工作非常繁重。

因此,對一個遊戲伺服器來說,記憶體和CPU的可用資源都非常有限,不像Web伺服器那樣可以實現橫向擴充套件,而不必花費大量成本。正因為如此,遊戲伺服器才會非常專注於程式碼的效能和穩定性。
3、穩定。

正如上面所說的,如果遊戲伺服器在執行中出現BUG,導致服務直接無法使用,或者在BUG上刷到大量道具,將會是一次很嚴重的線上事故。

對Web伺服器而言,如果是管理系統這樣的話,很可能會有髒資料值得注意,髒資料對於Web來說,查詢起來也是一件很頭痛的事。在沒有髒資料的情況下,服務只是暫時不可用,並且如果使用了微服務體系結構,重新啟動服務的成本相對較低,只有被重新啟動服務的業務無法獲得,而其他部分則可以正常訪問。

對遊戲伺服器而言,伺服器重新啟動會影響全服玩家。停服期間,玩家甚至不能進入遊戲,尤其影響玩家體驗。此外,如果在停用之前伺服器的資料落地發生問題,那麼在服務重新啟動後將資料從資料庫載入到記憶體,此時同樣會導致資料不一致的問題。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013663/viewspace-2925005/,如需轉載,請註明出處,否則將追究法律責任。