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