新聞中心
如何管理海量數(shù)據(jù),是很多企業(yè)都需要解決的問題。要高效管理數(shù)據(jù)并充分發(fā)揮數(shù)據(jù)信息應有的價值,前提是要對大數(shù)據(jù)進行有效存儲。

京東大數(shù)據(jù)存儲跨域及分層實踐
下圖是京東數(shù)據(jù)平臺架構圖。
京東數(shù)據(jù)平臺的整體架構主要由六部分組成,其中數(shù)據(jù)存儲作為計算存儲層的底層組件支撐著上游的計算引擎調(diào)度,以及更高層的工具層、服務層和應用層。在整個數(shù)據(jù)平臺架構中,底層數(shù)據(jù)存儲起到了基建的作用,是整個大數(shù)據(jù)平臺的基礎。
1. 跨域存儲面臨的問題與解決方案
在跨域存儲架構應用之前,跨機房數(shù)據(jù)的同步主要通過業(yè)務方在不同機房之間進行Distcp實現(xiàn),這種方式便會存在一些隱患問題:
第一個問題:元數(shù)據(jù)一致性由業(yè)務方保證,數(shù)據(jù)遷移需要業(yè)務介入,成本高時間長。
第二個問題:跨機房的流量不受控,影響同步任務,需要借助外部調(diào)度系統(tǒng)和存儲。
第三個問題:產(chǎn)生多份冗余數(shù)據(jù),數(shù)據(jù)共享和同步成本高,比如在不同機房不同數(shù)據(jù)節(jié)點間載入了多份相同數(shù)據(jù),導致冗余。
第四個問題:不具備多機房集群的容災系統(tǒng),未充分利用多機房優(yōu)勢。
(1)跨越存儲的架構
基于以上,京東大數(shù)據(jù)平臺在底層存儲模塊設計了一個跨域數(shù)據(jù)同步功能來解決歷史數(shù)據(jù)存儲同步帶來的問題。選擇在底層解決該問題不僅可以把控跨域數(shù)據(jù)的一致性,還提供了業(yè)務無感知的跨域數(shù)據(jù)同步與分享功能,以減少業(yè)務方重復工作,使存儲系統(tǒng)具備跨域遷移和跨域容災的能力。
京東該跨域存儲架構的主要思路是通過“全量存儲+全網(wǎng)拓撲”,實現(xiàn)跨機房故障域,最終實現(xiàn)大數(shù)據(jù)關鍵數(shù)據(jù)異地容災及跨機房存儲能力。
(2)跨域存儲——跨域數(shù)據(jù)流
在實現(xiàn)跨域存儲過程中,采用了兩種數(shù)據(jù)流方式:
- 異步數(shù)據(jù)流
將數(shù)據(jù)先寫到本地機房,再通過namenode(NN)自動進行跨域同步。該數(shù)據(jù)傳輸方式寫入性能與現(xiàn)有未跨域場景一致,同步時延優(yōu)于 distcp 方案。
- 同步數(shù)據(jù)流
建立pipeline數(shù)據(jù)管道,串聯(lián)機房全部datanode(DN),一次將數(shù)據(jù)同步。該種傳輸方式針對數(shù)據(jù)一致性和可靠性要求高的業(yè)務。
(3)跨域存儲——拓撲與機房感知
拓撲與機房感知是解決“節(jié)點定位”這一跨域存儲核心問題的關鍵模塊?;谠撃K可控制數(shù)據(jù)塊分布和控制客戶端流量。該模塊主要從兩個方面解決問題:
- 拓撲管理?
通過改造節(jié)點的拓撲方式,在拓撲管理中增加一個機房維度,同時選塊邏輯要基于全網(wǎng)拓撲模塊進行適配,以兼容多機房。
- 機房感知?
針對跨域版本的客戶端,可通過在RPC頭部攜帶機房信息,以便識別和檢索;針對不支持跨域版本的客戶端,可通過京東網(wǎng)絡服務團隊提供的ip映射到機房的服務, 實現(xiàn)客戶端對應機房的檢索和查詢。
(4)跨域存儲——跨域標識
跨域標識模塊是解決“數(shù)據(jù)跨機房存放”問題的關鍵設計,我們采用一個支持副本和EC的屬性標簽來描述數(shù)據(jù)的跨域?qū)傩?。EC包含數(shù)據(jù)塊和校驗塊兩種類型,相對于副本模式其跨域同步的支持更加復雜,需要支持在同機房內(nèi)的數(shù)據(jù)重構和重構條件不具備時的跨域數(shù)據(jù)拷貝,以減少 EC 數(shù)據(jù)在跨域場景下的跨域同步流量。
加快整體跨域數(shù)據(jù)處理的速度,采用了三種方法:
- 將元數(shù)據(jù)固化在XATTR上
- 在內(nèi)存上構建了Inode Proto
- 在每個數(shù)據(jù)塊上,創(chuàng)建塊屬性標識
(5)跨域存儲——跨域補塊及流控
針對跨域補塊和流控,采用了三種方法保證了性能:
- 在處理跨域補塊時遵從的原理是跨域處理與原有流程隔離,保證新增的跨域處理流程不影響原先同機房的補塊處理,在遇到機房網(wǎng)絡中斷等極端情況可以保障單機房元數(shù)據(jù)服務可用。
- 新增異步跨域更新器,結合跨域標簽屬性,實現(xiàn)HA切換接續(xù)補塊,解決存量數(shù)據(jù)問題。
- 采用CR-Checker程序替代原有的DistCopy任務,可以將原先的跨集群同步任務平滑升級成跨域同步任務,最大限度減少跨域架構升級對原有存量任務的沖擊。
2. 分層存儲面臨的問題與解決方案
京東的數(shù)據(jù)分層存儲是為了解決原有框架所存在的問題,主要是:冷熱數(shù)據(jù)未區(qū)分對待的問題、不同硬件類型未區(qū)分對待的問題,以及數(shù)據(jù)治理工作推進困難的問題。
(1)分層存儲的架構
京東分層存儲的架構,整個框架主要是在NN內(nèi)部實現(xiàn)的:
- 分層策略配置:提供外部API下發(fā)及內(nèi)部配置。
- 分層配置API:提供分層策略下發(fā)接口,外部可通過離線數(shù)據(jù)分析及業(yè)務側下發(fā)分層邏輯。
- 內(nèi)置分層策略:可配置和動態(tài)刷新的分層策略,默認通過訪問監(jiān)控器統(tǒng)計數(shù)據(jù)進行LRU分層策略配置。
- 標簽管理器:實現(xiàn)目錄標簽和節(jié)點標簽管理,指導選塊模塊及分布校驗器等模塊進行數(shù)據(jù)遷移。
- 數(shù)據(jù)分布校驗器:實現(xiàn)對新增數(shù)據(jù)的分布校驗,指導數(shù)據(jù)按照標簽進行分布。
- 存量數(shù)據(jù)滿足器:對存量數(shù)據(jù)進行掃描驗證,指導存量數(shù)據(jù)塊遷移;實現(xiàn)數(shù)據(jù)生命周期管理功能。
?(2)分層存儲——核心設計
分層存儲的核心設計,可以分為兩個模塊,一個是元數(shù)據(jù)上根據(jù)目錄樹進行標簽管理,對數(shù)據(jù)進行冷熱數(shù)據(jù)分配;另一塊是節(jié)點拓撲樹,采用虛擬多拓撲樹在邏輯上將不同標簽的節(jié)點進行區(qū)分,不同標簽類型會有自己獨立的拓撲樹,實現(xiàn)更高效的選節(jié)點性能。虛擬拓撲樹有兩種更新方式,分別為根據(jù)節(jié)點權重進行異步更新和上下線數(shù)據(jù)進行同步更新。
?增量數(shù)據(jù)和存量數(shù)據(jù)在處理流程上有以下差異:
- 增量數(shù)據(jù):對于寫入請求,先判斷標簽,然后根據(jù)匹配對應節(jié)點,寫入數(shù)據(jù)。
- 存量數(shù)據(jù):后臺數(shù)據(jù)分布校驗會掃描數(shù)據(jù)的標簽,基于虛擬拓撲樹匹配對應的節(jié)點,然后完成數(shù)據(jù)遷移或轉(zhuǎn)換。
以上內(nèi)容節(jié)選自吳維偉老師的《京東大數(shù)據(jù)存儲跨域及分層實踐》。
新聞標題:如何對大數(shù)據(jù)進行高效存儲、管理與應用?
鏈接URL:http://www.5511xx.com/article/djcjeis.html


咨詢
建站咨詢
