遊戲伺服器和web伺服器有哪些地方不一樣

199cloud發表於2020-06-19

遊戲伺服器和web伺服器有哪些地方不一樣:

對延遲要求苛刻,一個網站,延遲是500ms還是1s無關痛癢,使用者的操作不會很頻繁,往往點選一下就能看上一會。
但對於遊戲,尤其是FPS型別的遊戲,150ms以上的延遲都會使遊戲體驗大打折扣,客戶端發往伺服器的請求一秒鐘內往往有十幾個之多,微服務那種呼叫鏈的開銷,絕大部分的遊戲都承受不起。
像MMO,MOBA,FPS這種實時性要求高的遊戲,伺服器的幀率在10hz到60hz,一秒鐘更新最少10次,每一次更新大約幾十(moba,fps)甚至幾千(mmo)個unit,留給每一個unit的處理時間最多幾毫秒甚至幾微秒,而同個資料中心內一個roundtrip time平均就要0.5ms 遊戲伺服器的使用者之間,具有高度的互動性,狀態性極強。web伺服器的使用者與使用者之間,你操作你的我操作我的,你我之間沒關係。
在資料庫之上這一層,使用者之間同步資料以及順序性的需求幾乎沒有。
如果有,那也是在資料庫,快取這一層,比如事務操作一下,快取同步一下即可。web伺服器天然的無狀態性,弱狀態性適合橫向擴充套件,做分散式。同一個使用者的不同請求,往往可以由負載均衡路由到不同的伺服器處理。而遊戲很難做到這一點,往往都是透過分服,開房間等手段解決。
遊戲伺服器的資料庫資料,具有高度的反正規化特點。從使用者登入後,基本上使用者的所有資料都需要load進記憶體中。
不像web比如購物網站,登入後,只需要使用者名稱和購物車中物品數量。點開購物車,載入購物車資料。點訂單,載入歷史訂單。每個服務都有自己的資料庫,服務自身保證資料的invariants,資料庫之間透過最終一致性達成一致即可。
遊戲不一樣,不可能等到你被砍的時候再去資料庫裡把你的裝備讀出來算一下防禦力看看該扣多少血。後設資料依賴。
遊戲的使用者資料,可以說是高度依賴後設資料,你的裝備屬性,外形,技能效果等等都是依賴策劃配置出的資料表(後設資料)。而web伺服器其實沒有所對應的這一層的的後設資料。
一般說到web伺服器後設資料,基本都是描述服務之間的契約,比如RESTFUL API的JSON定義等。 遊戲伺服器對後設資料的依賴是全域性性的。
假如有一個微服務化的遊戲,想削弱某職業的技能而不重啟其他服務比如戰鬥服務?絕無可能。因為上面幾點原因,資料都是儲存在程式內的。沒有統一的框架。
遊戲玩法多種多樣,即便是同一種型別的遊戲,也可以是腦洞大開,很難抽象出一個行業內可複用的邏輯流程然後再透過框架去做事情,比如spring那一套。【199cloud-艾娜小編】                  


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

相關文章