沒(méi)有足夠的特征數(shù)據(jù),安全策略將是"無(wú)根之木,無(wú)源之水"。微信安全數(shù)據(jù)倉(cāng)庫(kù)應(yīng)運(yùn)而生,成為整個(gè)安全業(yè)務(wù)的特征數(shù)據(jù)存儲(chǔ)中心,每天服務(wù)了萬(wàn)億級(jí)的特征數(shù)據(jù)讀寫(xiě)請(qǐng)求,為整個(gè)微信安全策略提供了可靠的數(shù)據(jù)支撐,是微信安全基石之所在。
然而,微信安全數(shù)據(jù)倉(cāng)庫(kù)不僅僅是一個(gè)存儲(chǔ)中心,更是一個(gè)特征管理和數(shù)據(jù)質(zhì)量管理的中心。
在演進(jìn)過(guò)程中,數(shù)據(jù)倉(cāng)庫(kù)一直致力于提升特征管理能力和數(shù)據(jù)質(zhì)量保障,實(shí)現(xiàn)了特征的管理、共享、分析和數(shù)據(jù)質(zhì)量檢測(cè)等功能。
本文將介紹安全數(shù)據(jù)倉(cāng)庫(kù)的起源、演進(jìn)、當(dāng)前的架構(gòu)設(shè)計(jì)和數(shù)據(jù)質(zhì)量保證系統(tǒng)的實(shí)現(xiàn)。
業(yè)務(wù)背景
安全策略開(kāi)發(fā)流程
安全業(yè)務(wù)的核心邏輯在安全策略中實(shí)現(xiàn)。整個(gè)的策略開(kāi)發(fā)流程包括特征數(shù)據(jù)的收集,安全策略的編寫(xiě)實(shí)現(xiàn),和策略的反饋評(píng)估。其中特征數(shù)據(jù)的收集是必不可少的環(huán)節(jié),數(shù)據(jù)的質(zhì)量將直接影響安全策略的效果。

特征數(shù)據(jù)收集主要包括:數(shù)據(jù)接入、特征的計(jì)算、特征的存儲(chǔ)。
在數(shù)據(jù)倉(cāng)庫(kù)還未建立時(shí),業(yè)務(wù)同學(xué)通過(guò)消費(fèi)離線存儲(chǔ)mmdata和tdw接入數(shù)據(jù),通過(guò)Flink流式計(jì)算或者自定義模塊對(duì)數(shù)據(jù)進(jìn)行加工,計(jì)算出需要的特征,最終存儲(chǔ)到自行維護(hù)的KV,然后在安全策略平臺(tái)上編寫(xiě)安全策略,讀取KV中的數(shù)據(jù), 實(shí)現(xiàn)需要的安全邏輯。

為什么需要數(shù)據(jù)倉(cāng)庫(kù)
前面提到在還未建立數(shù)據(jù)倉(cāng)庫(kù)時(shí),業(yè)務(wù)同學(xué)都按照自己的方式去存儲(chǔ)計(jì)算出的特征,大多通過(guò)自行申請(qǐng)部署KV來(lái)存儲(chǔ),如A同學(xué)把部署一套KV集群,存儲(chǔ)特征到KV表中,B同學(xué)把特征存儲(chǔ)到同KV集群的不同表中,C同學(xué)又額外申請(qǐng)了另外一套KV集群存儲(chǔ)。如下圖中的架構(gòu):

這種特征的分散存儲(chǔ),導(dǎo)致業(yè)務(wù)同學(xué)只了解自己熟悉的特征,難以交流和共享,特征缺乏統(tǒng)一的管理,數(shù)據(jù)質(zhì)量難以保證,不同的存儲(chǔ)方式,也導(dǎo)致特征訪問(wèn)接口的混亂,業(yè)務(wù)系統(tǒng)的可靠性也難以保證。
針對(duì)上述的問(wèn)題,我們希望把所有業(yè)務(wù)的特征,按統(tǒng)一的規(guī)范,建立統(tǒng)一的存儲(chǔ),方便特征的共享、管理和維護(hù)、并建立數(shù)據(jù)質(zhì)量保障體系, 為策略提供可靠的數(shù)據(jù)。所以我們需要開(kāi)發(fā)數(shù)據(jù)倉(cāng)庫(kù)。

安全業(yè)務(wù)后臺(tái)架構(gòu)
當(dāng)前我們已經(jīng)把所有的安全策略統(tǒng)一到安全策略平臺(tái)進(jìn)行開(kāi)發(fā)和管理,特征數(shù)據(jù)的接入和計(jì)算統(tǒng)一到了Flink實(shí)時(shí)計(jì)算平臺(tái)和特征平臺(tái)。
數(shù)據(jù)倉(cāng)庫(kù)作為承上啟下的部分,對(duì)上為在安全策略平臺(tái)上的安全策略提供了數(shù)據(jù)讀寫(xiě),對(duì)下為實(shí)時(shí)計(jì)算平臺(tái)和特征平臺(tái)計(jì)算輸出的特征提供了存儲(chǔ),是整個(gè)業(yè)務(wù)體系中不可或缺的部分。

數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)演進(jìn)
存儲(chǔ)選型
安全業(yè)務(wù)特征數(shù)據(jù)主要有2種類型:
-
離線特征:用來(lái)滿足離線計(jì)算數(shù)據(jù)導(dǎo)入線上實(shí)時(shí)使用的需求,通常特征離線計(jì)算,定期的批量后臺(tái)上線,提供在線讀,但不支持實(shí)時(shí)寫(xiě)入。 -
實(shí)時(shí)特征:用來(lái)滿足實(shí)時(shí)的在線讀寫(xiě)需求
微信內(nèi)部有多種非常成熟穩(wěn)定的自研KV:實(shí)時(shí)讀寫(xiě)KV(簡(jiǎn)稱實(shí)時(shí)KV),?離線寫(xiě)實(shí)時(shí)讀KV(簡(jiǎn)稱離線KV), ***KV等等, 這些KV已經(jīng)在多個(gè)業(yè)務(wù)被驗(yàn)證,有非常好的性能和可靠性,有團(tuán)隊(duì)做長(zhǎng)期的維護(hù),為此數(shù)據(jù)倉(cāng)庫(kù)的底層存儲(chǔ)采用了微信自研的KV。其主要特點(diǎn)如下:
存儲(chǔ)KV | 特點(diǎn) | 是否選用 |
---|---|---|
離線寫(xiě)實(shí)時(shí)讀KV | 非常適用大量key的定時(shí)批量更新,在線只讀,具有版本管理功能,支持版本歷史版本回退,具有非常優(yōu)秀的讀性能。 | 是 |
實(shí)時(shí)讀寫(xiě)KV | 強(qiáng)一致性的key-value服務(wù),存在類MySQL的表概念,提供了Select Insert Update Delete接口,在單表操作保證ACID,支持過(guò)期淘汰TTL。 | 是 |
***KV | 提供強(qiáng)一致性的key-value讀寫(xiě)服務(wù),類似STL中的容器,不支持TTL, 不提供新集群,不建議使用。 | 否 |
-
離線KV適合離線特征要求的場(chǎng)景,擁有非常好的讀性能,并且提供了版本管理功能,在處理有問(wèn)題數(shù)據(jù)時(shí)可以非常方便的可以回退版本,采用這種KV存儲(chǔ)時(shí),value一般是protobuf對(duì)象,新增特征時(shí)可以在pb中增加字段。 -
實(shí)時(shí)KV適合實(shí)時(shí)特征的場(chǎng)景,在線實(shí)時(shí)讀寫(xiě)性能優(yōu)秀,而且支持?jǐn)?shù)據(jù)過(guò)期淘汰,該KV提供了類MySQL表的概念,KV表定義類似于一個(gè)MySQL表,而每一個(gè)安全業(yè)務(wù)特征剛好可以用表的一個(gè)字段表示。
架構(gòu)設(shè)計(jì)和演進(jìn)
統(tǒng)一存儲(chǔ)統(tǒng)一接口
數(shù)據(jù)倉(cāng)庫(kù)第一個(gè)版本,針對(duì)特征存儲(chǔ)分散訪問(wèn)接口混亂問(wèn)題,首先部署了公共的實(shí)時(shí)KV/離線KV集群,并實(shí)現(xiàn)了一個(gè)接入層。新增特征和歷史特征放到公共的KV存儲(chǔ)集群,并且在接入層屏蔽了底層KV的細(xì)節(jié),提供了統(tǒng)一的讀寫(xiě)特征的接口。

接入層支持任意多個(gè)KV集群,支持多個(gè)表,為屏蔽KV的細(xì)節(jié),接入層為每個(gè)特征分配唯一的標(biāo)識(shí)<sceneid, columnid>,讀寫(xiě)特征數(shù)據(jù)使用唯一標(biāo)識(shí)進(jìn)行,不需要關(guān)注KV類型和KV表ID,方便業(yè)務(wù)的接入使用。

接入層還實(shí)現(xiàn)配置管理、參數(shù)校驗(yàn)、模塊校驗(yàn)、權(quán)限校驗(yàn)、流水上報(bào)、PV統(tǒng)計(jì)等功能。
讀寫(xiě)分離和多IDC同步
讀寫(xiě)分離:數(shù)據(jù)倉(cāng)庫(kù)的讀請(qǐng)求量遠(yuǎn)遠(yuǎn)多于實(shí)時(shí)寫(xiě)入量,為了提高性能,減少讀寫(xiě)之間的相互影響,接入層做了讀寫(xiě)分離,將讀和寫(xiě)接口拆分到兩個(gè)模塊。
數(shù)據(jù)多IDC同步:數(shù)據(jù)倉(cāng)庫(kù)和業(yè)務(wù)都采用的是多IDC部署,為了不降低查詢性能,不希望業(yè)務(wù)跨IDC訪問(wèn)存儲(chǔ),所以底層的KV也是多IDC部署。這里就帶來(lái)一個(gè)問(wèn)題,特征數(shù)據(jù)如何在多IDC的KV之間進(jìn)行同步? 例如業(yè)務(wù)在上海寫(xiě)入一個(gè)特征,希望在深圳也能讀到這個(gè)特征。這里按特征類型進(jìn)行分類處理:
-
離線特征數(shù)據(jù)同步:離線特征數(shù)據(jù)上線流程是通過(guò)離線計(jì)算在文件系統(tǒng)中生成一個(gè)文件,然后將文件導(dǎo)入到離線KV, 而離線KV支持多個(gè)IDC共享同一份數(shù)據(jù),數(shù)據(jù)文件只需要生成一份,所有IDC的離線KV拉取同一個(gè)文件,新數(shù)據(jù)最終能同步到所有IDC上。 -
實(shí)時(shí)特征數(shù)據(jù)同步:實(shí)時(shí)特征的同步采用微信自研的分布式隊(duì)列組件,該組件提供了高可靠、高可用、高吞吐、低延時(shí)的數(shù)據(jù)消息隊(duì)列服務(wù)。數(shù)據(jù)倉(cāng)庫(kù)寫(xiě)接入模塊在寫(xiě)入數(shù)據(jù)時(shí),同時(shí)將數(shù)據(jù)寫(xiě)一份到分布式隊(duì)列,使用隊(duì)列做跨IDC的數(shù)據(jù)同步,在其他IDC啟動(dòng)進(jìn)程消費(fèi)隊(duì)列中的數(shù)據(jù),寫(xiě)入到本IDC的實(shí)時(shí)KV,實(shí)現(xiàn)實(shí)時(shí)特征數(shù)據(jù)的同步。

異步寫(xiě)和替代分布式隊(duì)列
異步寫(xiě)入:前一個(gè)版本中實(shí)時(shí)特征是同步寫(xiě)入,影響業(yè)務(wù)的性能,業(yè)務(wù)希望是異步寫(xiě)入。
替代分布式隊(duì)列:前一個(gè)版本中分布式隊(duì)列采用的是公共的集群,眾多業(yè)務(wù)使用,出現(xiàn)過(guò)數(shù)據(jù)倉(cāng)庫(kù)受干擾影響特征數(shù)據(jù)同步。
為此在數(shù)據(jù)倉(cāng)庫(kù)中新增一個(gè)異步消息隊(duì)列模塊寫(xiě)MQ,用于異步寫(xiě)入。和分布式隊(duì)列相比MQ更輕量,而且MQ我們可以自行維護(hù), 更可控,所以新架構(gòu)中通過(guò)MQ實(shí)現(xiàn)實(shí)時(shí)特征的多IDC數(shù)據(jù)的同步,替代了分布式隊(duì)列,保證數(shù)據(jù)同步不受其他業(yè)務(wù)影響。

運(yùn)營(yíng)系統(tǒng)
前面3個(gè)版本解決了特征存儲(chǔ)分散、讀寫(xiě)接口不統(tǒng)一、數(shù)據(jù)同步、讀寫(xiě)性能問(wèn)題,但是特征的上線依然采用的是配置發(fā)布上線的方式,效率依然低效,更重要的是特征缺乏統(tǒng)一的管理,共享困難,難以滿足業(yè)務(wù)的需求,業(yè)務(wù)常常也有各種疑問(wèn):

為此數(shù)據(jù)倉(cāng)庫(kù)新增運(yùn)營(yíng)系統(tǒng)模塊,實(shí)現(xiàn)了特征申請(qǐng)、特征上線、特征管理&分析、特征值查詢/修改、特征數(shù)據(jù)質(zhì)量管理等功能

-
特征申請(qǐng):用戶不再需要手動(dòng)的修改配置文件來(lái)新增特征,可直接通過(guò)WEB頁(yè)面申請(qǐng),填寫(xiě)必要的特征信息,通過(guò)通用審批系統(tǒng)進(jìn)行審批。 -
特征上線:用戶不在需要手動(dòng)的發(fā)布配置上線特征,無(wú)論是新增的實(shí)時(shí)特征還是離線特征,審批通過(guò)后將自動(dòng)化的上線,提升體驗(yàn)和效率。 -
特征管理:特征管理支持對(duì)特征meta信息進(jìn)行查詢和修改,包括特征所屬的業(yè)務(wù)分類(索引)、特征類型、特征負(fù)責(zé)人、給特征打tag等等,業(yè)務(wù)可以方便的查詢需要特征信息,避免重復(fù)的計(jì)算,方便各業(yè)務(wù)共享特征。

-
特征分析:追蹤特征的原始數(shù)據(jù)來(lái)源、計(jì)算過(guò)程、數(shù)據(jù)流路徑、最終的存儲(chǔ)信息等等, 可以追蹤特征完整生產(chǎn)流程。

-
特征值查詢&修改:運(yùn)營(yíng)系統(tǒng)支持在WEB頁(yè)面查詢特征值和修改特征值。

-
特征數(shù)據(jù)質(zhì)量管理:保障數(shù)據(jù)質(zhì)量, 下一章節(jié)詳細(xì)講述。
數(shù)據(jù)質(zhì)量保障
數(shù)據(jù)倉(cāng)庫(kù)主要通過(guò)兩個(gè)方面來(lái)保障數(shù)據(jù)質(zhì)量:特征的標(biāo)準(zhǔn)化和數(shù)據(jù)空跑系統(tǒng)。
特征標(biāo)準(zhǔn)化
特征的標(biāo)準(zhǔn)化是保證數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)質(zhì)量的手段之一,標(biāo)準(zhǔn)化是指對(duì)數(shù)據(jù)倉(cāng)庫(kù)中的特征進(jìn)行規(guī)范化處理,使得特征能夠達(dá)到一致性、可重復(fù)性等標(biāo)準(zhǔn),從而提高數(shù)據(jù)的可靠性和準(zhǔn)確性。
對(duì)于新增實(shí)時(shí)/離線特征, 數(shù)據(jù)倉(cāng)庫(kù)制定了的特征規(guī)范文檔,并按規(guī)范文檔的要求,特征申請(qǐng)/管理頁(yè)面必須正確的補(bǔ)充完整特征信息,如特征類型、業(yè)務(wù)分類等等,后臺(tái)對(duì)每個(gè)特征都會(huì)進(jìn)行校驗(yàn),不符合規(guī)范的特征無(wú)法錄入。
另外數(shù)據(jù)倉(cāng)庫(kù)還提供了接入編程指導(dǎo)文檔,并給出完整的C++編程實(shí)例,致力于提供標(biāo)準(zhǔn)化的編程最佳實(shí)踐。
數(shù)據(jù)空跑系統(tǒng)
離線特征數(shù)據(jù)來(lái)自于業(yè)務(wù)離線計(jì)算在分布式文件系統(tǒng)中生成數(shù)據(jù)文件,然后將文件上線。歷史上曾因?yàn)樯傻臄?shù)據(jù)文件存在錯(cuò)誤,存在錯(cuò)誤的文件數(shù)據(jù)被上線到離線KV,導(dǎo)致策略出現(xiàn)故障。為了保障離線特征數(shù)據(jù)的質(zhì)量,數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)了一套空跑系統(tǒng),在上線前對(duì)數(shù)據(jù)文件進(jìn)行檢查,避免存在問(wèn)題的數(shù)據(jù)上線到現(xiàn)網(wǎng)。

數(shù)據(jù)空跑架構(gòu)如上圖,離線特征數(shù)據(jù)的上線也納入到了運(yùn)營(yíng)系統(tǒng)的管理中,整個(gè)的空跑流程如下:
-
業(yè)務(wù)發(fā)起數(shù)據(jù)上線,運(yùn)營(yíng)系統(tǒng)將數(shù)據(jù)上線到備用的離線KV表,也就是用于空跑的KV表。
-
打開(kāi)空跑開(kāi)關(guān),按一定的比率采樣現(xiàn)網(wǎng)的讀請(qǐng)求,旁路到新增的讀MQ模塊,該模塊讀空跑表的數(shù)據(jù),和當(dāng)前現(xiàn)網(wǎng)做對(duì)比, 分析差異率。這里采用的動(dòng)態(tài)采樣, 如果表的PV高則采樣率低,PV低則采樣率高或者100%采樣,避免請(qǐng)求量小的表無(wú)法進(jìn)行空跑,而請(qǐng)求量大的表空跑流量太高又消耗太多資源。
-
計(jì)算和分析差異率,如果差異率超過(guò)了閾值,就自動(dòng)的攔截?cái)?shù)據(jù)上線,如果閾值檢查通過(guò),就繼續(xù)后續(xù)的檢查流程,最終自動(dòng)上線數(shù)據(jù)文件到現(xiàn)網(wǎng)離線KV。
差異率示例會(huì)如下圖:詳細(xì)的展示了具體的差異細(xì)節(jié):

完整的數(shù)據(jù)上線流程如下圖,空跑差異檢測(cè)通過(guò)后,需要檢查數(shù)據(jù)文件完整性,防止文件被修改或者覆蓋,最后數(shù)據(jù)再上線到現(xiàn)網(wǎng)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),通知業(yè)務(wù)數(shù)據(jù)上線成功。如果中間任何一個(gè)步驟出錯(cuò)將告警給業(yè)務(wù)負(fù)責(zé)人,提醒人工介入處理。

總結(jié)
數(shù)據(jù)倉(cāng)庫(kù)將分散的特征全部集中統(tǒng)一管理,提供統(tǒng)一的訪問(wèn)接口,標(biāo)準(zhǔn)化每個(gè)一個(gè)特征,建立了統(tǒng)一的規(guī)范,并且在此基礎(chǔ)保障了數(shù)據(jù)的質(zhì)量,夯實(shí)了整個(gè)安全業(yè)務(wù)的基礎(chǔ),助力一站式的數(shù)據(jù)-策略開(kāi)發(fā),極大的提升了安全對(duì)抗的效率,實(shí)現(xiàn)了數(shù)據(jù)價(jià)值的最大化。
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-604152.html
作者:remy文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604152.html
到了這里,關(guān)于微信萬(wàn)億數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!