邱 芳
(上海浦東發(fā)展銀行股份有限公司,上海 200002)
目前互聯(lián)網(wǎng)主流的路由分發(fā)方式主要是通過負(fù)載均衡設(shè)備或網(wǎng)關(guān)層等預(yù)設(shè)好分區(qū)標(biāo)示進(jìn)行分發(fā),標(biāo)示類型大致分用戶的ID、手機(jī)和瀏覽器類型以及某一地區(qū)用戶和同一運(yùn)營商用戶等。餓了么和滴滴就是按照地域信息進(jìn)行流量切分,將用戶下單和商戶接單等核心流程放在一臺服務(wù)器中處理。以業(yè)內(nèi)銀行的互聯(lián)網(wǎng)應(yīng)用系統(tǒng)群為例,互聯(lián)網(wǎng)應(yīng)用系統(tǒng)群在異地雙中心部署,兩地雙活,使用DNS、LTM、WAF及Gateway等網(wǎng)絡(luò)設(shè)備和中間件控制請求分發(fā)路由,但這樣的方式存在一些弊端,如分發(fā)策略較為固定、無法對用戶請求精準(zhǔn)分發(fā)以及穩(wěn)定性易受運(yùn)營商影響等。
此外,互聯(lián)網(wǎng)應(yīng)用的一大特點(diǎn)是高頻版本迭代,應(yīng)用變更存在一定風(fēng)險(xiǎn),部分集群變更產(chǎn)生的異常需要有迅速應(yīng)急機(jī)制。系統(tǒng)架構(gòu)日趨復(fù)雜,對系統(tǒng)、設(shè)備及機(jī)房提出更高的要求,在單個(gè)機(jī)房出現(xiàn)故障時(shí)要做到迅速響應(yīng)。通過精準(zhǔn)路由分發(fā)可以實(shí)現(xiàn)機(jī)房或集群級別的請求分發(fā)控制,同時(shí)也提高了系統(tǒng)對機(jī)房級別故障的容錯(cuò)性[1-10]。
互聯(lián)網(wǎng)系統(tǒng)群路由分發(fā)體系需要客戶端或App同步改造,該體系最重要的部分是一個(gè)對客戶端每次啟動時(shí)的首次請求進(jìn)行處理的微服務(wù)模塊,即智能路由分發(fā)微服務(wù),借助該服務(wù)可以實(shí)現(xiàn)路由分發(fā)控制。該微服務(wù)可根據(jù)系統(tǒng)的業(yè)務(wù)和架構(gòu)特性定制化部署在多個(gè)系統(tǒng)上,下面以手機(jī)銀行為例。
1.2.1 同一會話中控制同一用戶訪問同一地域
智能路由分發(fā)微服務(wù)部署在手機(jī)銀行App原有的域名下,App每次啟動時(shí)的第一個(gè)請求會觸發(fā)該微服務(wù)。智能路由分發(fā)微服務(wù)會識別請求所在的地域返回其域名信息給客戶端,客戶端獲取到域名信息后,此次會話的后續(xù)請求都會通過該域名訪問。該用戶本次會話都會訪問固定地域機(jī)房,再結(jié)合手機(jī)銀行應(yīng)用的原有會話保持機(jī)制,盡量保證該用戶某業(yè)務(wù)場景一直由固定的服務(wù)器提供服務(wù),減少網(wǎng)絡(luò)延遲,優(yōu)化用戶體驗(yàn)。
1.2.2 根據(jù)規(guī)則選定特定用戶
在某些需要調(diào)整機(jī)房用戶比例或改變原有分發(fā)方式業(yè)務(wù)場景的情況下,智能路由分發(fā)微服務(wù)可以根據(jù)地域和用戶等信息選定特定用戶訪問特定地區(qū)。如手機(jī)銀行系統(tǒng)設(shè)置用戶白名單,也可以根據(jù)手機(jī)設(shè)備號和客戶標(biāo)示等信息進(jìn)行Hash處理,使得滿足該條件的用戶請求都進(jìn)入同一地區(qū)。
1.2.3 應(yīng)急措施
為提高應(yīng)急響應(yīng)速度,適應(yīng)業(yè)務(wù)需求,可通過管理端配置更換域名。原有Wap域名所屬架構(gòu)依然保留。當(dāng)某一地區(qū)域名出現(xiàn)問題時(shí),原生App可切換至Wap域名下。需要選定特定用戶的情況下,可根據(jù)業(yè)務(wù)場景和實(shí)際情況更換域名。
傳統(tǒng)系統(tǒng)架構(gòu)存在3個(gè)方面的問題。一是依靠域名系統(tǒng)(Domain Name System,DNS)、Web應(yīng)用防護(hù)系統(tǒng)(Web Application Firewall,WAF)以及網(wǎng)絡(luò)負(fù)載均衡與網(wǎng)關(guān)等進(jìn)行請求分發(fā),但無法控制用戶請求精準(zhǔn)分發(fā)。二是會話漂移現(xiàn)象,同一用戶請求會在上海或合肥漂移,導(dǎo)致用戶會話中斷,出現(xiàn)閃退等現(xiàn)象。三是機(jī)房層面和集群層面的故障應(yīng)急響應(yīng)僅依靠域名系統(tǒng),當(dāng)某一分中心出現(xiàn)問題時(shí)響應(yīng)速度較慢,系統(tǒng)容錯(cuò)性有待提高。傳統(tǒng)系統(tǒng)架構(gòu)如圖1所示。
圖1 傳統(tǒng)系統(tǒng)架構(gòu)圖
互聯(lián)網(wǎng)系統(tǒng)群主要包括個(gè)人網(wǎng)銀、個(gè)人手機(jī)、公司網(wǎng)銀以及電子商務(wù)支付平臺等。其中,個(gè)人手機(jī)銀行系統(tǒng)異地雙中心與多集群部署(K1、K2)需要通過域名系統(tǒng)解析該域名,若解析為其中一個(gè)地區(qū)機(jī)房公網(wǎng)地址,則分發(fā)到該地區(qū)機(jī)房,再通過網(wǎng)絡(luò)負(fù)載均衡設(shè)備分發(fā)進(jìn)入某一后臺服務(wù)。
2.3.1 路由分發(fā)機(jī)制
傳統(tǒng)互聯(lián)網(wǎng)系統(tǒng)群依賴于域名系統(tǒng)、網(wǎng)絡(luò)安全防護(hù)系統(tǒng)以及負(fù)載均衡等路由分發(fā)機(jī)制,分發(fā)策略固定,無法精準(zhǔn)控制請求分發(fā),系統(tǒng)的應(yīng)急響應(yīng)機(jī)制和容錯(cuò)性有待提升。
2.3.2 兩地IP漂移
同一個(gè)會話中客戶端請求進(jìn)入其中一個(gè)地區(qū)后臺服務(wù),接下來請求可能會漂移到異地中心的集群,導(dǎo)致之前的會話消失。
2.3.3 復(fù)雜的用戶數(shù)據(jù)驗(yàn)證以及系統(tǒng)并發(fā)性能穩(wěn)定
目前大型互聯(lián)網(wǎng)類系統(tǒng)普遍部署超過500個(gè)微服務(wù),當(dāng)上線一個(gè)新系統(tǒng)或服務(wù)模塊時(shí)都面臨復(fù)雜的用戶數(shù)據(jù)驗(yàn)證及系統(tǒng)并發(fā)性能穩(wěn)定的考驗(yàn),測試環(huán)境中的案例不能完全涵蓋實(shí)際情況,通過路由分發(fā)進(jìn)行版本控制,可以有效驗(yàn)證應(yīng)用的穩(wěn)定性。
在不改變業(yè)務(wù)邏輯的情況下,建設(shè)互聯(lián)網(wǎng)系統(tǒng)群路由分發(fā)體系,提升路由分發(fā)能力,提高系統(tǒng)容錯(cuò)性,進(jìn)一步實(shí)現(xiàn)互聯(lián)網(wǎng)系統(tǒng)群特有的分布式架構(gòu),支撐未來業(yè)務(wù)發(fā)展。基于域名實(shí)現(xiàn)分流,同一個(gè)系統(tǒng)分流到不同域名,從而實(shí)現(xiàn)客戶的分流。此外,該方案可以提升系統(tǒng)的容錯(cuò)性,有利于數(shù)據(jù)庫切分和上云多區(qū)域分發(fā),方案總體架構(gòu)如圖2所示。
圖2 總體架構(gòu)圖
改造后,用戶訪問業(yè)務(wù)流程如下。
3.2.1 基于多域名分發(fā)
客戶打開手機(jī)銀行App,App啟動時(shí)會觸發(fā)請求該域名下的智能路由分發(fā)微服務(wù),通過域名系統(tǒng)解析獲取公網(wǎng)IP后通過硬件負(fù)載均衡設(shè)備分發(fā)至微服務(wù)系統(tǒng)群網(wǎng)關(guān),網(wǎng)關(guān)通過Eureka Client獲取服務(wù)列表后根據(jù)客戶端負(fù)載均衡策略將客戶請求分發(fā)至對應(yīng)微服務(wù)地址,通過該請求得到集群地域返回對應(yīng)地區(qū)域名,從而實(shí)現(xiàn)多域名分發(fā)服務(wù)。另外,當(dāng)需要選定部分用戶分發(fā)到特定地區(qū)A時(shí),則在請求到達(dá)對應(yīng)智能路由分發(fā)微服務(wù)之后,首先判斷請求的集群地域,再根據(jù)設(shè)備號等判斷該客戶是否命中參與規(guī)則。若命中,則返回地區(qū)A域名(wapabst.a.com.cn);若不命中,則返回地區(qū)B域名(wapcdst.b.com.cn)。
3.2.2 異常處理流程
(1)若單個(gè)集群出現(xiàn)問題,如地區(qū)A的K1集群。第一種情況,智能路由分發(fā)微服務(wù)服務(wù)正常,K1集群智能路由分發(fā)微服務(wù)返回了地區(qū)A:wapabst.a.com.cn域名,則停掉轉(zhuǎn)發(fā)給K1的流量,此時(shí)上海K2集群對外服務(wù)。第二種情況,智能路由分發(fā)微服務(wù)異常,K1 的智能路由分發(fā)微服務(wù)將不會返回上海域名:客戶端在拿不到返回域名的情況下,默認(rèn)走wap域名,這時(shí)地區(qū)A還有K2對外服務(wù)。
(2)某一分中心機(jī)房出現(xiàn)問題,如地區(qū)B。第一種情況,地區(qū)B的智能路由分發(fā)微服務(wù)服務(wù)還正常,對外返回地區(qū)B域名:將地區(qū)B的集群DNS域名解析的地址改為地區(qū)A域名的公網(wǎng)IP;.及時(shí)調(diào)整地區(qū)B的智能路由分發(fā)微服務(wù)返回域名,調(diào)整成返回地區(qū)A域名;第二種情況,地區(qū)B的智能路由分發(fā)微服務(wù)異常,將不會返回地區(qū)B域名:則客戶端在拿不到返回域名的情況下,默認(rèn)走wap域名,地區(qū)A還有K1、K2對外服務(wù),此時(shí),wap域名DNS解析改為地區(qū)A機(jī)房的公網(wǎng)IP,從而保證對外正常服務(wù)。
以常規(guī)手機(jī)銀行為例,該微服務(wù)部署在Caas集群上,物理架構(gòu)如圖3所示。
圖3 物理架構(gòu)圖
客戶端/APP配合改造,每次啟動時(shí)首次訪問會觸發(fā)智能路由分發(fā)微服務(wù)。智能路由分發(fā)微服務(wù)管理端可以配置參數(shù),更換域名??蛻舳烁鶕?jù)智能路由分發(fā)微服務(wù)返回值更換域名。
根據(jù)域名分發(fā),用WAF和Gateway混合實(shí)現(xiàn)LB,WAF使用最小連接數(shù)負(fù)載均衡策略,不進(jìn)行源地址會話保持。
基于大型互聯(lián)網(wǎng)系統(tǒng)群路由分發(fā)技術(shù)的應(yīng)用,參考互聯(lián)網(wǎng)路由模式,互聯(lián)網(wǎng)系統(tǒng)群路由分發(fā)體系的目標(biāo)是通過智能路由分發(fā)微服務(wù)識別請求中用戶標(biāo)識,配合域名規(guī)則,將指定范圍內(nèi)的用戶請求精確分發(fā)到指定邏輯機(jī)房。分發(fā)策略靈活精確,能更好地滿足多地多邏輯機(jī)房分發(fā)需求,不僅有利于互聯(lián)網(wǎng)系統(tǒng)群分布式架構(gòu)建設(shè),而且也適用于數(shù)據(jù)庫及對應(yīng)的微服務(wù)分片解耦、多中心分發(fā)以及上云后的多區(qū)域分發(fā)。