當前位置: 華文問答 > 遊戲

為什麽遊戲公司的server不願意微服務化?

2020-02-26遊戲

你知道遊戲屬於什麽套用麽?

low latency,也就是latency敏感的套用

這類套用屬於即時系統,但是遊戲的即時沒有那麽強,可以劃歸為軟即時一類

就偶爾出點小問題,無所謂,反正是玩

而且公網本身也無法保證百分百不出問題

那這些系統,最忌諱的,就是io,因為io是latency的大忌

io層次一多,一定會慢下來

不信你試試,遊戲裏面一般為了保證流暢的體驗,要求是60fps

那每一幀只有1/60大約是16ms的間隔

要在16ms內完成很多東西,當然你可以降低幀數,保證螢幕重新整理的幀數是60fps就行

你可以讓同步的幀數變成20fps,但是本質,還是10ms*n這個數量級上的

你知道一個io能減少多少ms嘛?

你自己用你的電腦試試,隨便什麽環境,不同的兩個service之間呼叫,你試試看

看每一秒能支持多少次io

運氣好,10ms左右,運氣不好,100ms都有可能

甚至有些時候,幾s也都會出現

都不要說service了,我把service直接釋出成verticle/eventbus在vert.x上,都會出現明顯的latency,更不要說不同系統之間透過web的io了

所以你覺得你有那麽富裕的時間來搞所謂的微服務麽?

這是遊戲區別於web套用的一個主要特征

web套用,更多的是處理high throughput

因為對於每一次請求而言,latency其實使用者並不敏感

買個衣服,你卡一點也沒啥關系,你用淘寶哪次交易能在1s以內完成?沒有啦

運氣不好,你還會遇到淘寶交易發送過去之後,卡半天,然後告訴你,你等下再來看結果的情況

high throughput vs low latency

是一個比較出名的topic,網絡上一搜,可以搜到很多

至於polyglot,跟這兩個沒有必然聯系,誰說low latency不能polyglot的了?

自動擴容則是stateful和stateless的區別,一般web套用可以做到stateless,scale out很容易

但是stateful套用,要想scale out,要難得多得多,遊戲,社交都屬於這一類套用

還是那句話,web的經驗不要亂套,自己動手去做一次就知道這裏面的取舍了

要不然怎麽說,我估計你還是不太理解