游戏领域Serverless架构探索之路
作者:山獵、王勇猛、張羽
江娛互動是一家新興的游戲企業(yè),自2018年成立伊始,江娛互動就面向廣闊的全球游戲市場,通過創(chuàng)造有趣的游戲體驗(yàn),在競爭激烈的游戲市場占得一席之地。僅僅2年的時間,江娛互動就憑借Topwar(口袋奇兵)單款產(chǎn)品躋身中國游戲廠商出海30強(qiáng)。在“中國游戲,未來可期”的使命下,江娛互動正在不斷豐富旗下的游戲品類,希望把更多的快樂帶給全球玩家。
隨著業(yè)務(wù)的飛速增長,游戲服務(wù)端的系統(tǒng)規(guī)模和系統(tǒng)復(fù)雜度正在經(jīng)歷著翻天覆地的變化。幸運(yùn)的是,江娛互動擁有一支極具戰(zhàn)斗力的技術(shù)團(tuán)隊(duì),雖然團(tuán)隊(duì)的整體規(guī)模不大,但他們一直保持著對前沿技術(shù)領(lǐng)域的探索,通過多種手段維持系統(tǒng)架構(gòu)的技術(shù)先進(jìn)性,以更好地支撐業(yè)務(wù)需求,并降低IT成本。
在技術(shù)架構(gòu)的多次迭代升級中,有一項(xiàng)非常重要的工作,就是將游戲場景中通用的業(yè)務(wù)能力進(jìn)行抽象,從游戲主服中進(jìn)行剝離,沉淀到統(tǒng)一服務(wù)層,以模塊化的方式同時支撐江娛互動的多個游戲品類。從主服中剝離出來的業(yè)務(wù)能力包括賬號管理、IM、內(nèi)容安全、會員體系、信息推送、游戲行為分析等多個方面,這樣做首先降低了游戲主服的業(yè)務(wù)復(fù)雜度,使主服專注于對核心游戲場景的支撐。此外,通用的能力可以在多個游戲品類中得到復(fù)用,從而降低研發(fā)成本,提升研發(fā)效率。
能力拆分和業(yè)務(wù)耦合度降低,為持續(xù)迭代和新技術(shù)預(yù)研提供了便利,也為江娛互動在云原生Serverless領(lǐng)域深入探索創(chuàng)造了契機(jī)。Serverless架構(gòu)可以充分發(fā)揮計(jì)算資源的快速彈性能力,是云計(jì)算的重要發(fā)展方向。在游戲領(lǐng)域,游戲主服承載著復(fù)雜的核心業(yè)務(wù)邏輯,需要長期運(yùn)行,并與多個玩家終端進(jìn)行極低延遲的數(shù)據(jù)交互,因此仍然需要通過虛擬機(jī)或容器的方式承載。從主服中剝離的游戲周邊業(yè)務(wù)場景,就成為了試點(diǎn)Serverless技術(shù)架構(gòu)的首選目標(biāo)。
江娛互動的在線翻譯新需求
在線翻譯業(yè)務(wù)是最早進(jìn)行Serverless試點(diǎn)的場景,這和江娛互動的全球化戰(zhàn)略有關(guān)。江娛互動的旗艦作品《口袋奇兵》是一個面向全球市場的游戲,吸引著世界各地的玩家。每次進(jìn)入游戲界面,我們都能看到用著不同語言、頂著不同國旗標(biāo)志的玩家,愉快的交流著各種和游戲相關(guān)的話題。
在這個業(yè)務(wù)場景中,通過提供一個簡單的在線翻譯功能,就將全球各地的玩家凝聚到一起,帶來前所未有的用戶體驗(yàn)。這類簡單易用的設(shè)計(jì)也是《口袋奇兵》在各大應(yīng)用市場都能屢獲高分好評,得到玩家的盛贊的原因之一。
對于江娛互動而言,從0到1開發(fā)一款包含全球幾十種語言的實(shí)時翻譯工具顯然是不現(xiàn)實(shí)的。好在游戲玩家之間的相互交流往往言簡意賅,翻譯的結(jié)果并不需要100%準(zhǔn)確就能心領(lǐng)神會,反而對于后臺處理的及時性有比較高的要求。像Google Translator這樣的在線平臺已經(jīng)提供了強(qiáng)大的在線翻譯能力,所以只需要將玩家的請求進(jìn)行簡單預(yù)處理后,就可以把翻譯的工作轉(zhuǎn)發(fā)到第三方平臺來完成。
這是一個非常簡單的功能,但在技術(shù)架構(gòu)的實(shí)現(xiàn)上,還是具有一定挑戰(zhàn)的。每個時間段同時在線的玩家數(shù)量都不是完全均等的,存在明顯的波峰波谷,當(dāng)同時在線的玩家數(shù)量比較大的時候,就會產(chǎn)生非常大的聊天量。而且聊天量還不會簡單的跟玩家在線數(shù)量成正比關(guān)系,遇到某些熱點(diǎn)事件的時候,會引發(fā)全球玩家的熱議,需要在線翻譯的消息量也會陡增,這就需要一套可彈性伸縮的架構(gòu)來處理玩家的翻譯請求。
最初的架構(gòu)是通過負(fù)載均衡SLB和基于EasySwoole框架的PHP應(yīng)用集群來實(shí)現(xiàn)的。
在這個架構(gòu)中,通過PHP編寫的主體應(yīng)用對玩家的翻譯請求進(jìn)行一系列的預(yù)處理,包括符號代碼的替換以及敏感內(nèi)容的過濾等,然后轉(zhuǎn)發(fā)到第三方翻譯平臺獲取翻譯結(jié)果。這是一套非常被廣泛采用的擁有高并發(fā)處理能力的技術(shù)架構(gòu),在云計(jì)算時代,可以借助于云資源的彈性伸縮特性,使整個集群的吞吐量隨著業(yè)務(wù)量的變化而動態(tài)調(diào)整。但基于云原生的視角來看,這套架構(gòu)在生產(chǎn)環(huán)境大規(guī)模運(yùn)行的時候還是存在一些不完美之處。
1. ? ?維護(hù)工作量大。整套系統(tǒng)的維護(hù)工作量涵蓋了虛擬機(jī)、網(wǎng)絡(luò)、負(fù)載均衡組件、操作系統(tǒng)、應(yīng)用等多個層面,需要投入大量的時間和精力來保障系統(tǒng)的高可用性與穩(wěn)定性。舉一個最簡單的例子,當(dāng)某個應(yīng)用實(shí)例出現(xiàn)故障的時候,如何第一時間定位故障并盡可能迅速的將其從計(jì)算集群中摘除呢?這些都需要再配合完整的監(jiān)控機(jī)制以及故障隔離恢復(fù)機(jī)制來實(shí)現(xiàn)。
2. ? ?彈性伸縮能力滯后。不論是通過定時任務(wù),還是通過指標(biāo)閾值(CPU利用率、內(nèi)存使用率等)來觸發(fā)彈性擴(kuò)容,都沒有辦法基于實(shí)際請求量精細(xì)化管理,在遇到聊天請求密度大陡增的時候,會面臨彈性伸縮能力滯后的問題。即便通過Kubernetes以及預(yù)留資源池等技術(shù)優(yōu)化,擴(kuò)容一個新的實(shí)例也往往需要幾分鐘的時間。
3. ?資源利用率低。滯后的彈性伸縮能力會導(dǎo)致伸縮策略制定得相對保守,造成資源利用率的下降,最直接的表現(xiàn)是增加了資源成本:
基于阿里云函數(shù)計(jì)算FC的Serverless方案有什么優(yōu)勢?
有沒有一種方案能能幫助技術(shù)團(tuán)隊(duì)專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),并可以根據(jù)玩家的實(shí)際請求量進(jìn)行精細(xì)化的資源分配,從而實(shí)現(xiàn)資源利用最大化呢?隨著云計(jì)算的飛速發(fā)展,各大云廠商都在積極探索新的方案,用更加“云原生”的思路來解決成本和效率的問題,基于阿里云函數(shù)計(jì)算FC的Serverless方案就是這個領(lǐng)域的杰出代表。
函數(shù)計(jì)算FC是事件驅(qū)動的全托管計(jì)算服務(wù),通過函數(shù)計(jì)算,開發(fā)者無需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳,函數(shù)計(jì)算會為自動準(zhǔn)備好計(jì)算資源,以彈性、可靠的方式運(yùn)行業(yè)務(wù)邏輯,并提供日志查詢、性能監(jiān)控、報警等附加功能,確保系統(tǒng)的穩(wěn)定運(yùn)行。
相比傳統(tǒng)的應(yīng)用服務(wù)器保持運(yùn)行狀態(tài)并對外提供服務(wù)的方式,函數(shù)計(jì)算最大的區(qū)別是按需拉起計(jì)算資源對任務(wù)進(jìn)行處理,在任務(wù)完成以后自動的回收計(jì)算資源,這是一種真正符合Serverless理念的方案,能最大化的提升資源利用率,減少系統(tǒng)系統(tǒng)維護(hù)工作量和使用成本。因?yàn)椴恍枰A(yù)先申請計(jì)算資源,使用者完全不需要考慮容量評估和彈性伸縮的問題,只需要根據(jù)資源的實(shí)際使用量來進(jìn)行付費(fèi)。
Serverless在游戲領(lǐng)域的落地實(shí)戰(zhàn)
對于在線翻譯這樣的簡單業(yè)務(wù)邏輯實(shí)現(xiàn),從傳統(tǒng)架構(gòu)遷移到Serverless架構(gòu)是輕而易舉的事情。江娛互動把每條由玩家發(fā)起的翻譯請求當(dāng)成函數(shù)計(jì)算的一次任務(wù),拉起對應(yīng)的計(jì)算資源進(jìn)行處理,任務(wù)完成之后自動將資源釋放。因?yàn)榻瓓驶拥募夹g(shù)團(tuán)隊(duì)對Java語言的熟悉程度最高,在Serverless改造過程中換用Java語言來實(shí)現(xiàn)在線翻譯功能,同時也能充分利用Java系豐富的生態(tài)能力。當(dāng)然,函數(shù)計(jì)算并不限制使用特定的開發(fā)語言,也不局限于特定的業(yè)務(wù)邏輯,主流的開發(fā)語言都可以非常好的支持。通過Serverless化改造后,在線翻譯業(yè)務(wù)的系統(tǒng)架構(gòu)變得更為簡單。
?
配置了HTTP觸發(fā)器的函數(shù)可以直接響應(yīng)玩家發(fā)起的請求,并通過彈性可靠的方式調(diào)度相應(yīng)的計(jì)算資源進(jìn)行處理。由于函數(shù)計(jì)算的任務(wù)分配能夠完全匹配前端用戶流量的變化,負(fù)載均衡SLB就不再有用武之地,可以從架構(gòu)中直接移除。同時,長駐運(yùn)行的應(yīng)用集群也不再需要,函數(shù)計(jì)算平臺能夠快速拉起大量計(jì)算資源并發(fā)執(zhí)行任務(wù),并確保整套架構(gòu)的高可用性。其中,Redis的作用是緩存一部分高頻的簡單語句,減少第三方平臺的依賴。這樣的架構(gòu)簡化給江娛互動技術(shù)團(tuán)隊(duì)帶來的最大驚喜,是不再需要進(jìn)行容量規(guī)劃以及彈性伸縮管理工作,讓團(tuán)隊(duì)可以集中精力實(shí)現(xiàn)業(yè)務(wù)需求,并在更多的領(lǐng)域?qū)崿F(xiàn)業(yè)務(wù)創(chuàng)新。
相比Node.js等語言,Java實(shí)例在初始化以及類加載等方面需要消耗的時間會比較長,盡管函數(shù)計(jì)算FC已經(jīng)通過多種優(yōu)化實(shí)現(xiàn)計(jì)算資源毫秒級拉起,但往往一個Java程序真正投入運(yùn)行需要幾秒鐘的時間,這對于在線翻譯這樣的延時敏感型業(yè)務(wù)是一個非常不利的因素。阿里云提出的解決方案是通過單實(shí)例多并發(fā),以及預(yù)留實(shí)例這兩項(xiàng)技術(shù)來解決延遲敏感型業(yè)務(wù)遇到的問題。
通過單實(shí)例多并發(fā),能讓每個拉起的函數(shù)計(jì)算實(shí)例,并發(fā)處理多達(dá)100個任務(wù),以此減少平均執(zhí)行時長,節(jié)省費(fèi)用,并降低冷啟動的概率。通過預(yù)留實(shí)例優(yōu)化,能夠根據(jù)函數(shù)的負(fù)載變化提前分配好計(jì)算資源,使系統(tǒng)能夠在擴(kuò)容按量實(shí)例時仍然使用預(yù)留實(shí)例處理請求,從而徹底消除冷啟動帶來的延時毛刺。
改造后的在線翻譯業(yè)務(wù)采用完全按需使用計(jì)算資源的Serverless架構(gòu),能夠充分利用云計(jì)算的彈性能力。在成本方面,由于應(yīng)用不再需要長期運(yùn)行對外提供服務(wù),可以讓云資源的使用量完全匹配實(shí)際的業(yè)務(wù)量的變化,從而實(shí)現(xiàn)平均資源利用率的大幅提升。在系統(tǒng)的吞吐量方面,由于函數(shù)計(jì)算FC能夠在短時間內(nèi)迅速調(diào)集上萬個實(shí)例的計(jì)算資源,能夠在業(yè)務(wù)高峰期或用戶請求突增的情況下支撐海量并發(fā),而且不再需要有容量評估方面的前期工作;在系統(tǒng)維護(hù)方面,由于不需要預(yù)留計(jì)算資源,也不需要對底層的軟硬件進(jìn)行維護(hù),極大地降低了運(yùn)營成本,讓江娛互動的技術(shù)團(tuán)隊(duì)更專注于復(fù)雜業(yè)務(wù)邏輯的實(shí)現(xiàn)以及技術(shù)創(chuàng)新上。在線翻譯場景中,相比于傳統(tǒng)的架構(gòu),基于函數(shù)計(jì)算FC的Serverless方案可以幫助江娛互聯(lián)節(jié)省40%以上的IT成本投入。
另外一個讓江娛互動感受到研發(fā)效率明顯提升的,是函數(shù)計(jì)算FC提供的版本與別名管理功能。版本相當(dāng)于服務(wù)的快照,支持使用者為服務(wù)發(fā)布一個或多個版本,配合別名機(jī)制,可以實(shí)現(xiàn)軟件開發(fā)生命周期持續(xù)集成、持續(xù)發(fā)布,并用最便捷的方式實(shí)現(xiàn)服務(wù)的灰度迭代。
在后續(xù)的架構(gòu)優(yōu)化中,江娛互動將嘗試通過機(jī)器學(xué)習(xí)技術(shù)盡可能多的對原始內(nèi)容進(jìn)行預(yù)處理,以減少對于第三方平臺的依賴。在AI推理領(lǐng)域,依然可以利用Serverless架構(gòu)的優(yōu)勢,通過預(yù)先訓(xùn)練好的深度學(xué)習(xí)模型,在短時間內(nèi)調(diào)度大量計(jì)算資源進(jìn)行大規(guī)模并行處理。
在線翻譯場景試點(diǎn)Serverless技術(shù)成功后,江娛互動繼續(xù)在更多業(yè)務(wù)領(lǐng)域發(fā)掘跟Serverless技術(shù)相匹配的場景,在Push推送服務(wù)、內(nèi)容安全、游戲行為分析等領(lǐng)域都引入了Serverless技術(shù)。未來,江娛互動將繼續(xù)基于自身的技術(shù)特點(diǎn)不斷深入探索Serverless架構(gòu),在擁抱新技術(shù)的同時充分享受到云計(jì)算的紅利。
目前,江娛互動的產(chǎn)品和團(tuán)隊(duì)都處于高速發(fā)展的快車道上,需要招納更多有才華并且熱愛游戲行業(yè)的人才,一起探索更廣闊的世界。如果你希望加入這個優(yōu)秀的團(tuán)隊(duì),請掃下方的二維碼聯(lián)系他們吧。
原文鏈接:https://developer.aliyun.com/article/781919?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報,一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的游戏领域Serverless架构探索之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小麦助教:通过阿里云原生中间件产品组合,
- 下一篇: 冯诺依曼架构的 IO 鸿沟,谁能来填补?