架構(gòu)揭秘:「京東白條」的數(shù)據(jù)架構(gòu)進(jìn)化之路
京東白條的快速發(fā)展?jié)M足了當(dāng)前人們?nèi)找嬖鲩L(zhǎng)的消費(fèi)需求。在京東商城上用京東白條來(lái)支付,已經(jīng)成為一大批用戶的消費(fèi)習(xí)慣,更是在某種意義上成為了京東對(duì)外的『標(biāo)簽』。而作為一家互聯(lián)網(wǎng)金融消費(fèi)平臺(tái),京東白條的后臺(tái)技術(shù)團(tuán)隊(duì)更是不容忽視的存在。而其也正是支撐京東白條自 2014 年初上線伊始,至今服務(wù)數(shù)億用戶的最終根源所在。正是京東白條技術(shù)團(tuán)隊(duì)多年的努力,才造就了當(dāng)前京東白條的『土生土長(zhǎng)』,但具有京東白條特色的金融級(jí)數(shù)據(jù)庫(kù)選型方法論。
當(dāng)京東白條的金融類業(yè)務(wù)啟動(dòng)時(shí),現(xiàn)任京東白條研發(fā)負(fù)責(zé)人張棟芳,雖然預(yù)料到了其數(shù)據(jù)體量的大幅度增長(zhǎng),卻沒(méi)有想到這種增長(zhǎng)將導(dǎo)致數(shù)據(jù)庫(kù)選型方面的一系列變化,以及對(duì)數(shù)據(jù)庫(kù)未來(lái)發(fā)展模式的啟發(fā)。
作為京東科技旗下的殺手級(jí)金融消費(fèi)應(yīng)用,今天的京東白條已經(jīng)成長(zhǎng)為服務(wù)數(shù)億用戶、日均產(chǎn)生巨額流量的龐大金融生態(tài)。在業(yè)務(wù)和數(shù)據(jù)量飛速增長(zhǎng)的同時(shí),京東白條后臺(tái)的研發(fā)人員,也在緊張的焦頭爛額中....
這一點(diǎn),完美契合了京東白條后臺(tái)數(shù)據(jù)架構(gòu)的成長(zhǎng)過(guò)程。
1、技術(shù)的保質(zhì)期:從 MySQL 到 NoSQL 再到 DBRep
對(duì)于技術(shù)人而言,沒(méi)有永遠(yuǎn)正確的技術(shù),只有最適合于當(dāng)下的技術(shù)選型。
京東白條業(yè)務(wù)誕生之初正是互聯(lián)網(wǎng)金融與消費(fèi)行業(yè)的高速發(fā)展期,經(jīng)歷這些年的發(fā)展,從草根走向?qū)I(yè),從弱小走向規(guī)模,從分散走向統(tǒng)一,從雜亂走向規(guī)范。京東白條的發(fā)展,正是一步步見(jiàn)證了國(guó)內(nèi)互聯(lián)網(wǎng)消費(fèi)金融產(chǎn)業(yè)的快速迭代。
同樣,京東白條的技術(shù)選型歷程,也可作為國(guó)內(nèi)互聯(lián)網(wǎng)消費(fèi)金融產(chǎn)業(yè)發(fā)展過(guò)程的一個(gè)縮影。
從技術(shù)架構(gòu)的角度來(lái)看,并沒(méi)有絕對(duì)的好與不好,需要放在彼時(shí)的背景下來(lái)看,要考慮業(yè)務(wù)的時(shí)效價(jià)值、團(tuán)隊(duì)的規(guī)模和能力、環(huán)境基礎(chǔ)設(shè)施等等方面。只有架構(gòu)演進(jìn)的生命周期適時(shí)匹配好業(yè)務(wù)的生命周期,才能發(fā)揮最好的效果。
2014~2015
Solr + HBase 的方案解決了核心、非核心業(yè)務(wù)系統(tǒng)對(duì)關(guān)鍵數(shù)據(jù)庫(kù)的訪問(wèn)問(wèn)題,Solr 作為被檢索字段的索引,HBase 用作全量的數(shù)據(jù)存儲(chǔ)。
- 通過(guò) Solr 集群分擔(dān)部分讀和寫(xiě)的業(yè)務(wù),緩解核心庫(kù)的壓力;
- Solr 擴(kuò)展體驗(yàn)上欠佳,對(duì)業(yè)務(wù)也存在較大的入侵。
2015~2016
引入 NoSQL 方案,業(yè)務(wù)數(shù)據(jù)以月份進(jìn)行分表存儲(chǔ)在 MongoDB 集群中,階段性滿足了結(jié)算處理場(chǎng)景中海量數(shù)據(jù)導(dǎo)入導(dǎo)出的需求。
- 查詢熱點(diǎn)數(shù)據(jù)效率高,非結(jié)構(gòu)化的存儲(chǔ)方式易于修改表結(jié)構(gòu);
- 依然面對(duì)著擴(kuò)展差、對(duì)業(yè)務(wù)入侵強(qiáng)的局面,而且耗內(nèi)存。
2016~2017
隨著業(yè)務(wù)快速發(fā)展,數(shù)據(jù)量突破百億大關(guān),此時(shí) MongoDB 面臨著容量和性能的雙重考驗(yàn)。京東白條大數(shù)據(jù)平臺(tái)通過(guò) DBRep 以 MySQL Slave 的形式采集變動(dòng)信息并存儲(chǔ)到消息中心,最后落盤(pán)到 ES 和 HBase 中。
- 該方案具有較強(qiáng)的數(shù)據(jù)實(shí)時(shí)性,擴(kuò)展性良好;
- 基于業(yè)務(wù)框架的數(shù)據(jù)分片難以降低代碼維護(hù)成本。
2、為了讓你能夠更痛快的剁手,他們先『分解』了自己的后臺(tái)架構(gòu)
網(wǎng)購(gòu),貴在手速,但也在于錢包的厚度。京東白條的誕生就是為了解決用戶錢包的厚度問(wèn)題。如今,京東白條也打起了“閃電戰(zhàn)”。為了保證用戶在消費(fèi)過(guò)程中的體驗(yàn),后臺(tái)數(shù)據(jù)庫(kù)的穩(wěn)定性與規(guī)律性,就成為了京東白條技術(shù)側(cè)亟待考慮和平衡的問(wèn)題。
為保證業(yè)務(wù)系統(tǒng)在數(shù)據(jù)激增情況下始終能保持高效運(yùn)行,京東白條技術(shù)團(tuán)隊(duì)在設(shè)計(jì)初期使用了數(shù)據(jù)分片數(shù)據(jù)架構(gòu),發(fā)揮極致性能的同時(shí)也兼顧代碼的可控性,采用基于應(yīng)用框架的數(shù)據(jù)拆分方案完成了數(shù)據(jù)拆分工作。
其實(shí)說(shuō)來(lái)說(shuō)去,本質(zhì)上就是一個(gè)問(wèn)題,即隨著產(chǎn)品的升級(jí)迭代,早期的解決方案逐漸演變?yōu)榱俗璧K今天前進(jìn)的絆腳石。通過(guò)業(yè)務(wù)框架實(shí)現(xiàn)的數(shù)據(jù)分片方案導(dǎo)致業(yè)務(wù)代碼復(fù)雜度增加、維護(hù)成本不斷攀升,緊耦合的弊端逐漸顯露,應(yīng)用每次升級(jí)都需要投入較多的精力對(duì)分片做相應(yīng)調(diào)整,研發(fā)人員難以專注于業(yè)務(wù)本身。
于是,解耦成了京東白條技術(shù)突圍的唯一關(guān)鍵。在京東白條而言,主要從以下這四個(gè)方面開(kāi)始解耦:
- 數(shù)據(jù)架構(gòu)解耦,降低架構(gòu)之間的耦合度,確保不會(huì)因單獨(dú)業(yè)務(wù)線變更而導(dǎo)致多個(gè)后端架構(gòu)的調(diào)整;
- 技術(shù)架構(gòu)解耦,簡(jiǎn)化業(yè)務(wù)系統(tǒng)升級(jí)工作所帶來(lái)的復(fù)雜研發(fā)流程;
- 業(yè)務(wù)關(guān)系解耦,需要讓用戶在使用過(guò)程中每個(gè)動(dòng)作都不受影響,不另外產(chǎn)生新的學(xué)習(xí)成本,為系統(tǒng)提供良好的擴(kuò)展能力,從容應(yīng)對(duì)“618”和“11.11”等平臺(tái)大促活動(dòng);
- 研發(fā)流程解耦,解放后端研發(fā)生產(chǎn)力,減少業(yè)務(wù)代碼的復(fù)雜度。
因后臺(tái)數(shù)據(jù)庫(kù)與業(yè)務(wù)之間的耦合度過(guò)高,為整個(gè)業(yè)務(wù)的發(fā)展埋下了增速放緩的隱患。面對(duì)如上訴求,京東白條技術(shù)團(tuán)隊(duì)經(jīng)權(quán)衡后開(kāi)始考慮使用成熟的分庫(kù)分表組件來(lái)承擔(dān)這部分工作,讓業(yè)務(wù)系統(tǒng)升級(jí)和架構(gòu)調(diào)整不再?gòu)?fù)雜。但京東白條業(yè)務(wù)體量巨大,是名副其實(shí)的金融級(jí)高并發(fā)、海量數(shù)據(jù)的業(yè)務(wù)場(chǎng)景,因此在選擇分庫(kù)分表組件時(shí)應(yīng)具備以下 4 個(gè)特點(diǎn):
- 產(chǎn)品成熟穩(wěn)定。 只有成熟且穩(wěn)定維護(hù)的產(chǎn)品,才能夠給京東白條這樣一款體量的金融產(chǎn)品予以穩(wěn)定性的保證。使用數(shù)據(jù)分片來(lái)進(jìn)行架構(gòu)解耦,本身就是為了確保穩(wěn)定性;
- 極致性能表現(xiàn)。 金融場(chǎng)景下的應(yīng)用,對(duì)于數(shù)據(jù)響應(yīng)、實(shí)時(shí)反饋等性能的要求非常高。尤其在交易這種敏感且特殊的場(chǎng)景下,對(duì)于性能的表現(xiàn),一點(diǎn)也不能馬虎;
- 處理海量數(shù)據(jù)。 京東白條需要處理海量的用戶數(shù)據(jù),尤其在“618”、“11.11”等大促節(jié)日下,面對(duì)蜂擁而至海量交易數(shù)據(jù)與請(qǐng)求,要能夠在短時(shí)間內(nèi)快速處理;
- 架構(gòu)靈活擴(kuò)展。 業(yè)務(wù)靈活多變是當(dāng)前互聯(lián)網(wǎng)產(chǎn)品的共性。
對(duì)此,京東白條從多個(gè)方面考慮自研框架與成熟分庫(kù)分表中間件 ShardingSphere 優(yōu)劣性,性能對(duì)比圖如下:
基于自研框架分片 | 基于 ShardingSphere 分片 | |
性能 | 高 | 高 |
代碼耦合度 | 高 | 低 |
業(yè)務(wù)入侵程度 | 高 | 低 |
升級(jí)難度 | 高 | 低 |
擴(kuò)展性 | 一般 | 良好 |
最終,京東白條選擇采用 Apache ShardingSphere 來(lái)進(jìn)行金融級(jí)別的數(shù)據(jù)庫(kù)分片任務(wù)。
3、場(chǎng)景趨于融合,但數(shù)據(jù)庫(kù)卻無(wú)法相容:Apache ShardingSphere 解決方案
京東白條采用 Apache ShardingSphere-JDBC 解決方案處理在線應(yīng)用。ShardingSphere-JDBC 是 Apache ShardingSphere 的第一款產(chǎn)品,它定位為輕量級(jí) Java 框架,在 Java 的 JDBC 層提供的額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫(kù),以 jar 包形式提供服務(wù),無(wú)需額外部署和依賴,可理解為增強(qiáng)版的 JDBC 驅(qū)動(dòng),完全兼容 JDBC 和各種 ORM 框架。
ShardingSphere-JDBC 的以下特點(diǎn)能夠很好地滿足白條業(yè)務(wù)場(chǎng)景:
- 產(chǎn)品成熟: 經(jīng)數(shù)年打磨產(chǎn)品成熟度高,且社區(qū)活躍;
- 性能良好: 微內(nèi)核、輕量化的設(shè)計(jì),性能損耗極??;
- 改造量?。?/span> 支持原生的 JDBC 接口,研發(fā)工作量??;
- 擴(kuò)展靈活: 搭配使用遷移同步組件輕松實(shí)現(xiàn)數(shù)據(jù)擴(kuò)展。
img
經(jīng)內(nèi)部大量系統(tǒng)性驗(yàn)證之后,Apache ShardingSphere 成為了京東白條數(shù)據(jù)分片中間件的首選方案,2018 年底正式開(kāi)始對(duì)接。
產(chǎn)品適配
為全面支撐白條業(yè)務(wù)、提供更好的業(yè)務(wù)體驗(yàn),Apache ShardingSphere 在京東白條業(yè)務(wù)落地過(guò)程中對(duì)產(chǎn)品的功能和性能方面進(jìn)行了更多的支持和提升,產(chǎn)品再一次經(jīng)歷典型案例的打磨。
- 升級(jí) SQL 引擎
白條的業(yè)務(wù)邏輯非常復(fù)雜且龐大,多樣化場(chǎng)景的需求對(duì) SQL 的兼容程度有著較高要求,Apache ShardingSphere 重構(gòu)了 SQL 解析模塊,并支持了更多的 SQL。經(jīng)兩團(tuán)隊(duì)通力合作,京東白條業(yè)務(wù)與 Apache ShardingSphere 相結(jié)合的各項(xiàng)指標(biāo)滿足預(yù)期,性能與原生 JDBC 幾乎一致。
img
關(guān)于對(duì)接過(guò)程中的問(wèn)題詳情及方案,請(qǐng)通過(guò)《Apache ShardingSphere 對(duì)接京東白條實(shí)戰(zhàn)》一文來(lái)了解。
業(yè)務(wù)割接
Apache ShardingSphere 使用定制化 HASH 策略對(duì)數(shù)據(jù)進(jìn)行分片,有效避免了熱點(diǎn)數(shù)據(jù)問(wèn)題, 拆分后的數(shù)據(jù)節(jié)點(diǎn)數(shù)達(dá)近萬(wàn)個(gè) ,整個(gè)割接過(guò)程大約持續(xù)了 4 周左右的時(shí)間。
- DBRep 讀取數(shù)據(jù),通過(guò) Apache ShardingSphere 將數(shù)據(jù)同步至目標(biāo)數(shù)據(jù)庫(kù)集群;
- 兩套集群并行運(yùn)行,數(shù)據(jù)遷移后再使用自研工具對(duì)業(yè)務(wù)和數(shù)據(jù)進(jìn)行校驗(yàn)。
DBRep 是 ShardingSphere-Scaling 產(chǎn)品設(shè)計(jì)的基石,Scaling 具備的自動(dòng)化能力為后續(xù)的遷移擴(kuò)容工作提供了更多的便利。
配好業(yè)務(wù)的生命周期,才能發(fā)揮最好的效果。
價(jià)值收益
- 簡(jiǎn)化升級(jí)路徑
通過(guò)架構(gòu)解耦,業(yè)務(wù)系統(tǒng)升級(jí)所涉及技術(shù)棧得到有效縮短,研發(fā)團(tuán)隊(duì)不再需要關(guān)注分表設(shè)計(jì),精力全部聚焦于業(yè)務(wù)本身,升級(jí)路徑得到大幅度優(yōu)化;
- 節(jié)省研發(fā)力量
引入成熟的 Apache ShardingSphere 無(wú)需重新開(kāi)發(fā)分表組件,在簡(jiǎn)化業(yè)務(wù)升級(jí)路徑的基礎(chǔ)上節(jié)省了大量研發(fā)力量;
- 架構(gòu)靈活擴(kuò)展
搭配使用 Scaling 同步遷移組件從容面對(duì)“618”和“11.11”等大型活動(dòng),系統(tǒng)靈活擴(kuò)容。
4、面對(duì)新的不穩(wěn)定業(yè)態(tài),需要相對(duì)穩(wěn)定的標(biāo)準(zhǔn)來(lái)應(yīng)對(duì)
如何理解不穩(wěn)定,并平衡這種不穩(wěn)定。
隨著數(shù)據(jù)的重要性日益凸顯,以及終端場(chǎng)景領(lǐng)域的持續(xù)細(xì)化,業(yè)務(wù)線『開(kāi)枝散葉』已是常態(tài),市場(chǎng)上的數(shù)據(jù)庫(kù)產(chǎn)品層出不窮。某種意義上,發(fā)展了許多年的京東白條,早已不再是當(dāng)年的數(shù)據(jù)體量,其金融消費(fèi)場(chǎng)景已經(jīng)是一個(gè)相對(duì)穩(wěn)定和成熟的場(chǎng)景而言,京東白條仍然是一個(gè)快速生長(zhǎng)的互聯(lián)網(wǎng)巨量頭部產(chǎn)品,用戶和數(shù)據(jù)體量還遠(yuǎn)沒(méi)有達(dá)到接近天花板級(jí)別。
這也意味著,隨著業(yè)務(wù)數(shù)據(jù)量的增長(zhǎng),未來(lái)京東白條還需要經(jīng)歷多次具備『陣痛期』的架構(gòu)轉(zhuǎn)型。而每一次轉(zhuǎn)型,無(wú)疑都是一次冒險(xiǎn),這對(duì)于追求穩(wěn)定和體驗(yàn)的金融級(jí)產(chǎn)品而言,無(wú)疑是需要慎重考慮的。
而在現(xiàn)階段通用的數(shù)據(jù)架構(gòu)體系下,整個(gè)行業(yè)都在經(jīng)歷一種新的不穩(wěn)定業(yè)態(tài)。面對(duì)這種不穩(wěn)定的業(yè)態(tài),京東白條需要一種相對(duì)穩(wěn)定的標(biāo)準(zhǔn)和生態(tài),來(lái)『對(duì)抗』這種不穩(wěn)定的趨勢(shì)。基于此,張棟芳提到了 Database Plus 的概念。
2018 年,Apache ShardingSphere 作者張亮就曾提出過(guò) Database Plus 的概念。彼時(shí)數(shù)據(jù)庫(kù)已經(jīng)呈現(xiàn)出碎片化的趨勢(shì),企業(yè)在后端數(shù)據(jù)庫(kù)管理層面,已經(jīng)開(kāi)始產(chǎn)生不小的成本。如果能夠在數(shù)據(jù)庫(kù)上層重新建設(shè)起具備統(tǒng)一管理底層數(shù)據(jù)的中間層生態(tài),對(duì)于企業(yè)以及工程師而言,都會(huì)極大提高研發(fā)與管理的效率。
所以,Sharding-JDBC 在京東內(nèi)部,正式升級(jí)為 ShardingSphere, 寓意打造一個(gè)新的生態(tài),并在張亮和社區(qū)需求的引導(dǎo)下,逐步確立起了 Database Plus 的發(fā)展方向。伴隨著近日 Apache ShardingSphere 5.0.0 正式版的更新,Database Plus 理念已正式在 Apache ShardingSphere 生態(tài)中得到踐行。
目前,Apache ShardingSphere 通過(guò)可插拔架構(gòu),已能夠在數(shù)據(jù)庫(kù)上層構(gòu)建起一套全新的數(shù)據(jù)治理生態(tài),如讓傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)同時(shí)具備水平擴(kuò)展和數(shù)據(jù)加密的功能,或在傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的基礎(chǔ)上單獨(dú)打造分布式數(shù)據(jù)庫(kù)解決方案等,而無(wú)需調(diào)整底層數(shù)據(jù)庫(kù)架構(gòu)。
而這種技術(shù),無(wú)疑是應(yīng)對(duì)數(shù)據(jù)庫(kù)碎片化趨勢(shì)的最好方案之一。 而對(duì)于未來(lái)數(shù)據(jù)庫(kù)發(fā)展的理解,張棟芳認(rèn)為,在多樣化的數(shù)據(jù)庫(kù)上層,構(gòu)建起統(tǒng)一的數(shù)據(jù)管理平臺(tái),將數(shù)據(jù)庫(kù)能力分布在中間層并實(shí)現(xiàn)可插拔化,追求功能與業(yè)務(wù)訴求的高度匹配,篩去冗余的能力,并能夠在需要時(shí)進(jìn)行快速變動(dòng),始終保證數(shù)據(jù)架構(gòu)的整潔、專一。
5、事物終歸需要回歸到它的本質(zhì)
從市場(chǎng)和用戶規(guī)模來(lái)看,中國(guó)有著全球最廣泛的互聯(lián)網(wǎng)用戶群體,產(chǎn)生著最大的數(shù)據(jù)體量,誕生了一系列成長(zhǎng)最快速的互聯(lián)網(wǎng)科技公司....但是與龐大需求所不匹配的是,國(guó)內(nèi)數(shù)據(jù)服務(wù)市場(chǎng)卻始終處于同質(zhì)化競(jìng)爭(zhēng)之下,沒(méi)能有顛覆海外數(shù)據(jù)庫(kù)巨頭的產(chǎn)品出現(xiàn)。
張棟芳認(rèn)為,各家廠商專注于各自的應(yīng)用場(chǎng)景之下,缺少一個(gè)抬頭環(huán)顧四周的過(guò)程。我們始終在談新技術(shù),始終在追求業(yè)務(wù)的最高效化。但對(duì)于一些需要實(shí)現(xiàn)“大象起舞”的金融、證券、制造、零售等領(lǐng)域而言,最新的技術(shù)不一定是最適合他們的,在現(xiàn)有技術(shù)基礎(chǔ)上,提供增量能力的中間件,打造適配于當(dāng)下業(yè)務(wù)場(chǎng)景的技術(shù)體系,而不是顛覆。
“ 事物需要回歸它的本質(zhì)。 ”對(duì)于數(shù)據(jù)治理方式而言,同樣如此。
我今天跟大家的分享到這里。謝謝大家。