你知道遊戲屬於什麽套用麽?
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的經驗不要亂套,自己動手去做一次就知道這裏面的取舍了
要不然怎麽說,我估計你還是不太理解