日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

基于X-Engine引擎的实时历史数据库解决方案揭秘

發(fā)布時(shí)間:2024/8/23 数据库 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于X-Engine引擎的实时历史数据库解决方案揭秘 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)時(shí)歷史庫(kù)需求背景

在當(dāng)今的數(shù)字化時(shí)代,隨著業(yè)務(wù)的迅速發(fā)展,每天產(chǎn)生的數(shù)據(jù)量會(huì)是一個(gè)驚人的數(shù)量,數(shù)據(jù)庫(kù)存儲(chǔ)的成本將會(huì)越來(lái)越大,通常的做法是對(duì)歷史數(shù)據(jù)做歸檔,即將長(zhǎng)期不使用的數(shù)據(jù)遷移至以文件形式存儲(chǔ)的廉價(jià)存儲(chǔ)設(shè)備上,比如阿里云OSS或者阿里云數(shù)據(jù)庫(kù)DBS服務(wù)。

然而在部分核心業(yè)務(wù)的應(yīng)用場(chǎng)景下,針對(duì)幾個(gè)月甚至幾年前的“舊”數(shù)據(jù)依舊存在實(shí)時(shí)的,低頻的查詢(xún)甚至更新需求,比如淘寶/天貓的歷史訂單查詢(xún),企業(yè)級(jí)辦公軟件釘釘幾年前的聊天信息查詢(xún),菜鳥(niǎo)海量物流的歷史物流訂單詳情等。

? 如果這時(shí)從歷史備份中還原后查詢(xún),那么查詢(xún)時(shí)間將會(huì)是以天為單位,可接受度為0

? 如果將這些低頻但實(shí)時(shí)的查詢(xún)需求的歷史數(shù)據(jù)與近期活躍存儲(chǔ)在同一套分布式數(shù)據(jù)庫(kù)集群下,那么又會(huì)帶來(lái)以下兩大挑戰(zhàn)

  • 存儲(chǔ)成本巨大,進(jìn)而導(dǎo)致成本遠(yuǎn)大于收益,比如釘釘聊天信息數(shù)據(jù)量在高度壓縮后接近50PB,很難想象這些數(shù)據(jù)不做壓縮會(huì)帶來(lái)多大的資金開(kāi)銷(xiāo)
  • 性能挑戰(zhàn)巨大,隨著數(shù)據(jù)量越來(lái)越大,即使針對(duì)數(shù)據(jù)做了分布式存儲(chǔ),單實(shí)例容量超過(guò)大概5T以后性能也會(huì)急劇下滑,進(jìn)而影響到近期活躍數(shù)據(jù)的查詢(xún)性能,拖垮整個(gè)集群
  • 運(yùn)維難度巨大,比如針對(duì)海量數(shù)據(jù)下發(fā)一個(gè)表數(shù)據(jù)結(jié)構(gòu)變更操作,很難想象全部完成需要多長(zhǎng)時(shí)間

實(shí)時(shí)歷史庫(kù)場(chǎng)景需求分析

通過(guò)上面的分析,不管是冷備份還是在線歷史數(shù)據(jù)混合存儲(chǔ)在同一張物理表上的方法都是不可取的,一般實(shí)時(shí)查詢(xún)歷史數(shù)據(jù)庫(kù)的場(chǎng)景,一般需要有以下幾個(gè)關(guān)鍵特性

  • 成本可控,歷史數(shù)據(jù)的存儲(chǔ)成本無(wú)法接受和在線庫(kù)一樣線性增長(zhǎng)
  • 實(shí)時(shí)查詢(xún),歷史數(shù)據(jù)的查詢(xún)RT要做到與在線活躍庫(kù)幾乎一致
  • 查詢(xún)頻次較低,一般來(lái)說(shuō),越“舊”的數(shù)據(jù)查詢(xún)頻率越低
  • 統(tǒng)一查詢(xún)?nèi)肟?#xff0c;不管是活躍數(shù)據(jù)還是歷史數(shù)據(jù),查詢(xún)?nèi)肟诒3忠恢?/li>
  • 改造成本需要盡可能低,最好能做到不做任何應(yīng)用代碼修改,可以認(rèn)為歷史庫(kù)對(duì)程序開(kāi)發(fā)人員來(lái)說(shuō)是完全透明的
  • 可能存在歷史數(shù)據(jù)更新需求
  • 數(shù)據(jù)規(guī)模較大,一般在100TB以上

X-Engine引擎介紹

X-Engine簡(jiǎn)介

X-Engine是阿里云數(shù)據(jù)庫(kù)產(chǎn)品事業(yè)部自研的聯(lián)機(jī)事務(wù)處理OLTP(On-Line Transaction Processing)數(shù)據(jù)庫(kù)存儲(chǔ)引擎。作為自研數(shù)據(jù)庫(kù)POLARDB的存儲(chǔ)引擎之一,已經(jīng)廣泛應(yīng)用在阿里集團(tuán)內(nèi)部諸多業(yè)務(wù)系統(tǒng)中,包括交易歷史庫(kù)、釘釘歷史庫(kù)等核心應(yīng)用,大幅縮減了業(yè)務(wù)成本,同時(shí)也作為雙十一大促的關(guān)鍵數(shù)據(jù)庫(kù)技術(shù),挺過(guò)了數(shù)百倍平時(shí)流量的沖擊。

與傳統(tǒng)的InnoDB引擎不同,X-Engine使用分層存儲(chǔ)架構(gòu)(LSM-Tree)。分層存儲(chǔ)有兩個(gè)比較顯著的優(yōu)點(diǎn):

  • 需要索引的熱點(diǎn)數(shù)據(jù)集更小,寫(xiě)入性能更高。
  • 底層持久化的數(shù)據(jù)頁(yè)是只讀的,數(shù)據(jù)頁(yè)采用緊湊存儲(chǔ)格式,同時(shí)默認(rèn)進(jìn)行壓縮,存儲(chǔ)成本更低。

相比InnoDB引擎,依據(jù)數(shù)據(jù)特征,使用X-Engine存儲(chǔ)空間可降低至10%~50%,我們?cè)谥腖ink-Bench和阿里巴巴內(nèi)部交易業(yè)務(wù)兩個(gè)數(shù)據(jù)集上測(cè)試了X-Engine的存儲(chǔ)空間效率。在測(cè)試中,對(duì)比開(kāi)壓縮的InnoDB引擎,X-Engine有著2倍空間優(yōu)勢(shì),而對(duì)比未開(kāi)壓縮的InnoDB,X-Engine則有著3~5倍的優(yōu)勢(shì)。

實(shí)時(shí)歷史庫(kù)方案,為何不是其他高壓縮引擎

? 通常我們默認(rèn)MySQL是當(dāng)今最流行的開(kāi)源數(shù)據(jù)庫(kù),大概率是在線核心數(shù)據(jù)庫(kù)集群的首選。相比其他高壓縮的存儲(chǔ)引擎,引入X-Engine完全無(wú)需做任何SQL代碼改造,并且支持事務(wù),接入成本最低,學(xué)習(xí)成本幾乎為0

? 寫(xiě)入性能更強(qiáng),X-Engine相比同為L(zhǎng)SM-tree架構(gòu)的Rocksdb,有超過(guò)10倍的性能提升。

? 在存儲(chǔ)層引入數(shù)據(jù)復(fù)用技術(shù)等,優(yōu)化Compaction的性能,降低傳統(tǒng)LSM-tree架構(gòu)中Compaction動(dòng)作對(duì)系統(tǒng)資源的沖擊,保持系統(tǒng)性能平穩(wěn)

? 引入多個(gè)層級(jí)Cache,同時(shí)結(jié)合Cach回填和預(yù)取機(jī)制,利用精細(xì)化訪問(wèn)機(jī)制和緩存技術(shù),彌補(bǔ)傳統(tǒng)LSM-tree引擎的讀性能短板,X-Engine的點(diǎn)查詢(xún)能力幾乎與Innodb持平

下圖是X-Engine與主流歷史數(shù)據(jù)存儲(chǔ)方案對(duì)比

歷史數(shù)據(jù)存儲(chǔ)選型備份至OSS開(kāi)源HBaseX-Engine
壓縮率
是否支持查詢(xún)支持解析歷史備份文件查詢(xún)
實(shí)時(shí)性N/A較高非常高
應(yīng)用代碼改造代價(jià)N/A很高幾乎不用修改
事務(wù)支持N/A僅支持單行事務(wù)強(qiáng)
主要場(chǎng)景冷備份大數(shù)據(jù)生態(tài)OLTP

實(shí)時(shí)歷史數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)

總體架構(gòu)思路

基于上文對(duì)實(shí)時(shí)歷史庫(kù)和X-Engine的介紹,阿里云數(shù)據(jù)庫(kù)團(tuán)隊(duì)推出以X-Engine引擎為歷史數(shù)據(jù)存儲(chǔ)核心,同時(shí)生態(tài)工具DTS作為在線/歷史數(shù)據(jù)流轉(zhuǎn)通道,DMS作為歷史數(shù)據(jù)無(wú)風(fēng)險(xiǎn)刪除的完整“實(shí)時(shí)在線-歷史庫(kù)”方案,針對(duì)不同的業(yè)務(wù)場(chǎng)景和客戶(hù)需求,在具體實(shí)現(xiàn)上可能會(huì)有所不同,我們提供了多種實(shí)時(shí)歷史庫(kù)方案的具體實(shí)現(xiàn)。主體架構(gòu)圖如下,核心思路為:

  • 久經(jīng)考驗(yàn)的Innodb引擎作為OLTP在線庫(kù)核心引擎,主要處理高頻查詢(xún)/更新請(qǐng)求,滿(mǎn)足在線活躍數(shù)據(jù)高并發(fā),高性能,強(qiáng)范圍查詢(xún)的業(yè)務(wù)需求
  • 阿里巴巴數(shù)據(jù)庫(kù)團(tuán)隊(duì)自研的高壓測(cè)存儲(chǔ)引擎X-Engine作為歷史庫(kù)核心引擎,主要響應(yīng)歷史數(shù)據(jù)入庫(kù)/查詢(xún)/更新請(qǐng)求,滿(mǎn)足歷史數(shù)據(jù)冷熱數(shù)據(jù)頻次不一,低存儲(chǔ)成本,高性能的業(yè)務(wù)需求(范圍查詢(xún)可能性能受限)
  • 統(tǒng)一DB接入層,根據(jù)設(shè)置的業(yè)務(wù)時(shí)間屬性將請(qǐng)求分別轉(zhuǎn)發(fā)至不同的存儲(chǔ)引擎。針對(duì)特殊場(chǎng)景下的跨引擎訪問(wèn),在應(yīng)用層做聚合展示
  • 在線-歷史數(shù)據(jù)通過(guò)阿里云提供的生態(tài)體系工具做歷史數(shù)據(jù)遷移和過(guò)期數(shù)據(jù)刪除,確保鏈路更為穩(wěn)定可靠

在線庫(kù)/歷史庫(kù)拆分方案

一般來(lái)說(shuō),需要使用到實(shí)時(shí)歷史庫(kù)的場(chǎng)景,數(shù)據(jù)量都足夠大到單臺(tái)宿主機(jī)存放不了。在線數(shù)據(jù)庫(kù)可能是根據(jù)業(yè)務(wù)水平或垂直拆分的多個(gè)RDS,也可能是一個(gè)規(guī)模較大的DRDS集群。為了盡可能地保證在線庫(kù)的性能,推薦將在線庫(kù)/歷史庫(kù)完全拆分解耦
? 歷史庫(kù)集群存儲(chǔ)全量數(shù)據(jù)
? 通過(guò)DTS鏈路打通在線庫(kù)和歷史庫(kù),實(shí)時(shí)同步
? DTS鏈路過(guò)濾Delete操作
? 可直接使用新版DMS配置歷史數(shù)據(jù)定期刪除

源端為DRDS集群

數(shù)據(jù)同步鏈路走RDS

? 多條DTS鏈路打通底層RDS節(jié)點(diǎn),同步性能強(qiáng)
? RDS數(shù)量較多可支持API批量創(chuàng)建和配置
? 鏈路穩(wěn)定性更好
? 需要保證源端目標(biāo)端庫(kù)表數(shù)量一致,數(shù)據(jù)路由規(guī)則一致

數(shù)據(jù)同步鏈路走DRDS

? 只需要配置一條DTS鏈路,方便省錢(qián)
? 數(shù)據(jù)同步性能較差
? 源端DRDS擴(kuò)容會(huì)影響到DTS同步鏈路
? 源端目標(biāo)端的實(shí)例數(shù)量和數(shù)據(jù)路由規(guī)則可自由配置

源端為多個(gè)RDS

目標(biāo)端為多個(gè)RDS

? 業(yè)務(wù)代碼無(wú)需任何改造
? 運(yùn)行后期歷史庫(kù)節(jié)點(diǎn)磁盤(pán)容量存在風(fēng)險(xiǎn)

目標(biāo)端為DRDS集群

  • 可能涉及到業(yè)務(wù)代碼輕量改造,目標(biāo)端不走分庫(kù)分表鍵性能無(wú)法保證
  • 可將多個(gè)在線庫(kù)業(yè)務(wù)合并至一套歷史庫(kù)集群,架構(gòu)更加簡(jiǎn)潔
  • DTS鏈路也分為走RDS和DRDS兩種

數(shù)據(jù)同步鏈路走RDS

同實(shí)例混用存儲(chǔ)引擎方案

在線庫(kù)/歷史庫(kù)拆分方案相對(duì)較為復(fù)雜,RDS支持同一實(shí)例混用存儲(chǔ)引擎。針對(duì)總數(shù)據(jù)量不是特別大的場(chǎng)景,可以考慮同一實(shí)例下Innodb&X-Engine引擎混合使用

使用DMS-->數(shù)據(jù)工廠-->數(shù)據(jù)編排功能可以輕松地實(shí)現(xiàn)同一實(shí)例內(nèi)的數(shù)據(jù)流動(dòng)和過(guò)期數(shù)據(jù)刪除,架構(gòu)示意圖如下。

  • 實(shí)現(xiàn)簡(jiǎn)單靈活
  • 混用存儲(chǔ)引擎,在數(shù)據(jù)庫(kù)內(nèi)核參數(shù)優(yōu)化上難以兼顧兩者性能
  • 歷史數(shù)據(jù)compact階段可能對(duì)整個(gè)實(shí)例產(chǎn)生性能抖動(dòng)
  • 同一實(shí)例下的庫(kù)或者表無(wú)法重名,涉及到輕量業(yè)務(wù)改造

DTS賦能在線/歷史數(shù)據(jù)流轉(zhuǎn)

DTS不僅支持全量&增量同步,支持不同數(shù)據(jù)庫(kù)產(chǎn)品之間的數(shù)據(jù)同步,在在線/歷史庫(kù)解決方案中,DTS強(qiáng)大的"條件過(guò)濾"功能是非常重要的一環(huán),通過(guò)配置DTS任務(wù)可以非常便捷地實(shí)現(xiàn)過(guò)濾Delete操作,動(dòng)動(dòng)鼠標(biāo)點(diǎn)兩下即可實(shí)現(xiàn)自定義的數(shù)據(jù)同步策略。

DMS賦能在線庫(kù)過(guò)期數(shù)據(jù)刪除

在線庫(kù)的過(guò)期數(shù)據(jù)刪除既要保障刪除效率,也要保證刪除過(guò)程中對(duì)在線庫(kù)不會(huì)造成性能上的抖動(dòng),新版DMS支持創(chuàng)建“歷史數(shù)據(jù)清理”的數(shù)據(jù)變更任務(wù),通過(guò)該任務(wù)可以非常方便地完成以下工作

? 歷史數(shù)據(jù)定期刪除,指定調(diào)度時(shí)間和一次調(diào)度時(shí)長(zhǎng)
? 大事務(wù)拆分,減少事務(wù)執(zhí)行過(guò)程中鎖表時(shí)間過(guò)長(zhǎng),避免主備延遲
? 清理遭遇異常中斷可重試
? 支持查看任務(wù)運(yùn)行狀態(tài)和失敗原因分析
? 配置方面簡(jiǎn)潔

過(guò)期數(shù)據(jù)清理思路

如果沒(méi)有使用DMS生態(tài)工具,也自行實(shí)現(xiàn)過(guò)期數(shù)據(jù)刪除,但實(shí)現(xiàn)較為復(fù)雜。一般較為通用的設(shè)計(jì)思路為將表的主鍵按照大小做拆分,保證一次刪除"恰當(dāng)數(shù)量"的數(shù)據(jù),既保證刪除效率又不影響線上服務(wù)

? 在線庫(kù)的歷史數(shù)據(jù)刪除策略(假設(shè)主鍵為id,數(shù)據(jù)保存180天,時(shí)間屬性列為date_col)

  • 初始化數(shù)值Y=select min(id) from $table_name
  • 到了業(yè)務(wù)低峰期以后,DELETE FROM $table_name WHERE date_col< SUBDATE(CURDATE(),INTERVAL 180 DAY) and id >= Y and id <=
    Y+100000 ,執(zhí)行成功后代碼層重新賦值 Y=Y+100000
  • 程序sleep 3s,重復(fù)步驟b
  • 時(shí)間到了業(yè)務(wù)高峰期以后,停止執(zhí)行,記錄下當(dāng)前的數(shù)值Y,第二天執(zhí)行時(shí)直接從Y開(kāi)始注意
  • ? 在線庫(kù)歷史數(shù)據(jù)清理注意點(diǎn)

    ? 代碼上注意不要出現(xiàn)高并發(fā)刪除的情況,即步驟b還沒(méi)跑完,新的步驟b又進(jìn)來(lái)了

    ? 程序sleep的具體秒數(shù),要通過(guò)測(cè)試,取一個(gè)最合適的數(shù)值,主要看主備是否存在較大延遲,3只是估值

    ? 100000也是一個(gè)估值,實(shí)際取值最好也通過(guò)測(cè)試,取一個(gè)效率最高,對(duì)業(yè)務(wù)影響最小的數(shù)值。因?yàn)閐rds的序列不是單點(diǎn)遞增1的,所以這里的10w不代表10w條記錄。

    ? 假設(shè)刪除程序中途崩潰了,或者執(zhí)行很多天后發(fā)現(xiàn)部分?jǐn)?shù)據(jù)沒(méi)有刪除。那么可以手工先刪除一小部分殘留的數(shù)據(jù),比如預(yù)估下id<100w的記錄還有多少條,不多的話(huà)直接執(zhí)行DELETE FROM
    logs_trans?WHERE?reqdate?< SUBDATE(CURDATE(),INTERVAL 30 DAY) and id<100w 然后初始化整個(gè)程序,這樣保證重新初始化以后不會(huì)做很多無(wú)用功,即反復(fù)執(zhí)行刪除條目很少的sql

    極端場(chǎng)景分析


    在臨界時(shí)間處理上,實(shí)時(shí)歷史庫(kù)方案可能遭遇極端場(chǎng)景導(dǎo)致業(yè)務(wù)可能存在歷史庫(kù)的臟讀問(wèn)題,假設(shè)在線庫(kù)數(shù)據(jù)保存180天

  • 更新179天前23時(shí)59分59秒的數(shù)據(jù),請(qǐng)求路由至在線庫(kù)
  • 數(shù)據(jù)同步鏈路異常中斷或鏈路存在延遲,該更新請(qǐng)求未能及時(shí)到達(dá)歷史庫(kù)
  • 這時(shí)業(yè)務(wù)查詢(xún)?cè)摂?shù)據(jù)時(shí),由于已經(jīng)數(shù)據(jù)已經(jīng)"舊"到超過(guò)180天,請(qǐng)求路由至歷史庫(kù),由于鏈路異常,歷史庫(kù)查到了臟數(shù)據(jù)
  • 解決方法

    ? 配置鏈路異常告警,及時(shí)發(fā)現(xiàn)及時(shí)處理

    ? 預(yù)計(jì)影響的數(shù)據(jù)范圍為DTS鏈路恢復(fù)前的臨界時(shí)間點(diǎn)附近數(shù)據(jù),建議從業(yè)務(wù)邏輯上訂正數(shù)據(jù)

    ? 建議過(guò)期數(shù)據(jù)刪除設(shè)置保守一點(diǎn),比如臨界時(shí)間為180天,過(guò)期數(shù)據(jù)只刪除190天以后的數(shù)據(jù),方便在極端場(chǎng)景下對(duì)比源端目標(biāo)端的數(shù)據(jù)情況進(jìn)行數(shù)據(jù)訂正

    最佳實(shí)踐參考

    將DRDS中的InnoDB引擎轉(zhuǎn)換為X-Engine引擎鏈接
    X-Engine如何支撐釘釘躍居AppStore第一鏈接
    淘寶萬(wàn)億級(jí)交易訂單背后的存儲(chǔ)引擎鏈接

    原文鏈接
    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    總結(jié)

    以上是生活随笔為你收集整理的基于X-Engine引擎的实时历史数据库解决方案揭秘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。