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