做者 | 山獵、王勇猛、張羽
來源|阿里巴巴雲原生公衆號前端
江娛互動是一家新興的遊戲企業,自 2018 年成立伊始,江娛互動就面向廣闊的全球遊戲市場,經過創造有趣的遊戲體驗,在競爭激烈的遊戲市場佔得一席之地。僅僅 2 年的時間,江娛互動就憑藉 Topwar(口袋奇兵)單款產品躋身中國遊戲廠商出海 30 強。在「中國遊戲,將來可期」的使命下,江娛互動正在不斷豐富旗下的遊戲品類,但願把更多的快樂帶給全球玩家。緩存
隨着業務的飛速增加,遊戲服務端的系統規模和系統複雜度正在經歷着翻天覆地的變化。幸運的是,江娛互動擁有一支極具戰鬥力的技術團隊,雖然團隊的總體規模不大,但他們一直保持着對前沿技術領域的探索,經過多種手段維持系統架構的技術先進性,以更好地支撐業務需求,並下降 IT 成本。安全
在技術架構的屢次迭代升級中,有一項很是重要的工做,就是將遊戲場景中通用的業務能力進行抽象,從遊戲主服中進行剝離,沉澱到統一服務層,以模塊化的方式同時支撐江娛互動的多個遊戲品類。從主服中剝離出來的業務能力包括帳號管理、IM、內容安全、會員體系、信息推送、遊戲行爲分析等多個方面,這樣作首先下降了遊戲主服的業務複雜度,使主服專一於對核心遊戲場景的支撐。此外,通用的能力能夠在多個遊戲品類中獲得複用,從而下降研發成本,提高研發效率。服務器
能力拆分和業務耦合度下降,爲持續迭代和新技術預研提供了便利,也爲江娛互動在雲原生 Serverless 領域深刻探索創造了契機。Serverless 架構能夠充分發揮計算資源的快速彈性能力,是雲計算的重要發展方向。在遊戲領域,遊戲主服承載着複雜的核心業務邏輯,須要長期運行,並與多個玩家終端進行極低延遲的數據交互,所以仍然須要經過虛擬機或容器的方式承載。從主服中剝離的遊戲周邊業務場景,就成爲了試點 Serverless 技術架構的首選目標。網絡
在線翻譯業務是最先進行 Serverless 試點的場景,這和江娛互動的全球化戰略有關。江娛互動的旗艦做品《口袋奇兵》是一個面向全球市場的遊戲,吸引着世界各地的玩家。每次進入遊戲界面,咱們都能看到用着不一樣語言、頂着不一樣國旗標誌的玩家,愉快的交流着各類和遊戲相關的話題。架構
在這個業務場景中,經過提供一個簡單的在線翻譯功能,就將全球各地的玩家凝聚到一塊兒,帶來史無前例的用戶體驗。這類簡單易用的設計也是《口袋奇兵》在各大應用市場都能屢獲高分好評,獲得玩家的盛讚的緣由之一。併發
對於江娛互動而言,從 0 到 1 開發一款包含全球幾十種語言的實時翻譯工具顯然是不現實的。好在遊戲玩家之間的相互交流每每言簡意賅,翻譯的結果並不須要 100% 準確就能心照不宣,反而對於後臺處理的及時性有比較高的要求。像 Google Translator 這樣的在線平臺已經提供了強大的在線翻譯能力,因此只須要將玩家的請求進行簡單預處理後,就能夠把翻譯的工做轉發到第三方平臺來完成。負載均衡
這是一個很是簡單的功能,但在技術架構的實現上,仍是具備必定挑戰的。每一個時間段同時在線的玩家數量都不是徹底均等的,存在明顯的波峯波谷,當同時在線的玩家數量比較大的時候,就會產生很是大的聊天量。並且聊天量還不會簡單的跟玩家在線數量成正比關係,遇到某些熱點事件的時候,會引起全球玩家的熱議,須要在線翻譯的消息量也會陡增,這就須要一套可彈性伸縮的架構來處理玩家的翻譯請求。框架
最初的架構是經過負載均衡 SLB 和基於 EasySwoole 框架的 PHP 應用集羣來實現的。 less
在這個架構中,經過 PHP 編寫的主體應用對玩家的翻譯請求進行一系列的預處理,包括符號代碼的替換以及敏感內容的過濾等,而後轉發到第三方翻譯平臺獲取翻譯結果。這是一套很是被普遍採用的擁有高併發處理能力的技術架構,在雲計算時代,能夠藉助於雲資源的彈性伸縮特性,使整個集羣的吞吐量隨着業務量的變化而動態調整。但基於雲原生的視角來看,這套架構在生產環境大規模運行的時候仍是存在一些不完美之處。
維護工做量大。整套系統的維護工做量涵蓋了虛擬機、網絡、負載均衡組件、操做系統、應用等多個層面,須要投入大量的時間和精力來保障系統的高可用性與穩定性。舉一個最簡單的例子,當某個應用實例出現故障的時候,如何第一時間定位故障並儘量迅速的將其從計算集羣中摘除呢?這些都須要再配合完整的監控機制以及故障隔離恢復機制來實現。
彈性伸縮能力滯後。不管是經過定時任務,仍是經過指標閾值(CPU 利用率、內存使用率等)來觸發彈性擴容,都沒有辦法基於實際請求量精細化管理,在遇到聊天請求密度大陡增的時候,會面臨彈性伸縮能力滯後的問題。即使經過 Kubernetes 以及預留資源池等技術優化,擴容一個新的實例也每每須要幾分鐘的時間。
有沒有一種方案能能幫助技術團隊專一於業務邏輯的實現,並能夠根據玩家的實際請求量進行精細化的資源分配,從而實現資源利用最大化呢?隨着雲計算的飛速發展,各大雲廠商都在積極探索新的方案,用更加「雲原生」的思路來解決成本和效率的問題,基於阿里雲函數計算 FC 的 Serverless 方案就是這個領域的傑出表明。
函數計算 FC 是事件驅動的全託管計算服務,經過函數計算,開發者無需管理服務器等基礎設施,只需編寫代碼並上傳,函數計算會爲自動準備好計算資源,以彈性、可靠的方式運行業務邏輯,並提供日誌查詢、性能監控、報警等附加功能,確保系統的穩定運行。
相比傳統的應用服務器保持運行狀態並對外提供服務的方式,函數計算最大的區別是按需拉起計算資源對任務進行處理,在任務完成之後自動的回收計算資源,這是一種真正符合 Serverless 理念的方案,能最大化的提高資源利用率,減小系統系統維護工做量和使用成本。由於不須要預先申請計算資源,使用者徹底不須要考慮容量評估和彈性伸縮的問題,只須要根據資源的實際使用量來進行付費。
對於在線翻譯這樣的簡單業務邏輯實現,從傳統架構遷移到 Serverless 架構是垂手可得的事情。江娛互動把每條由玩家發起的翻譯請求當成函數計算的一次任務,拉起對應的計算資源進行處理,任務完成以後自動將資源釋放。由於江娛互動的技術團隊對 Java 語言的熟悉程度最高,在 Serverless 改造過程當中換用 Java 語言來實如今線翻譯功能,同時也能充分利用 Java 系豐富的生態能力。固然,函數計算並不限制使用特定的開發語言,也不侷限於特定的業務邏輯,主流的開發語言均可以很是好的支持。經過 Serverless 化改造後,在線翻譯業務的系統架構變得更爲簡單。
配置了 HTTP 觸發器的函數能夠直接響應玩家發起的請求,並經過彈性可靠的方式調度相應的計算資源進行處理。因爲函數計算的任務分配可以徹底匹配前端用戶流量的變化,負載均衡 SLB 就再也不有用武之地,能夠從架構中直接移除。同時,長駐運行的應用集羣也再也不須要,函數計算平臺可以快速拉起大量計算資源併發執行任務,並確保整套架構的高可用性。其中,Redis 的做用是緩存一部分高頻的簡單語句,減小第三方平臺的依賴。這樣的架構簡化給江娛互動技術團隊帶來的最大驚喜,是再也不須要進行容量規劃以及彈性伸縮管理工做,讓團隊能夠集中精力實現業務需求,並在更多的領域實現業務創新。
相比 Node.js 等語言,Java 實例在初始化以及類加載等方面須要消耗的時間會比較長,儘管函數計算 FC 已經經過多種優化實現計算資源毫秒級拉起,但每每一個 Java 程序真正投入運行須要幾秒鐘的時間,這對於在線翻譯這樣的延時敏感型業務是一個很是不利的因素。阿里雲提出的解決方案是經過單實例多併發,以及預留實例這兩項技術來解決延遲敏感型業務遇到的問題。
經過單實例多併發,能讓每一個拉起的函數計算實例,併發處理多達 100 個任務,以此減小平均執行時長,節省費用,並下降冷啓動的機率。經過預留實例優化,可以根據函數的負載變化提早分配好計算資源,使系統可以在擴容按量實例時仍然使用預留實例處理請求,從而完全消除冷啓動帶來的延時毛刺。
改造後的在線翻譯業務採用徹底按需使用計算資源的 Serverless 架構,可以充分利用雲計算的彈性能力。在成本方面,因爲應用再也不須要長期運行對外提供服務,可讓雲資源的使用量徹底匹配實際的業務量的變化,從而實現平均資源利用率的大幅提高。在系統的吞吐量方面,因爲函數計算 FC 可以在短期內迅速調集上萬個實例的計算資源,可以在業務高峯期或用戶請求突增的狀況下支撐海量併發,並且再也不須要有容量評估方面的前期工做;在系統維護方面,因爲不須要預留計算資源,也不須要對底層的軟硬件進行維護,極大地下降了運營成本,讓江娛互動的技術團隊更專一於複雜業務邏輯的實現以及技術創新上。在線翻譯場景中,相比於傳統的架構,基於函數計算 FC 的 Serverless 方案能夠幫助江娛互聯節省 40% 以上的 IT 成本投入。
另一個讓江娛互動感覺到研發效率明顯提高的,是函數計算 FC 提供的版本與別名管理功能。版本至關於服務的快照,支持使用者爲服務發佈一個或多個版本,配合別名機制,能夠實現軟件開發生命週期持續集成、持續發佈,並用最便捷的方式實現服務的灰度迭代。
在後續的架構優化中,江娛互動將嘗試經過機器學習技術儘量多的對原始內容進行預處理,以減小對於第三方平臺的依賴。在 AI 推理領域,依然能夠利用 Serverless 架構的優點,經過預先訓練好的深度學習模型,在短期內調度大量計算資源進行大規模並行處理。
在線翻譯場景試點 Serverless 技術成功後,江娛互動繼續在更多業務領域發掘跟 Serverless 技術相匹配的場景,在 Push 推送服務、內容安全、遊戲行爲分析等領域都引入了 Serverless 技術。將來,江娛互動將繼續基於自身的技術特色不斷深刻探索 Serverless 架構,在擁抱新技術的同時充分享受到雲計算的紅利。