一年一度的雙十一大促帷幕即將拉開,作為國(guó)內(nèi)第三方推送服務(wù)的領(lǐng)導(dǎo)者,極光(JIGUANG)會(huì)采取哪些措施來(lái)應(yīng)對(duì)高并發(fā)推送服務(wù)?同時(shí),極光基于 ICE 打造高可用云推送平臺(tái),其背后有哪些技術(shù)細(xì)節(jié)值得探索?
為此,我們采訪了負(fù)責(zé)極光開發(fā)者服務(wù)后臺(tái)推送系統(tǒng),大規(guī)模高并發(fā)分布式云計(jì)算體系架構(gòu)總體設(shè)計(jì)研發(fā)的極光首席架構(gòu)師王豐,他伴隨著極光一路成長(zhǎng),見(jiàn)證了極光推送用戶數(shù)量從0到數(shù)十億的飛躍,經(jīng)歷了極光推送在架構(gòu)上的重構(gòu)、由 VM 全面轉(zhuǎn)向容器化、微服務(wù)化等過(guò)程,在推送上有自己的見(jiàn)解。
極光推送所經(jīng)歷的重構(gòu)
軟件系統(tǒng)在開發(fā)和演進(jìn)過(guò)程中,經(jīng)常會(huì)經(jīng)歷較大規(guī)模的重構(gòu),極光推送服務(wù)經(jīng)歷過(guò)三次較大規(guī)模的重構(gòu):
第一次是從300萬(wàn)用戶增加到500萬(wàn)用戶的時(shí)候,原先的 UDP 替換成 TCP,提高消息傳輸?shù)目煽啃裕?ICE 框架,減輕基礎(chǔ)部分研發(fā)工作的壓力。第二次是用戶數(shù)量達(dá)到6000萬(wàn)左右的時(shí)候,各服務(wù)模塊間利用 MQ 進(jìn)行解耦,模塊的升級(jí),依賴變得簡(jiǎn)單清晰。 第三次是用戶數(shù)量達(dá)到3億左右的的時(shí)候,各服務(wù)模塊間緩存優(yōu)化,采用大規(guī)模緩存集群CB,大規(guī)模 Redis 集群,內(nèi)存規(guī)模 T 級(jí)別。另外硬件架構(gòu)方面也發(fā)生了很大變化,采用萬(wàn)兆交換機(jī)、萬(wàn)兆網(wǎng)卡、節(jié)點(diǎn)滿配內(nèi)存。轉(zhuǎn)向容器化、微服務(wù)化的推送技術(shù)
未來(lái),極光在技術(shù)架構(gòu)上由 VM 全面轉(zhuǎn)向容器化、微服務(wù)化是出于什么考慮?這一步走的算不算晚呢?
對(duì)此,王豐回答說(shuō),微服務(wù)是一種新的服務(wù)設(shè)計(jì)模式,開發(fā)、測(cè)試、生產(chǎn)三個(gè)環(huán)境可以統(tǒng)一,給開發(fā)工作帶來(lái)了極大的靈活性。容器封裝了所有必須的庫(kù),原來(lái)的版本依賴問(wèn)題不存在了,由單純的開發(fā)、運(yùn)維兩階段合并成開發(fā)運(yùn)維(DevOps),各方面的效率都將得到很大的提升。
極光研發(fā)團(tuán)隊(duì)很早就關(guān)注容器技術(shù)了,那時(shí)版本還是0.x。沒(méi)有著急使用容器技術(shù),主要是考慮到初始版本 bug 比較多,社區(qū)反饋問(wèn)題也很多,所以就一直在等待容器技術(shù)相對(duì)成熟和穩(wěn)定之后再使用。推送提供的是電信級(jí)的服務(wù),最重要的指標(biāo)是穩(wěn)定、及時(shí);極光的集群規(guī)模很大,很多模塊都是上百個(gè)節(jié)點(diǎn),基礎(chǔ)模塊出問(wèn)題將是災(zāi)難性的。對(duì)于新技術(shù),極光以開放的心態(tài)接納吸收,以小心謹(jǐn)慎的方式驗(yàn)證使用。
在實(shí)現(xiàn)推送功能的同時(shí),安全性也是要極光重點(diǎn)考慮的因素。為了保證安全性,極光推送服務(wù)沒(méi)有在數(shù)據(jù)傳輸過(guò)程中采用雙層協(xié)議方案。王豐說(shuō),安全方面,API 全面切換到 HTTPS。用戶接入方面,現(xiàn)在已經(jīng)提供了對(duì)稱加密版本。如果還有更高的要求,還可以提供 SSL 連接需求。
基于 ICE 打造高可用云推送平臺(tái)
極光研發(fā)團(tuán)隊(duì)基于 ICE 來(lái)打造高可用云推送平臺(tái),在擴(kuò)容縮容、系統(tǒng)配置集中統(tǒng)一、自動(dòng)負(fù)載均衡等方面更加便利,那是不是云推送平臺(tái)有了 ICE 就一 勞永逸了?
僅僅 ICE 是不夠的。
ICE 是一個(gè)分布式的網(wǎng)絡(luò)中間件,提供了通信層的完全封裝,能自動(dòng)處理網(wǎng)絡(luò)異常,負(fù)載均衡,業(yè)務(wù)部署等基礎(chǔ)性的工作,避免在這些地方重復(fù)發(fā)明輪子,省時(shí)省力,讓研發(fā)人員的工作變得更輕松。
但是,還是需要做一些調(diào)整工作,比如負(fù)載的調(diào)度策略、計(jì)劃支持客戶端語(yǔ)言選擇,以及 ICE 對(duì)象的設(shè)計(jì)。推送系統(tǒng)是多種技術(shù)結(jié)合的綜合體系,需要 緩存、需要數(shù)據(jù)庫(kù)、需要 MQ 等大量的其它技術(shù)配合。
這里可以介紹一下 ICE 的體系架構(gòu)(下圖),這個(gè) C/S 架構(gòu)左邊藍(lán)色代碼部分,是通過(guò) IDL 生成的相應(yīng)平臺(tái)的接口,各平臺(tái)下可以直接調(diào)用;右邊是對(duì)應(yīng)的接口骨架類,用來(lái)容納具體的服務(wù)端業(yè)務(wù)邏輯。
ICE 本身提供的原生服務(wù)如 Ice Grid,它可以管理 Glacier2,極光內(nèi)部服務(wù)節(jié)點(diǎn)很多都是在內(nèi)網(wǎng),如果需要跨網(wǎng)訪問(wèn)的時(shí)候要跨外網(wǎng),不可能把成千上萬(wàn)節(jié)點(diǎn)都給它,可以通過(guò)這樣做一個(gè)流量的轉(zhuǎn)發(fā),就是防火墻穿越。
Ice Patch2 是一個(gè)自動(dòng)化的部署,有點(diǎn)像交付,它提供專用的服務(wù),把 Server 放在這樣一個(gè)目錄結(jié)構(gòu)里面更新一下,重新計(jì)算數(shù)值后發(fā)通知,所有的節(jié)點(diǎn)會(huì)全部更新。在更新的過(guò)程中,節(jié)點(diǎn)可能會(huì)停一下或重啟。正在處理的請(qǐng)求處理完之后,再重新啟動(dòng)。請(qǐng)求不會(huì)在啟動(dòng)和停止之間丟失,因?yàn)?ICE 的客戶端會(huì)把這個(gè)請(qǐng)求正常定位到其他正在運(yùn)行的節(jié)點(diǎn)上,客戶端的調(diào)用是沒(méi)有感知的。
像 DBAgent、STC、TagAlias 等集群都用到了 ICE,在研發(fā)過(guò)程中能節(jié)省不少精力,例如不需要從 Socket 做起,通過(guò) IDL 簡(jiǎn)化協(xié)議設(shè)計(jì),提高效率;擴(kuò)容縮容方便;不用再專門處理容災(zāi);不同語(yǔ)言之間的差異由框架代勞;系統(tǒng)配置集中統(tǒng)一;自動(dòng)負(fù)載均衡,連接池管理等等。
雙十一臨近,極光在架構(gòu)上也會(huì)做好充分準(zhǔn)備,以確保推送服務(wù)后臺(tái)系統(tǒng)平穩(wěn)運(yùn)作,主要措施如下:
擴(kuò)容、優(yōu)化網(wǎng)絡(luò)訪問(wèn)、優(yōu)化內(nèi)部交換機(jī)、核心路由器網(wǎng)絡(luò)路徑和網(wǎng)絡(luò)帶寬。測(cè)試選擇一部分云平臺(tái),必要時(shí)動(dòng)態(tài)擴(kuò)充服務(wù)節(jié)點(diǎn)應(yīng)對(duì)峰值,并進(jìn)行相應(yīng)的訪問(wèn)控制。在開發(fā)極光推送服務(wù)過(guò)程中的一些感悟
極光在短短五年時(shí)間里,聚集了海量用戶,目前有超過(guò)40萬(wàn)款 APP 正在使用極光推送服務(wù),終端覆蓋超過(guò)50億,月活躍用戶達(dá)6億。極光推送的開發(fā)工作一直處于高速推進(jìn)中,有時(shí)一個(gè)應(yīng)用進(jìn)來(lái)就有過(guò)億的用戶,連注冊(cè)模塊都需要高并發(fā),這一點(diǎn)顯著區(qū)別于絕大多數(shù)公司,印象尤其深刻。
王豐說(shuō),盡管業(yè)務(wù)量巨大,極光的后臺(tái)架構(gòu)開發(fā)團(tuán)隊(duì)卻始終保持小規(guī)模,短小精悍。開發(fā)采用敏捷模式,快速迭代驗(yàn)證,灰度上線。
最后,王豐也談了一個(gè)比較輕松的關(guān)于架構(gòu)師修煉方面的問(wèn)題,除了開發(fā)能力與設(shè)計(jì)能力以外,“有效溝通”也是架構(gòu)師很重要的一項(xiàng)技能。和項(xiàng)目經(jīng)理、銷售、開發(fā)、測(cè)試人員清楚、精準(zhǔn)地表達(dá)自己的想法,是不是需要有些技巧?
王豐說(shuō),溝通是天天在做的事情,研發(fā)團(tuán)隊(duì)的需求來(lái)自產(chǎn)品經(jīng)理,和銷售商務(wù)沒(méi)有直接的溝通。和產(chǎn)品經(jīng)理之間主要是反復(fù)確認(rèn)有疑問(wèn)的需求點(diǎn),比如 A/B 測(cè)試,拿到需求之后,開會(huì)討論、郵件、面對(duì)面的溝通業(yè)務(wù)流程。
而對(duì)于開發(fā)測(cè)試人員來(lái)說(shuō),詳細(xì)講解業(yè)務(wù)的功能點(diǎn),接口為什么這么設(shè)計(jì)、服務(wù)模塊劃分的考慮因素、是否需要采用新的技術(shù)、用戶將來(lái)如何用,不光知其然,還要知其所以然。讓每個(gè)開發(fā)測(cè)試人員將自己的角色轉(zhuǎn)換成用戶來(lái)體驗(yàn),確保準(zhǔn)確的理解業(yè)務(wù)流程。