您好,登錄后才能下訂單哦!
作者:胡刀 阿里云運維專家
舟濟 阿里云解決方案架構師
成本可控 ,歷史數據的存儲成本無法接受和在線庫一樣線性增長
實時查詢 ,歷史數據的查詢RT要做到與在線活躍庫幾乎一致
查詢頻次較低 ,一般來說,越“舊”的數據查詢頻率越低
統一查詢入口 ,不管是活躍數據還是歷史數據,查詢入口保持一致
改造成本需要盡可能低 ,最好能做到不做任何應用代碼修改,可以認為歷史庫對程序開發人員來說是完全透明的
可能存在歷史數據更新需求
數據規模較大 ,一般在100TB以上
需要索引的熱點數據集更小,寫入性能更高 。
底層持久化的數據頁是只讀的,數據頁采用緊湊存儲格式,同時默認進行壓縮,存儲成本更低。
實時歷史庫方案,為何選擇 X-Engine
2.寫入性能更強,X-Engine相比同為LSM-tree架構的Rocksdb,有超過10倍的性能提升。
3.在存儲層引入數據復用技術等,優化Compaction的性能,降低傳統LSM-tree架構中Compaction動作對系統資源的沖擊,保持系統性能平穩
4.引入多個層級Cache,同時結合Cach回填和預取機制,利用精細化訪問機制和緩存技術,彌補傳統LSM-tree引擎的讀性能短板,X-Engine的點查詢能力幾乎與Innodb持平
實時歷史數據庫架構設計和實現
總體 架構思路
久經考驗的Innodb引擎作為OLTP在線庫核心引擎,主要處理高頻查詢/更新請求,滿足在線活躍數據高并發,高性能,強范圍查詢的業務需求
阿里巴巴數據庫團隊自研的高壓測存儲引擎X-Engine作為歷史庫核心引擎,主要響應歷史數據入庫/查詢/更新請求,滿足歷史數據冷熱數據頻次不一,低存儲成本,高性能的業務需求(范圍查詢可能性能受限)
統一DB接入層,根據設置的業務時間屬性將請求分別轉發至不同的存儲引擎。針對特殊場景下的跨引擎訪問,在應用層做聚合展示
在線-歷史數據通過阿里云提供的生態體系工具做歷史數據遷移和過期數據刪除,確保鏈路更為穩定可靠
在線庫/歷史庫拆分方案
可能涉及到業務代碼輕量改造,目標端不走分庫分表鍵性能無法保證
可將多個在線庫業務合并至一套歷史庫集群,架構更加簡潔
DTS鏈路也分為走RDS和DRDS兩種
實現簡單靈活
混用存儲引擎,在數據庫內核參數優化上難以兼顧兩者性能
歷史數據compact階段可能對整個實例產生性能抖動
同一實例下的庫或者表無法重名,涉及到輕量業務改造
DMS賦能在線庫過期數據刪除
在線庫的過期數據刪除既要保障刪除效率,也要保證刪除過程中對在線庫不會造成性能上的抖動,新版DMS支持創建“歷史數據清理”的數據變更任務,通過該任務可以非常方便地完成以下工作
如果沒有使用DMS生態工具,也自行實現過期數據刪除,但實現較為復雜。一般較為通用的設計思路為將表的主鍵按照大小做拆分,保證一次刪除"恰當數量"的數據,既保證刪除效率又不影響線上服務
初始化數值Y=select min(id) from $table_name
到了業務低峰期以后,DELETE FROM $table_name WHERE date_col< SUBDATE(CURDATE(),INTERVAL 180 DAY) and id >= Y and id <=
Y+100000 ,執行成功后代碼層重新賦值 Y=Y+100000
程序sleep 3s,重復步驟b
時間到了業務高峰期以后,停止執行,記錄下當前的數值Y,第二天執行時直接從Y開始注意
極端場景分析
在臨界時間處理上,實時歷史庫方案可能遭遇極端場景導致業務可能存在歷史庫的臟讀問題,假設在線庫數據保存180天
更新179天前23時59分59秒的數據,請求路由至在線庫
數據同步鏈路異常中斷或鏈路存在延遲,該更新請求未能及時到達歷史庫
這時業務查詢該數據時,由于已經數據已經"舊"到超過180天,請求路由至歷史庫,由于鏈路異常,歷史庫查到了臟數據
? 建議過期數據刪除設置保守一點,比如臨界時間為180天,過期數據只刪除190天以后的數據,方便在極端場景下對比源端目標端的數據情況進行數據訂正
1.X-Engine如何支撐釘釘躍居AppStore第一
2.淘寶萬億級交易訂單背后的存儲引擎
3.將DRDS中的InnoDB引擎轉換為X-Engine引擎
鏈接: https://help.aliyun.com/document_detail/161316.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。