中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

我們是如何刪除 PB 級(jí)重復(fù)數(shù)據(jù)的?

2019-11-21    來(lái)源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

Mixpanel 通過(guò)網(wǎng)絡(luò)從移動(dòng)端、瀏覽器端和服務(wù)器端的客戶接入了千萬(wàn)億字節(jié)的事件數(shù)據(jù)。由于網(wǎng)絡(luò)的不可靠性,客戶可能會(huì)不斷重復(fù)發(fā)送事件請(qǐng)求,直到他們收到來(lái)自 Mixpanel 的 200 OK(連接成功)消息。雖然這種重試策略避免了數(shù)據(jù)丟失,但是在系統(tǒng)中創(chuàng)建了大量的重復(fù)事件。對(duì)這類重復(fù)事件的數(shù)據(jù)的分析也非常容易產(chǎn)生問(wèn)題,因?yàn)樗鼘?duì)所發(fā)生的事給出了一個(gè)不準(zhǔn)確的描述,這也會(huì)導(dǎo)致 Mixpanel 偏離其它正在同步的客戶端數(shù)據(jù)系統(tǒng),如數(shù)據(jù)倉(cāng)庫(kù)。這也是為什么我們非常關(guān)心數(shù)據(jù)完整性的原因。

今天,我們很高興在這里分享我們的 PB 級(jí)規(guī)模的事件數(shù)據(jù)去重解決方案。

要求

為解決這個(gè)問(wèn)題,我們需要一個(gè)能夠滿足以下要求的方案:

可擴(kuò)展性:能夠擴(kuò)展到百萬(wàn)事件 / 秒的接入量
低成本:為接入、存儲(chǔ)和查詢優(yōu)化成本 / 性能負(fù)載
可追溯性:能夠?qū)θ我獍l(fā)送的事件進(jìn)行重復(fù)識(shí)別
可恢復(fù)性:保留重復(fù)數(shù)據(jù)從而在配置錯(cuò)誤時(shí)可以回滾
可維護(hù)性:最小化運(yùn)營(yíng)負(fù)載

最新技術(shù):接入 - 時(shí)間去重

業(yè)界有很多富有創(chuàng)造性的方法來(lái)解決數(shù)據(jù)去重問(wèn)題。其核心策略是在接入層構(gòu)建一個(gè)能夠去重的的基礎(chǔ)設(shè)施?蛻舭l(fā)送的每個(gè)事件都有一個(gè)唯一的 insertid屬性標(biāo)識(shí)。數(shù)據(jù)去重基礎(chǔ)設(shè)施會(huì)將所有事件的insertid屬性標(biāo)識(shí)。數(shù)據(jù)去重基礎(chǔ)設(shè)施會(huì)將所有事件的insert_id 保存一定期限(例如 7 天),期間將會(huì)與每個(gè)新事件進(jìn)行匹對(duì),以查找去重標(biāo)識(shí)。鍵值通常是用存儲(chǔ)的分片的 RocksDB 或 Cassandra。通過(guò)使用布隆過(guò)濾器來(lái)優(yōu)化存儲(chǔ)中的查找成本。這種架構(gòu)能夠確保在系統(tǒng)入口點(diǎn)就將重復(fù)內(nèi)容清除。

但是,這種方法并不符合我們的要求,原因如下:

√ 擴(kuò)展性:分片鍵值存儲(chǔ)可以水平擴(kuò)展
× 低成本:需要一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)和基礎(chǔ)設(shè)施來(lái)保存重復(fù)數(shù)據(jù)
× 可追溯性:只能抓取一定時(shí)間段的重復(fù)數(shù)據(jù)
× 可恢復(fù)性:抓取時(shí)丟棄數(shù)據(jù),不能回滾
× 可維護(hù)性:刪除重復(fù)數(shù)據(jù)成為一個(gè)額外的服務(wù),必須 24x7 不間斷

我們的方案

我們的方案是接入所有事件并在讀取時(shí)去重,該方案也滿足了前面所有的要求。每次查詢時(shí),通過(guò)構(gòu)建一個(gè)包含所有 $insert_id 的哈希表可以很容易地在讀取時(shí)實(shí)現(xiàn)去重;但是,這會(huì)給我們的系統(tǒng)增加一些額外的開銷。在詳細(xì)介紹這個(gè)方案之前,讓我們先回顧一下 Mixpanel 架構(gòu)的幾個(gè)關(guān)鍵技術(shù)。

Mixpanel 架構(gòu)

基于項(xiàng)目、用戶和時(shí)間的分片

Mixpanel 的分析數(shù)據(jù)庫(kù) Arb 按照項(xiàng)目、用戶和時(shí)間對(duì)數(shù)據(jù)文件進(jìn)行了分片。這可以確保指定用戶的所有數(shù)據(jù)都可以共同保存在一個(gè)位置,查詢時(shí)也可以在相關(guān)的時(shí)間段同時(shí)覆蓋多個(gè)用戶。

Lambda 架構(gòu)

在 Arb 中,所有事件都被寫入 AOF(只允許追加的文件),這些文件被周期性地索引(壓縮)到后臺(tái)的柱狀文件中。AOF 在達(dá)到某個(gè)大小或時(shí)間閾值時(shí),就會(huì)被索引。Arb 通過(guò)掃描小型的、實(shí)時(shí)的 AOF 和大型的、歷史的、索引的文件,從而確保查詢的實(shí)時(shí)性和高效性。

 

 

Mixpanel 架構(gòu)

我們主要利用架構(gòu)中的這兩類文件來(lái)提高讀時(shí)去重的效率。根據(jù)第一準(zhǔn)則,重復(fù)事件具有以下屬性:

重復(fù)事件屬于同一項(xiàng)目
重復(fù)事件項(xiàng)屬于同一用戶
重復(fù)事件屬于同一事件時(shí)間

根據(jù)這些屬性特征,我們可以:

在搜索空間中搜索項(xiàng)目、用戶和日期的重復(fù)事件,即搜索單個(gè) Arb 碎片。
通過(guò)與 lambda 架構(gòu)一起攤銷來(lái)最小化去重開銷,從而維護(hù)查詢的實(shí)時(shí)和高效。
這幫助我們實(shí)現(xiàn)了一個(gè)滿足所有要求的解決方案。

數(shù)據(jù)去重架構(gòu)

在 Mixpanel 的基礎(chǔ)設(shè)施中,在索引和查詢時(shí)都可以去重。

 

 

Mixpanel 架構(gòu)

我們的索引器在內(nèi)存中維護(hù)了一個(gè) hashset,該 hashset 通過(guò) $insert_id 保存了被索引文件中的所有事件。如果某個(gè)事件命中,則對(duì)該事件設(shè)置一個(gè)索引格式的重復(fù)標(biāo)記位。這個(gè)過(guò)程的開銷很小,畢竟索引是在細(xì)粒度分片級(jí)別進(jìn)行的。

查詢時(shí),由于使用了 lambda 架構(gòu),我們可以同時(shí)掃描索引文件和 AOF。對(duì)于索引文件,我們可以檢查是否設(shè)置了重復(fù)位,如果設(shè)置了,則跳過(guò)處理事件。對(duì)于那些小的 AOF,查詢可以對(duì) $insert_id 基于散列去重。這可以讓我們既實(shí)時(shí)又高效,充分發(fā)揮了 lambda 架構(gòu)的優(yōu)勢(shì)。

性能

 

 

我們從實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)索引含有 2% 重復(fù)的文件時(shí)會(huì)增加 4% 到 10% 的時(shí)間開銷。但這并沒(méi)有對(duì)用戶體驗(yàn)產(chǎn)生直接影響,因?yàn)樗饕且粋(gè)離線過(guò)程。

對(duì)于查詢時(shí)間,我們發(fā)現(xiàn)當(dāng)額外讀取一個(gè)事件的標(biāo)志位時(shí)會(huì)增加大約 10ns 的時(shí)間。由于增加了額外的列,這使查詢時(shí)間增加了近 2%。每讀取 1000 萬(wàn)個(gè)事件會(huì)增加約 0.1 秒(100 毫秒)的時(shí)間開銷。作為參考,由于采取了基于項(xiàng)目、用戶和時(shí)間的分片,Mixpanel 目前最大的柱狀文件包含大約 200 萬(wàn)個(gè)事件。我們認(rèn)為在時(shí)間成本上的損失是完全可以接受的,因?yàn)槲覀冊(cè)跀?shù)據(jù)的保留期限和運(yùn)營(yíng)成本上都獲得了更大的回報(bào)。

未來(lái)工作

我們的解決方案并不完美,還有以下場(chǎng)景有待改善:事件可能因?yàn)榉謩e保存在 AOF 和索引文件而造成重復(fù)。我們可以分別在索引文件或 AOF 中識(shí)別出重復(fù)項(xiàng),但不能識(shí)別出不同文件中的重復(fù)。我們之所以選擇忽略這種情況,主要原因如下:

這種情況極其罕見:99.9% 的客戶的數(shù)據(jù)都非常小,以至于一整天的接入量都可以放入一個(gè) AOF 文件中。這意味著 99.9% 的客戶不會(huì)受到這個(gè)問(wèn)題的影響。

對(duì)于可能遇到此問(wèn)題的大數(shù)據(jù)客戶,我們估計(jì)一個(gè)事件及其重復(fù)數(shù)據(jù)分別保存到兩個(gè)文件的幾率為 0.5%。

我們的系統(tǒng)會(huì)在當(dāng)日結(jié)算時(shí)自我修復(fù),當(dāng)天所有的數(shù)據(jù)都會(huì)重新索引到一個(gè)文件中。所以重復(fù)數(shù)據(jù)只會(huì)在這一天中短暫出現(xiàn)。

我們發(fā)現(xiàn),這種方法的優(yōu)勢(shì)大大超過(guò)了其弊端。未來(lái),我們會(huì)實(shí)現(xiàn)不同文件間的實(shí)時(shí)去重以及最近幾天文件的數(shù)據(jù)去重。

結(jié)語(yǔ)

在文中,我們討論了在索引層分發(fā)重復(fù)標(biāo)識(shí)和在查詢層分發(fā)重復(fù)過(guò)濾的架構(gòu)。這個(gè)方案已經(jīng)在 Mixpanel 內(nèi)部成功運(yùn)行了 6 個(gè)月的時(shí)間。

原文鏈接:https://engineering.mixpanel.com/2019/07/18/petabyte-scale-data-deduplication/

標(biāo)簽: 數(shù)據(jù)倉(cāng) 

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:即使對(duì)數(shù)據(jù)作了匿名化處理,找出你是誰(shuí)還是很容易

下一篇:BAT 程序員們常用的開發(fā)工具