數據傾斜方案
數據傾斜?是指在分布式數據庫中,數據分布不均勻的現象。具體是指當大量的相同key被分配到同一個分區或節點進行處理時,就會導致該節點承載過多的數據或計算負載,而其他節點則相對空閑的現象。例如在大商戶中每天的數據量和一個小商戶的數據量相差較大,大商戶一個月的數據可能就會把一個DN的空間塞滿,這時無論用戶使用hash分布表還是shard表,同一個商戶的數據都只會落到一個數據節點,從而導致該系統無法存儲更多的數據而停機。
為了有效的應對這個問題,TeleDB團隊設計了數據重平衡(RDA算子模塊)來解決數據傾斜問題:
首先我們把系統的DN分為group,每個group里面:
- 包含一個或者多個DN。
- 每個group有一個shardmap。
- 在建sharded表時,可以指定存儲的group,也就是可以指定存儲在group1或group2。
- CN可以訪問所有的group,而且CN上也存儲所有表的訪問方式信息。
對于系統中數據量較大用戶進行特別的識別,并為他們創建白名單。不同的用戶使用不同的數據分布邏輯,具體如下圖所示:
- 普通用戶使用默認的數據分布邏輯,即:Shardid = Hash(merchantid) % #shardmap
- 大商戶使用定制的數據分布邏輯,即:Shardid = Hash(merchantid) % #shardmap + fcreate_time dayoffset from 1970-01-01
通過在大商戶group分布邏輯中加入日期偏移,來實現同一個用戶的數據在group內部多個節點間均勻分布。從而有效的解決數據分布不均勻問題。
示例:
如大小商戶數據的不同處理邏輯:
從以上示例可以看出,大商戶的數據每天都有不同的shardid,不同的shardid也就意味著不同的數據庫節點,從而可以達到數據在group內部的完美平衡。
冷熱數據分級存儲方案
冷熱數據分級存儲是指TeleDB支持根據數據的訪問頻率和業務重要性,將數據分為冷數據和熱數據,并分別存儲在不同的存儲介質中。冷數據是指訪問頻率低,對當前項目價值較低,但需要長期保存的數據。這些數據一般存儲在低成本、低性能的介質中。熱數據是指經常被訪問和修改,且需要快速訪問的數據。由于這些數據為高性能和低延遲設計,需存儲在高性能的存儲介質中。針對冷熱數據的存儲介質的差異,TeleDB開發了冷熱數據分離的功能,從而有效的降低業務的資源成本。
TeleDB冷熱數據分離功能的整體邏輯框圖如下:
對象存儲OSS或是HDFS文件系統作為冷數據存儲對象,通過XBlock搬遷數據至遠端文件系統,通過XLake從數據庫訪問遠端文件系統。
說明
Oss是指對象存儲,在冷熱分離方案中用于存放冷數據。
XBlock一種遠端訪問文件系統,可以屏蔽掉不同類型的底層文件系統,并將數據庫數據搬遷至遠端文件系統。
XLake一種數據庫外部訪問方案,可以讓數據庫直接訪問外部的數據文件,并參與內部查詢。
XBlock主要包括文件系統接口、訪問連接管理、文件緩存、元數據管理和文件系統實現等。
- 文件系統接口:天翼云TeleDB數據庫的冷熱分離特性,需要能夠將冷數據,轉存到相應的冷數據存儲中,并且能過對冷數據存儲中的文件進行相應的打開、讀取、寫入等操作。
- 訪問連接管理:冷熱分離組件也需要考慮數據庫的并發場景,需要能夠支持多session同時對冷熱分離模塊進行訪問讀取。
- 文件緩存:多次對冷數據進行訪問,則也需要在內存中緩存部分數據,提升后續的訪問速率,且需要有緩存管理,能夠根據一定規則進行緩存淘汰。
- 元數據管理:冷熱分離特性對于冷數據的轉儲,請求讀取等操作,都會記錄一條元數據到相應的元數據庫中,并且需要能夠對元數據進行管理。
- 文件系統實現:冷熱分離特性需要實例能夠對冷數據存儲中的文件有相應的操作能力,包括不限于ls、state等命令。
XLake主要包括文件訪問的配置、不同數據格式的支持和不同文件系統的訪問支持。
- 文件訪問的配置:需要Xlake能夠以外部文件為基準,創建外表,并且對外表進行查詢,以及查詢計劃的展示和優化。
- 不同數據格式的支持:需要Xlake能夠支持不同的文件格式,包括text、csv以及Parquet文件格式。
- 不同文件系統的訪問支持:需要Xlake能夠支持不同的文件系統,包括oss、hdfs、hive等,從而能夠通過對接不同的文件系統,實現冷熱分離的功能。