攜程火車票出海架構(gòu)演進(jìn)之路
作者簡(jiǎn)介
py.an,攜程后端研發(fā)經(jīng)理,關(guān)注性能優(yōu)化、技術(shù)架構(gòu)等領(lǐng)域
venson,攜程后端高級(jí)研發(fā)經(jīng)理,關(guān)注性能優(yōu)化、技術(shù)架構(gòu)等領(lǐng)域
一、引言
在全球化戰(zhàn)略的背景下,Trip.com作為一個(gè)面向國(guó)際市場(chǎng)的全球OTA平臺(tái),正努力推進(jìn)國(guó)際化戰(zhàn)略部署。Trip.com火車票正在積極投入資源和技術(shù)力量來拓展海外業(yè)務(wù),通過將應(yīng)用、數(shù)據(jù)部署新加坡、法蘭克福等中心,從而給全球用戶帶來更好的購(gòu)票體驗(yàn)和減少數(shù)據(jù)合規(guī)帶來的風(fēng)險(xiǎn)。
二、業(yè)務(wù)背景
目前Trip.com火車票全球鐵路業(yè)務(wù)主要集中在英國(guó)、亞洲和歐洲各國(guó),其中歐洲作為世界上經(jīng)濟(jì)、交通非常發(fā)達(dá)的大洲,也成為更加關(guān)注的一站,未來還有更多更大的舞臺(tái)。
隨著全球疫情危機(jī)消退,旅游和出行需求得到釋放,在多語(yǔ)言,多幣種的場(chǎng)景支持下Trip.com火車票的全球化業(yè)務(wù)局面已逐步形成。
三、面臨的挑戰(zhàn)
全球化背景下,除了要考慮全球的平滑部署來滿足應(yīng)用可用性和用戶訪問性能要求外,還需要考慮數(shù)據(jù)出海的安全性、法律合規(guī)和數(shù)據(jù)隔離等嚴(yán)格要求。通過以下幾個(gè)角度舉例:
3.1 全球部署
改造前,Trip火車票業(yè)務(wù)應(yīng)用和數(shù)據(jù)都部署在原機(jī)房的同城:存在IDC A+B兩中心的(同一個(gè)邏輯機(jī)房)同城雙活。
與改造前架構(gòu)特點(diǎn)相對(duì)比,如表格所示:
容災(zāi)級(jí)別 | 同一邏輯分區(qū) | 用戶分區(qū) | 就近訪問 | 數(shù)據(jù)多活 | 公共訪問 | |
改造前(同城雙活) | 跨機(jī)房級(jí)別 | 是 | 否 | 否 | 否 | 支持完善,成熟 |
全球多中心 | region級(jí)別 | 否 | 是,單元化分區(qū) | 是 | 需嚴(yán)格遵守?cái)?shù)據(jù)跨境政策 | 需支持多IDC場(chǎng)景 |
由此得知,多IDC場(chǎng)景下不可避免地需要去面臨數(shù)據(jù)分片、單元化、數(shù)據(jù)沖突和業(yè)務(wù)冪等問題。相比傳統(tǒng)分布式架構(gòu),不止是業(yè)務(wù)應(yīng)用項(xiàng)目,還有PaaS平臺(tái)基礎(chǔ)設(shè)施在應(yīng)對(duì)全球化技術(shù)體系都遇到了全新的挑戰(zhàn),需要有巨大的調(diào)整。
3.2 性能問題
面對(duì)全球范圍內(nèi)的用戶的業(yè)務(wù)請(qǐng)求響應(yīng),難免會(huì)有用戶因?yàn)榫W(wǎng)絡(luò)跨洋傳輸、鏈路傳輸距離過長(zhǎng)等問題造成的業(yè)務(wù)訪問質(zhì)量差。如何保證用戶的請(qǐng)求訪問鏈路最優(yōu),減少網(wǎng)絡(luò)延遲,提供更快服務(wù)響應(yīng)。
3.3 數(shù)據(jù)合規(guī)和監(jiān)管
如何嚴(yán)格遵守不同地區(qū)針對(duì)數(shù)據(jù)跨境流動(dòng)、數(shù)據(jù)泄露等數(shù)據(jù)安全問題頒布的相關(guān)法律法規(guī)。
3.4 數(shù)據(jù)出海問題
- 數(shù)據(jù)一致性:多IDC讀寫場(chǎng)景下,全球范圍內(nèi)用戶在多個(gè)數(shù)據(jù)中心創(chuàng)建和操作訂單,多個(gè)數(shù)據(jù)中心之間相互同步和操作訂單業(yè)務(wù)時(shí),應(yīng)該如何保證數(shù)據(jù)一致性的問題。
- 同步合規(guī):因數(shù)據(jù)跨境政策影響,一般不進(jìn)行異地多活,需要如何避免數(shù)據(jù)跨境流動(dòng)所帶來的違規(guī)。
3.5 全球擴(kuò)展性
以輕松地?cái)U(kuò)大業(yè)務(wù)覆蓋范圍為目標(biāo),新業(yè)務(wù)擴(kuò)展時(shí),如何通過對(duì)業(yè)務(wù)和數(shù)據(jù)進(jìn)行改造操作,達(dá)到便捷動(dòng)態(tài)調(diào)整數(shù)據(jù)存儲(chǔ)策略,來應(yīng)對(duì)動(dòng)態(tài)多變的的數(shù)據(jù)合規(guī)政策。
下面將結(jié)合全球化面臨的挑戰(zhàn)和問題,從海外部署、數(shù)據(jù)合規(guī)、架構(gòu)改造實(shí)踐等角度來詳細(xì)說明Trip火車票全球化出海的架構(gòu)演進(jìn)實(shí)踐。
四、出海架構(gòu)演進(jìn)實(shí)踐
4.1 Region(可用區(qū))選擇
選擇適合的Region需要考慮用戶需求、法律和隱私、基礎(chǔ)設(shè)施和網(wǎng)絡(luò)、數(shù)據(jù)跨境風(fēng)險(xiǎn)評(píng)估以及成本和效益等多個(gè)因素。
Trip火車票根據(jù)以上因素和自身業(yè)務(wù)需求發(fā)展方向綜合考慮,并進(jìn)行詳細(xì)的市場(chǎng)調(diào)研和分析,做出可用區(qū)選擇:把新加坡(SIN)和法蘭克福(FRA)作為火車業(yè)務(wù)出海部署的數(shù)據(jù)中心。
4.2 網(wǎng)絡(luò)接入層
Trip火車票如何設(shè)置網(wǎng)絡(luò)路由以實(shí)現(xiàn)可靠、高效的路由訪問和數(shù)據(jù)傳輸,總共分三種場(chǎng)景。
- 外網(wǎng):多路徑、就近訪問。
考慮到不同地域之間的網(wǎng)絡(luò)延遲和帶寬限制,Trip火車票采用就近訪問路由策略。即選擇距離最近或帶寬最大的路徑進(jìn)行數(shù)據(jù)傳輸,以減少延遲和提高速度。優(yōu)勢(shì):保證同一用戶就近訪問網(wǎng)路鏈路最優(yōu)的IDC。
配置FRA、SIN多條路徑進(jìn)行數(shù)據(jù)傳輸,多路徑路由。這樣即使某一條路徑出現(xiàn)故障,數(shù)據(jù)仍然可以通過其他路徑傳輸。 - 內(nèi)網(wǎng):盡量訪問同Region內(nèi)的資源,實(shí)現(xiàn)同Region業(yè)務(wù)閉環(huán)。
- 跨Region訪問場(chǎng)景:如果同Region內(nèi)不存在需要獲取的業(yè)務(wù)資源,必須跨Region訪問時(shí),則進(jìn)行鏈路優(yōu)化。比如,歐洲用戶訪問FRA通過專線鏈路請(qǐng)求SIN資源。這樣避免直接跨洋訪問其他Region,因網(wǎng)絡(luò)跨洋傳輸、鏈路質(zhì)量不穩(wěn)定等問題導(dǎo)致網(wǎng)絡(luò)耗時(shí)過長(zhǎng)。
4.3 數(shù)據(jù)層
1)數(shù)據(jù)出海合規(guī)改造
數(shù)據(jù)出海合規(guī)改造是一項(xiàng)復(fù)雜而重要的任務(wù),需要綜合考慮各種法律、法規(guī)和業(yè)務(wù)需求。通過以下改造措施,可以確保跨境數(shù)據(jù)傳輸和處理過程的合規(guī)性,并為用戶提供更可靠的數(shù)據(jù)保護(hù):
- 數(shù)據(jù)分類和標(biāo)記:對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行分類和標(biāo)記,明確標(biāo)識(shí)出敏感數(shù)據(jù)、個(gè)人身份信息等受保護(hù)的數(shù)據(jù)。這有助于在數(shù)據(jù)傳輸和處理過程中更好地掌握敏感數(shù)據(jù)的位置和處理方式。
- 數(shù)據(jù)加密和匿名化:采用適當(dāng)?shù)募用芗夹g(shù)和數(shù)據(jù)匿名化方法,對(duì)敏感數(shù)據(jù)進(jìn)行保護(hù)。加密可以有效防止數(shù)據(jù)在傳輸和儲(chǔ)存過程中被未經(jīng)授權(quán)的訪問者獲取,而數(shù)據(jù)匿名化則可以保護(hù)個(gè)人身份信息的隱私。
- 出海數(shù)據(jù)業(yè)務(wù)剝離改造:數(shù)據(jù)跨境流動(dòng)許多國(guó)家實(shí)施數(shù)據(jù)本地化策略,數(shù)據(jù)出海時(shí)需同時(shí)考慮數(shù)據(jù)輸出地和輸入地的數(shù)據(jù)跨境規(guī)則。跨境數(shù)據(jù)傳輸時(shí)需要進(jìn)行風(fēng)險(xiǎn)識(shí)別和相關(guān)的數(shù)據(jù)控制措施,對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行剝離改造。
2)DB多IDC部署
為確保能夠滿足業(yè)務(wù)需求,并提高數(shù)據(jù)庫(kù)的可用性和容錯(cuò)能力,將出海DB進(jìn)行多IDC部署方案。如下圖所示:
需要注意的是,各IDC之間同步時(shí),應(yīng)考慮各國(guó)家和地區(qū)的法律法規(guī)要求,確保同步數(shù)據(jù)的鏈路符合當(dāng)?shù)氐臄?shù)據(jù)存儲(chǔ)和隱私保護(hù)規(guī)定。
此外,多個(gè)DB數(shù)據(jù)相互同步時(shí),架構(gòu)會(huì)變得非常復(fù)雜。為確保各個(gè)IDC之間的網(wǎng)絡(luò)延遲低、數(shù)據(jù)同步穩(wěn)定,要關(guān)注每條同步鏈路的延遲、網(wǎng)絡(luò)鏈路抖動(dòng)和數(shù)據(jù)一致性問題,并且要定期進(jìn)行監(jiān)控、測(cè)試和演練,以驗(yàn)證整個(gè)部署方案的可靠性和有效性。
3)同步延遲監(jiān)控
如上圖所示,例如同步鏈路DRC同步延遲時(shí)間:
SIN<—>FRA:160ms+
4)數(shù)據(jù)庫(kù)多IDC擴(kuò)展性
引入RegionCode:插入用戶數(shù)據(jù)時(shí)增加記錄機(jī)房標(biāo)識(shí)RegionCode。
根據(jù)RegionCode確定數(shù)據(jù)所在Region,使得常用的數(shù)據(jù)查詢或業(yè)務(wù)處理操作可以在單個(gè)節(jié)點(diǎn)上執(zhí)行,以達(dá)到數(shù)據(jù)單元化處理和數(shù)據(jù)合規(guī)策略動(dòng)態(tài)調(diào)整的效果,從而避免跨節(jié)點(diǎn)帶來額外性能消耗和數(shù)據(jù)跨境合規(guī)問題。
4.4 基礎(chǔ)組件層
1)PaaS基礎(chǔ)組件多IDC接入
a. 分布式配置中心:
應(yīng)用多IDC部署的場(chǎng)景下,就出現(xiàn)了不同IDC環(huán)境下配置文件不同的情況,此時(shí)也需要對(duì)配置中心的配置文件進(jìn)行調(diào)整:接入子環(huán)境,引入多IDC配置文件,支持不同IDC不同的配置場(chǎng)景。
b. 分布式調(diào)度中心:
因?yàn)闃I(yè)務(wù)中大部分JOB都是通過掃表來對(duì)數(shù)據(jù)進(jìn)行批量處理,所以多IDC場(chǎng)景下則基于存儲(chǔ)的RegionCode將任務(wù)分散到多個(gè)IDC,數(shù)據(jù)經(jīng)過單元化過濾后,進(jìn)行分片處理。
c. Redis:
不做雙向同步,多數(shù)據(jù)源。
業(yè)務(wù)中用到Redis的場(chǎng)景比較多,但Redis不同于業(yè)務(wù)數(shù)據(jù)庫(kù)場(chǎng)景所以不做雙向同步,每個(gè)IDC對(duì)應(yīng)同單元內(nèi)的Redis集群,每個(gè)Redis集群只服務(wù)于當(dāng)前單元內(nèi)的業(yè)務(wù),所以不是全量的。所以在多IDC的場(chǎng)景下就有很多業(yè)務(wù)場(chǎng)景需要調(diào)整,基于Redis覆蓋業(yè)務(wù)要保證單元內(nèi)閉環(huán)。
2)消息中心多IDC改造
MQ每個(gè)集群都是相互獨(dú)立相互隔離的,多IDC場(chǎng)景下就必然面臨了消息處理冪等的問題,所以對(duì)MQ進(jìn)行了邏輯分組改造:
- 同Region內(nèi)處理:同機(jī)房?jī)?nèi)的生產(chǎn)消費(fèi)的MQ同Region內(nèi)閉環(huán)處理
- 跨Region場(chǎng)景:需要跨Region的MQ通過BaseSubject同步到中心機(jī)房Region,來保證正常業(yè)務(wù)流程
- 消費(fèi)端冪等處理:消費(fèi)端根據(jù)RegionCode邏輯分組,進(jìn)行單元化消費(fèi)
消息處理的改造流程圖如下圖所示:
4.5 項(xiàng)目業(yè)務(wù)層
1)業(yè)務(wù)單元化閉環(huán)改造
按照不同區(qū)域進(jìn)行用戶分區(qū)和每個(gè)單元內(nèi)可以獨(dú)立運(yùn)作的原則。對(duì)項(xiàng)目業(yè)務(wù)進(jìn)行改造,業(yè)務(wù)上盡可能保證所有業(yè)務(wù)在單元內(nèi)可以獨(dú)立完成,每個(gè)IDC可以獨(dú)立承擔(dān)部分用戶的業(yè)務(wù)處理的能力。
2)請(qǐng)求鏈路改造
盡可能保證在同Region執(zhí)行,減少跨洋請(qǐng)求造成的網(wǎng)絡(luò)耗時(shí)過長(zhǎng)等問題。
3)跨Region場(chǎng)景改造
- 跨Region耗時(shí)請(qǐng)求下,由原來的串行調(diào)用外部接口的業(yè)務(wù)處理邏輯調(diào)整為異步并發(fā)處理和數(shù)據(jù)預(yù)加載優(yōu)化。比如獲取用戶優(yōu)惠券場(chǎng)景下,需要跨Region獲取,則采取提前請(qǐng)求優(yōu)惠券的方式,去除掉跨Region的影響。
- 多次跨Region的場(chǎng)景通過接口改造減少跨Region的次數(shù)從而達(dá)到減少跨洋的效果。
- 當(dāng)核心業(yè)務(wù)中的非核心跨Region業(yè)務(wù)時(shí):采用非即時(shí)性處理原則,通過業(yè)務(wù)拆分對(duì)非核心業(yè)務(wù)進(jìn)行異步MQ改造處理。
4.6 改造中的問題,演進(jìn)中的思考點(diǎn)
在實(shí)際項(xiàng)目改造過程中,困難也屬于改造過程中的一部分。關(guān)鍵是要擁有一個(gè)積極應(yīng)對(duì)和解決問題的心態(tài),通過分析問題、制定解決方案、執(zhí)行和學(xué)習(xí)經(jīng)驗(yàn),從而克服困難并推動(dòng)項(xiàng)目改造的順利進(jìn)行。
以下是改造過程中遇到的問題點(diǎn)以及解決方案
1)DB同步?jīng)_突問題
在生產(chǎn)環(huán)境數(shù)據(jù)同步開啟后,突發(fā)了網(wǎng)絡(luò)不穩(wěn)定造成DRC同步鏈路阻塞情況
如圖所示,在監(jiān)控到DRC同步鏈路不穩(wěn)定時(shí),觸發(fā)了DRC同步?jīng)_突告警。
- 原因:通過對(duì)DB數(shù)據(jù)的排查發(fā)現(xiàn)SIN和FRA對(duì)同一訂單進(jìn)行的更新操作,因?yàn)榫W(wǎng)絡(luò)延遲導(dǎo)致同步時(shí)發(fā)生了DRC沖突,導(dǎo)致其中一個(gè)更新操作被丟棄,從而影響到了后續(xù)訂單流程。
- 解決方案:修改訂單更新邏輯在同IDC內(nèi)執(zhí)行。雙寫發(fā)生同步延遲問題必然會(huì)遇到一致性沖突問題,長(zhǎng)期方案還是單元化,避免出現(xiàn)跨Region操作同一條數(shù)據(jù)的情況。
2)分布式鎖問題
當(dāng)前項(xiàng)目中的分布式鎖是基于Redis實(shí)現(xiàn)的,因?yàn)椴煌琁DC的Redis集群是相互隔離的,所以目前分布式鎖的粒度只支持到了Region級(jí)別。目前業(yè)務(wù)都是圍繞用戶場(chǎng)景加的分布式鎖,所以也可以滿足目前的實(shí)際業(yè)務(wù)場(chǎng)景。如果后續(xù)有全局獲取分布式鎖的業(yè)務(wù),則需要進(jìn)一步設(shè)計(jì),即保證同一時(shí)間所有Region有且只有一個(gè)地方能夠獲得該資源,并且其他Region必須等待,這有可能犧牲掉相當(dāng)大的性能來實(shí)現(xiàn)此功能。
3)多機(jī)房庫(kù)存問題
用戶的請(qǐng)求保證在同一機(jī)房?jī)?nèi)完成閉環(huán),但部分場(chǎng)景并不適合劃分單元化,比如多機(jī)房庫(kù)存扣減問題。面對(duì)多機(jī)房庫(kù)存扣減問題目前的策略如下:
- 業(yè)務(wù)扣庫(kù)存邏輯不調(diào)整,還是同步扣庫(kù)存,但事先根據(jù)流量分配好每個(gè)機(jī)房庫(kù)存
- 增加庫(kù)存調(diào)配機(jī)制,當(dāng)庫(kù)存不足時(shí)觸發(fā)庫(kù)存調(diào)配,從有多余庫(kù)存的機(jī)房進(jìn)行調(diào)配,
- 增加監(jiān)控和庫(kù)存不足告警通知,除了自動(dòng)資源調(diào)配,對(duì)活動(dòng)上線后進(jìn)行機(jī)房間的庫(kù)存情況實(shí)時(shí)觀測(cè)和實(shí)時(shí)手動(dòng)調(diào)配。
4.7 演進(jìn)結(jié)果
通過以上的改造和優(yōu)化,Trip.com火車票的系統(tǒng)架構(gòu)演進(jìn)和性能優(yōu)化如下面所示:
1)架構(gòu)演進(jìn)圖
2)性能優(yōu)化
通過對(duì)用戶網(wǎng)絡(luò)鏈路優(yōu)化,減少用戶跨洋訪問。FRA接口耗時(shí)優(yōu)化整體減少300-800ms。
五、新起點(diǎn),新征程
當(dāng)前背景下還有很多不完善的地方和非常多的技術(shù)挑戰(zhàn),架構(gòu)體系還需要持續(xù)演進(jìn)迭代,接下來Trip.com火車票對(duì)于未來的全球化戰(zhàn)略方向還需進(jìn)一步進(jìn)行優(yōu)化和改造:
5.1 單元化路由
接入集團(tuán)UCS(unit control service)路由策略:根據(jù)用戶的區(qū)域信息作為ShardingKey映射指定IDC,以達(dá)到流量和組件多IDC場(chǎng)景下的完美落地。
5.2 數(shù)據(jù)單元化改造
當(dāng)前第一指標(biāo)是優(yōu)先保證業(yè)務(wù),各個(gè)Region的DB數(shù)據(jù)都會(huì)雙向同步,每個(gè)Region的數(shù)據(jù)都是全量,也增加容錯(cuò)性,減少了數(shù)據(jù)出海異常情況時(shí)帶來的業(yè)務(wù)中斷的風(fēng)險(xiǎn)。但還需達(dá)到數(shù)據(jù)和業(yè)務(wù)單元內(nèi)可以完全閉環(huán)的程度,可以隨時(shí)切斷同步鏈路避免數(shù)據(jù)跨境帶來的違規(guī)問題,以實(shí)現(xiàn)數(shù)據(jù)單元化。
5.3 業(yè)務(wù)中心機(jī)房調(diào)整
為了適應(yīng)多變的數(shù)據(jù)合規(guī)政策和迎合業(yè)務(wù)發(fā)展趨勢(shì),未來的中心機(jī)房設(shè)置為SIN數(shù)據(jù)中心,并且有能力移除原業(yè)務(wù)中心機(jī)房。
目前需要達(dá)到所有業(yè)務(wù)可以在海外閉環(huán)的能力后設(shè)置業(yè)務(wù)中心為SIN,以達(dá)到海外合規(guī)建站的能力。
5.4 結(jié)語(yǔ)
伴隨著Trip.com全球化的發(fā)展,火車票的技術(shù)發(fā)展也逐漸從原有的技術(shù)領(lǐng)域,延伸到要去應(yīng)對(duì)更復(fù)雜的場(chǎng)景。想要建立起完善的全球化體系還有很長(zhǎng)的路要走。在這種背景下,還需繼續(xù)突破自身技術(shù)邊界,實(shí)現(xiàn)單維能力向多維能力的轉(zhuǎn)變,提前布局,并面向業(yè)務(wù)持續(xù)交付技術(shù)價(jià)值。