原文: https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00
想法
我們決定部署一個(gè)全高密度近場(chǎng)緩存(Hollow)來解決我們的IO瓶頸炕檩。對(duì)于我們的每個(gè)上游系統(tǒng),我們要建一個(gè)能讓Gatekeeper執(zhí)行這次評(píng)估的包括所有數(shù)據(jù)的Hollow數(shù)據(jù)集笛质。每個(gè)上游系統(tǒng)現(xiàn)在都需要保證它的緩存保持最新妇押。
使用這個(gè)模型,活躍性評(píng)估將數(shù)據(jù)從上游系統(tǒng)中隔離出來了俊马。相對(duì)于對(duì)事件進(jìn)行響應(yīng)肩杈,Gatekeeper會(huì)以一個(gè)重復(fù)的周期從遍布全世界的視頻數(shù)據(jù)中持續(xù)的處理活躍性數(shù)據(jù)。迭代周期從Netflix的每個(gè)視頻上線開始扩然,計(jì)算它們的活躍性信息。在每個(gè)周期的結(jié)束界睁,它產(chǎn)出一個(gè)經(jīng)過計(jì)算的表示全世界所有視頻的活躍性明細(xì)信息的輸出(包括Hollow數(shù)據(jù)集)索守。
我們希望這個(gè)持續(xù)處理模型是可行的,這樣我們可以徹底移除我們IO上的瓶頸杨赤,可以保證操作順序更有效截汪。我們也期望通過遷移到這個(gè)模型,我們可以對(duì)業(yè)務(wù)產(chǎn)生更正面的影響阳柔。
- 作為對(duì)Gatekeeper對(duì)上游系統(tǒng)產(chǎn)生的過大的負(fù)載的最終解決方案
- 徹底消除活躍性處理的延遲和錯(cuò)過上線日期的問題蚓峦。
- 緩解內(nèi)容配置工程團(tuán)隊(duì)在性能相關(guān)問題的時(shí)間消耗。
- 改進(jìn)活躍性處理的可調(diào)試性和可見性
問題
Hollow可以被想象為一個(gè)時(shí)間機(jī)器霍转。作為一個(gè)數(shù)據(jù)一直在變化的數(shù)據(jù)集一汽,通過將變更分成一系列的時(shí)間線的數(shù)據(jù)狀態(tài)并將變更發(fā)送給消費(fèi)方。每份數(shù)據(jù)狀態(tài)都表示為整個(gè)數(shù)據(jù)集在當(dāng)時(shí)時(shí)刻的一份快照。
通常恕沫,Hollow數(shù)據(jù)集的消費(fèi)者將加載的最新的數(shù)據(jù)狀態(tài)并將產(chǎn)生的新狀態(tài)保存到他們的混存中婶溯。當(dāng)然妇穴,它們可能會(huì)將狀態(tài)替換到之前的樣子 - 導(dǎo)致將整個(gè)數(shù)據(jù)集指向之前的一個(gè)狀態(tài)。
傳統(tǒng)產(chǎn)生數(shù)據(jù)狀態(tài)的方式是維護(hù)一個(gè)運(yùn)行重復(fù)周期的生產(chǎn)者腾它。在一個(gè)周期中,生產(chǎn)者從元數(shù)據(jù)中迭代所有記錄曲梗。在迭代中妓忍,它對(duì)Hollow庫中增加每條數(shù)據(jù)。Hollow則在之后計(jì)算數(shù)據(jù)的變化并在最后的周期將數(shù)據(jù)填加上去定罢,將數(shù)據(jù)狀態(tài)發(fā)布到一個(gè)已知地址的消費(fèi)者旁瘫。
這個(gè)基于真實(shí)數(shù)據(jù)源的迭代模型的問題是它可能會(huì)需要很長時(shí)間酬凳。在這個(gè)場(chǎng)景中一些我們的上游系統(tǒng),這需要幾小時(shí)宁仔。數(shù)據(jù)傳播延遲是不可接受的 - 我們不能為活躍性處理等待幾個(gè)小時(shí),比如权埠,標(biāo)題運(yùn)營給電影增加了一個(gè)評(píng)級(jí)并需要立即發(fā)布上線煎谍。
改進(jìn)
我們需要一個(gè)更快的時(shí)間機(jī)器 - 它可以更頻繁的產(chǎn)出狀態(tài),讓消費(fèi)方可以更快的識(shí)別到變化。
為了達(dá)到這個(gè)目標(biāo)事哭,我們建立了一套很強(qiáng)的Hollow基礎(chǔ)設(shè)施,平衡了之前Hollow library做的工作鳍咱,與流處理團(tuán)隊(duì)在Target生產(chǎn)環(huán)境做的先鋒性工作(現(xiàn)在是公開的非beta的API)
使用這套基礎(chǔ)設(shè)施,每次變更都可以在源應(yīng)用中唄檢測(cè)到蓄坏,更新過的記錄會(huì)被編碼并發(fā)送給Kafka topic丑念。一個(gè)不屬于源應(yīng)用的新組件,Hollow增量生產(chǎn)服務(wù)渔彰,以一個(gè)預(yù)定義的節(jié)奏執(zhí)行一個(gè)重復(fù)周期推正。 在每個(gè)周期,它讀取自從上個(gè)周期所有增加到topic的消息再沧,并讓Hollow狀態(tài)引擎反映出更新過的記錄的最新狀態(tài)尊残。
如果一個(gè)Kafka topic中的消息包含了已經(jīng)在Hollow數(shù)據(jù)集中已經(jīng)反映出來的相同數(shù)據(jù),不會(huì)有任何變動(dòng)夜郁。
為了緩解丟失事件產(chǎn)生的影響竞端,我們實(shí)現(xiàn)了一套周期性從整個(gè)數(shù)據(jù)集清掃的機(jī)制。當(dāng)它執(zhí)行時(shí)事富,它將每條記錄的內(nèi)容發(fā)送給Kafka topic统台。通過這種方式,任何可能丟失的更新都會(huì)反映到Hollow數(shù)據(jù)集上贱勃。并且谤逼,這不是更新傳播到Hollow數(shù)據(jù)集上的主要方式仇穗,它不需要像傳統(tǒng)Hollow使用方式那樣很快很頻繁的在源上迭代運(yùn)行纹坐。
Hollow增量生產(chǎn)者有從Kafka topic中讀取大量消息并快速轉(zhuǎn)變成Hollow狀態(tài)的能力 - 所以我們可以將這個(gè)周期配置的非常短(我們目前的缺省配置是30秒)。
這就是我們?nèi)绾螛?gòu)建一個(gè)更快時(shí)間機(jī)器的方式≡抛樱現(xiàn)在,如果標(biāo)題運(yùn)營給電影增加了一條評(píng)級(jí)绒障,在30秒內(nèi)片林,數(shù)據(jù)就可以在Hollow數(shù)據(jù)集上可用。
—
本文來自微信公眾號(hào)「麥芽面包焕妙,id「darkjune_think」
轉(zhuǎn)載請(qǐng)注明弓摘。微信掃一掃關(guān)注公眾號(hào)。
交流Email: zhukunrong@yeah.net