Game On Serverless:SAE 助力广州小迈提升微服务研发效能
作者:洛浩
小邁于 2015 年 1 月成立,是一家致力以數(shù)字化領(lǐng)先為優(yōu)勢(shì),實(shí)現(xiàn)業(yè)務(wù)高質(zhì)量自增長(zhǎng)的移動(dòng)互聯(lián)網(wǎng)科技公司。始終堅(jiān)持以用戶價(jià)值為中心,以數(shù)據(jù)為驅(qū)動(dòng),為用戶開發(fā)豐富的工具應(yīng)用、休閑游戲、益智、運(yùn)動(dòng)等系列的移動(dòng)應(yīng)用。累計(jì)開發(fā) 400 余款產(chǎn)品,累計(jì)用戶下載安裝量破七億。而在未來(lái)三年內(nèi),小邁以成為全球領(lǐng)先開發(fā)者增長(zhǎng)服務(wù)平臺(tái)為愿景及使命,希望通過(guò)標(biāo)準(zhǔn)化的產(chǎn)品和服務(wù)賦能,為開發(fā)者提供全鏈路解決方案,以技術(shù)+服務(wù)全方位保駕護(hù)航,助燃產(chǎn)品持續(xù)增長(zhǎng),幫助工具和休閑游戲的開發(fā)者提升產(chǎn)品的成功率。
在小邁內(nèi)部,實(shí)行扁平化的管理風(fēng)格,每個(gè)業(yè)務(wù)團(tuán)隊(duì)都可以獨(dú)立選擇采用更適合自己的技術(shù)棧和基礎(chǔ)架構(gòu),因此內(nèi)部出現(xiàn)了 ECS,K8s,SAE(Serverless 應(yīng)用引擎)三種不同計(jì)算平臺(tái)共存的局面,而且都在跑微服務(wù)架構(gòu),不同的計(jì)算平臺(tái)都有自己獨(dú)特的優(yōu)勢(shì)和價(jià)值,而同樣也會(huì)面臨各自的挑戰(zhàn),目前主要在使用 SAE 平臺(tái)的主要是游戲團(tuán)隊(duì)。
為什么選擇 SAE
對(duì)于大部分休閑類游戲來(lái)講,首先游戲本身存在自己的生命周期,而在生命周期內(nèi),游戲本身會(huì)出現(xiàn)非常大的波峰波谷。比如,白天比晚上流量大的多,白天流量又集中在幾個(gè)時(shí)間點(diǎn),而晚上 8 點(diǎn)是業(yè)務(wù)的最高峰,凌晨 2 點(diǎn)到 6 點(diǎn)幾乎沒(méi)有流量,但是又不能停服。另外,在游戲剛上線的時(shí)候,每次運(yùn)營(yíng)活動(dòng)又會(huì)拉來(lái)大量的新客戶涌入,就需要后臺(tái)服務(wù)能夠快速響應(yīng)流量的變化,所以業(yè)務(wù)方就期望能有一種自動(dòng)彈性伸縮的計(jì)算平臺(tái)。其次,大部分休閑類游戲都是無(wú)狀態(tài)的,還可以拆分成不同的服務(wù)模塊來(lái)提升服務(wù)性能和質(zhì)量,如聊天、紅包、背包、升級(jí)、用戶數(shù)據(jù)獲取、視頻處理、廣告投放等,因此就可以采用微服務(wù)架構(gòu)來(lái)部署。最后游戲在上線期間,也會(huì)迭代增加很多新的功能模塊,需要頻繁的發(fā)布升級(jí)。所以業(yè)務(wù)方在選型的時(shí)候,就會(huì)綜合考慮:
這些能力,其實(shí)通過(guò) ECS 或者 K8s 自建也都能實(shí)現(xiàn),但是會(huì)給業(yè)務(wù)團(tuán)隊(duì)帶來(lái)大量的運(yùn)維成本,而且很難平衡成本的投入。尤其是在彈性方面,自建彈性效率很難滿足流量的快速變化,往往還是需要冗余大量的資源。而 SAE 可以非常好的滿足以上 4 個(gè)需求。其實(shí)小邁的游戲團(tuán)隊(duì)早在 SAE 公測(cè)期間,就開始關(guān)注試用 SAE 了。截止到目前,在 SAE 上累計(jì)已經(jīng)部署了 50 多個(gè)服務(wù)和應(yīng)用,涉及十幾款游戲,比如愛(ài)上猜成語(yǔ)、成語(yǔ)最強(qiáng)答人、我找茬賊快、答多多、歡樂(lè)找找茬、多多短視頻等,感興趣的話可以下載 APP 試玩下。
SAE 落地實(shí)踐
Serverless 應(yīng)用引擎 SAE 定位是容器之上的一站式應(yīng)用托管平臺(tái),核心價(jià)值是給用戶提供全應(yīng)用生命周期管理、微服務(wù)治理、彈性免運(yùn)維的 K8s 運(yùn)行環(huán)境。本質(zhì)上,用戶的代碼最終還是運(yùn)行在容器里,只是這個(gè)容器不用去維護(hù)管理。因此對(duì)于存量的游戲服務(wù)來(lái)講,可以零改造直接遷移部署到 SAE 上。而且 SAE 針對(duì) JAVA 應(yīng)用,還提供了 JAR 包直接部署的模式,省去了小邁打鏡像的步驟,和原有使用 ECS 的模式非常接近,但是使用體驗(yàn)上會(huì)更加簡(jiǎn)單,大概的對(duì)比如下:
SAE 比較核心的能力就是高可用和自動(dòng)彈性,對(duì)于小邁的游戲團(tuán)隊(duì),在部署 JAR 包的時(shí)候可以勾選多可用區(qū),就能達(dá)到跨可用區(qū)的容災(zāi)。SAE 底層其實(shí)是會(huì)提供多個(gè)分布在不同可用區(qū)的 K8s 集群,承載業(yè)務(wù)的容器實(shí)例可以在多可用區(qū)自動(dòng)調(diào)度。對(duì)于彈性的配置同樣也非常簡(jiǎn)單,可以基于 CPU、內(nèi)存、QPS、RT 等指標(biāo)來(lái)進(jìn)行設(shè)置,對(duì)于小邁的線上游戲,主要還是通過(guò)CPU和內(nèi)存的使用率來(lái)觸發(fā)擴(kuò)縮,同時(shí)還能指定最大實(shí)例數(shù)和最小實(shí)例數(shù),非常的便捷。而且目前定時(shí)彈性和監(jiān)控指標(biāo)彈性還可以混用,那么對(duì)于有運(yùn)營(yíng)活動(dòng)時(shí),就可以通過(guò)兩種彈性方式共同使用的方式,來(lái)確保資源的彈性。但是這里需要注意的是監(jiān)控指標(biāo)的閾值,需要根據(jù)業(yè)務(wù)的實(shí)際情況來(lái)配置,建議上線前,通過(guò)壓測(cè)來(lái)明確。
另外通過(guò)應(yīng)用監(jiān)控,也能非常方便的查看到服務(wù)接口的調(diào)用情況,這些能力都已經(jīng)默認(rèn)集成到了 SAE 的平臺(tái)上,對(duì)業(yè)務(wù)排障很有幫助。
最后在小邁的游戲團(tuán)隊(duì),主要采用的是 Spring Cloud 和 Dubbo 技術(shù)棧,因此對(duì)微服務(wù)治理能力的支持,也是非常必要的。目前 SAE 的控制臺(tái)上,可以直接配置微服務(wù)的健康檢查、優(yōu)雅下線腳本、配置管理、微服務(wù)的灰度發(fā)布、一鍵回滾等。但是在實(shí)際使用的過(guò)程,也踩過(guò)一些坑,比如在做服務(wù)發(fā)布的時(shí)候,健康檢查有時(shí)候會(huì)超時(shí)導(dǎo)致實(shí)例不停重啟,因?yàn)橛袝r(shí)候服務(wù)會(huì)加載大量的數(shù)據(jù)和類庫(kù),啟動(dòng)比較耗時(shí)。加大健康檢查的超時(shí)時(shí)間可以降低出現(xiàn)概率,但是發(fā)布時(shí)間就會(huì)拉長(zhǎng)。而且在服務(wù)剛啟動(dòng)的時(shí)候,初始響應(yīng)比較慢,其實(shí)是服務(wù)還沒(méi)有完全 ready,這里就比較依賴 SAE 提供微服務(wù)優(yōu)雅上線的能力,可以確保服務(wù)的正常上線。另外對(duì)于分批發(fā)部,為了避免負(fù)載的流量突然打到新實(shí)例,這里比較推薦使用微服務(wù)流量百分比灰度能力。經(jīng)過(guò)一段時(shí)間的實(shí)踐,最后落地的業(yè)務(wù)架構(gòu)大致如下:
小邁的游戲團(tuán)隊(duì)基本只用關(guān)注業(yè)務(wù)邏輯,資源層面托管給了 SAE 平臺(tái),極大的簡(jiǎn)化了運(yùn)維復(fù)雜度。另外為了應(yīng)對(duì)業(yè)務(wù)的快速迭代,小邁還采用 Jenkins 封裝了 SAE 的 API 接口,實(shí)現(xiàn)了 CI/CD 能力,極大加速了服務(wù)的上線速度。對(duì)比原來(lái)的彈性效率和部署效率,整體研發(fā)效能有了極大的提升,彈性速度從分鐘級(jí)縮短到了妙級(jí),新項(xiàng)目上線速度從天級(jí)縮短到了分鐘級(jí)。
總結(jié)和展望
1、SAE 在微服務(wù)領(lǐng)域提供了 Serverless 化的運(yùn)行平臺(tái),給用戶提供了降本增效的新選擇。另外 SAE 底層采用的是托管的 K8s 集群,也給用戶做容器化轉(zhuǎn)型提供了最簡(jiǎn)單的方式。
2、SAE 在應(yīng)用管理和微服務(wù)治理方面的加成,使得 SAE 成為有別于容器服務(wù)的一站式應(yīng)用 PAAS 平臺(tái),讓用戶可以專注在業(yè)務(wù)迭代。
3、針對(duì)應(yīng)用的管理,SAE 還提供了環(huán)境“一鍵啟停”功能,比如針對(duì)開發(fā)測(cè)試環(huán)境,可以設(shè)置定時(shí)關(guān)閉和開啟,優(yōu)化非線上環(huán)境的資源占用,可以幫助小邁進(jìn)一步優(yōu)化費(fèi)用。
4、針對(duì) JAVA 應(yīng)用,SAE 提供了 DragonWell JDK 版本,可以加速 JAVA 應(yīng)用的啟動(dòng)速度和線程資源的消耗,啟動(dòng)速度大約可以節(jié)省 40% 的耗時(shí)。
5、未來(lái),SAE 還會(huì)不斷提升彈性效率、加強(qiáng)應(yīng)用管理層面的功能迭代,期望給用戶帶來(lái)更多的增值體驗(yàn),比如剛發(fā)布支持 PHP 的 ZIP 包部署能力,可以簡(jiǎn)化 WEB 應(yīng)用上云的復(fù)雜度。
對(duì) Serverless 感興趣的同學(xué),還可以點(diǎn)擊??此處??查看更多案例和文章。
總結(jié)
以上是生活随笔為你收集整理的Game On Serverless:SAE 助力广州小迈提升微服务研发效能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 让容器跑得更快:CPU Burst 技术
- 下一篇: 深入剖析全链路灰度技术