導(dǎo)讀:
企業(yè)數(shù)據(jù)孤島、共享數(shù)據(jù)管理、數(shù)據(jù)服務(wù)性能面臨挑戰(zhàn),高可用的主數(shù)據(jù)管理服務(wù)越來(lái)越被企業(yè)所重視,本文內(nèi)容是基于百度智能小程序主數(shù)據(jù)實(shí)戰(zhàn)經(jīng)驗(yàn)的一些總結(jié),從解決百度智能小程序核心業(yè)務(wù)數(shù)據(jù)模型的質(zhì)量和共享協(xié)同入手,重新定義業(yè)務(wù)數(shù)據(jù)模型邊界,提供企業(yè)高可用的數(shù)據(jù)管理服務(wù)的演進(jìn)過(guò)程,希望幫助大家在主數(shù)據(jù)應(yīng)用的道路上獲得更多幫助。
全文5262字,預(yù)計(jì)閱讀時(shí)間16分鐘
主數(shù)據(jù)(Master Data 簡(jiǎn)稱MD), 一般指系統(tǒng)間共享數(shù)據(jù)(如客戶、賬戶和組織等有共享場(chǎng)景的數(shù)據(jù)內(nèi)容),所以其核心的價(jià)值就是解決數(shù)據(jù)的共享與一致性的問(wèn)題。
根據(jù)主數(shù)據(jù)管理實(shí)施的復(fù)雜程度,參照J(rèn)ill Dyche, Evan Levy的觀點(diǎn)大體可以把主數(shù)據(jù)管理可以分為六個(gè)層次,從低到高反映了主數(shù)據(jù)管理(MDM)的不同成熟度。下面我們簡(jiǎn)單介紹一下這六個(gè)層次,由于對(duì)于一般企業(yè)通常主要應(yīng)用Level3,所以下面只針對(duì)Level0到Level3進(jìn)行展現(xiàn)介紹,有興趣的同學(xué)可以閱讀主數(shù)據(jù)百科:
(https://baike.baidu.com/item/%E4%B8%BB%E6%95%B0%E6%8D%AE/7310399)
。(復(fù)制鏈接至瀏覽器打開(kāi))
Level 0 :沒(méi)有實(shí)施任何主數(shù)據(jù)管理(MDM)
在Level 0的情況下,意味著企業(yè)的各個(gè)應(yīng)用之間沒(méi)有任何的數(shù)據(jù)共享,整個(gè)企業(yè)沒(méi)有數(shù)據(jù)定義元素存在。由各個(gè)系統(tǒng)自己管理自己的數(shù)據(jù),共享使用情況是采用網(wǎng)狀交換的方式進(jìn)行。
Level 1 :提供列表
提供列表,我們可理解采用了為數(shù)據(jù)執(zhí)行登記制度,采用手工的方式進(jìn)行數(shù)據(jù)信息的登記,包括數(shù)據(jù)的添加,刪除,更新以及沖突處理。這種模式已經(jīng)有了數(shù)據(jù)統(tǒng)一管理,維護(hù)的動(dòng)機(jī),只是模式上成本極高, 高度依賴人工管理的流程也容易發(fā)生錯(cuò)誤。
Level 2 :同等訪問(wèn)(通過(guò)接口的方式,各個(gè)系統(tǒng)與主數(shù)據(jù)主機(jī)之間直接互聯(lián))
相比提供列表, 引入對(duì)主數(shù)據(jù)的統(tǒng)一登記管理的思路。通過(guò)建立數(shù)據(jù)標(biāo)準(zhǔn)和定義并通過(guò)存儲(chǔ)在中央知識(shí)庫(kù)(Central Repository)中共享訪問(wèn),為各個(gè)系統(tǒng)間共享使用數(shù)據(jù)提供了元數(shù)據(jù)定義的支持。雖然存儲(chǔ)的數(shù)據(jù)還是按照各個(gè)系統(tǒng)分開(kāi)存儲(chǔ)的,但是由于有了統(tǒng)一的描述定義,以及信息的同步自動(dòng)更新,在管控能力與成本降低上有了極大的改進(jìn)。但由于本質(zhì)還是分散存儲(chǔ), 管控的成本還是非常高。
Level 3 :集中總線處理
集中總線處理打破了各個(gè)獨(dú)立應(yīng)用的組織邊界,使用各個(gè)系統(tǒng)都能接受的數(shù)據(jù)標(biāo)準(zhǔn)統(tǒng)一建立和維護(hù)主數(shù)據(jù)。集中處理意味著為MDM構(gòu)建了一個(gè)通用的、基于目標(biāo)構(gòu)建的平臺(tái)。這種方案上對(duì)主數(shù)據(jù)有了非常強(qiáng)的約束與保障,當(dāng)然引入的建設(shè)成本與難度也會(huì)相應(yīng)的提高,特別是主數(shù)據(jù)的性能、穩(wěn)定性、事務(wù)的保障等。
為何需要主數(shù)據(jù)?要回答這個(gè)問(wèn)題,我們需要先來(lái)分析一下在業(yè)務(wù)系統(tǒng)中遇到的問(wèn)題,我們把問(wèn)題大致可以總結(jié)為以下四類:
數(shù)據(jù)散亂且冗余浪費(fèi)
企業(yè)內(nèi)的每一個(gè)系統(tǒng)、應(yīng)用、甚至業(yè)務(wù)部門都會(huì)建設(shè)自己版本的核心業(yè)務(wù)實(shí)體數(shù)據(jù)。最好的例子就是客戶數(shù)據(jù)的建設(shè),不同的部門都會(huì)因?yàn)樽约禾赜械男枨蠓謩e建設(shè)客戶數(shù)據(jù),例如合同部門的系統(tǒng)會(huì)關(guān)注客戶與合同相關(guān)信息;采購(gòu)部門則會(huì)關(guān)注客戶的產(chǎn)品,售后等內(nèi)容。但對(duì)于客戶的主要屬性如客戶名稱和地址信息在企業(yè)內(nèi)各個(gè)角落都被重復(fù)的記錄著。這導(dǎo)致了一個(gè)很嚴(yán)重的問(wèn)題(除了存儲(chǔ)成本之外),數(shù)據(jù)冗余導(dǎo)致數(shù)據(jù)質(zhì)量過(guò)差,對(duì)企業(yè)來(lái)講也無(wú)法更全面去認(rèn)識(shí)一個(gè)完整的客戶屬性。
數(shù)據(jù)不一致,校準(zhǔn)難
事實(shí)上由于企業(yè)內(nèi)數(shù)據(jù)的不一致,導(dǎo)致企業(yè)大量的資源浪費(fèi)的情況時(shí)常發(fā)生,這里浪費(fèi)的資源不僅包括時(shí)間、金錢和人力資源等的浪費(fèi),也包括對(duì)客戶體驗(yàn)的影響, 對(duì)業(yè)務(wù)推進(jìn)工作的影響等。
業(yè)務(wù)協(xié)同低效
數(shù)據(jù)散亂情況一旦發(fā)生,伴隨出現(xiàn)的就是低生產(chǎn)力,低效的業(yè)務(wù)管理,無(wú)法統(tǒng)一的客戶體驗(yàn),客戶不滿意,浪費(fèi)市場(chǎng)部門的努力等。
變化導(dǎo)致數(shù)據(jù)無(wú)法沉淀
在企業(yè)中,業(yè)務(wù)的變化導(dǎo)致項(xiàng)目的啟動(dòng)與中止是比較常見(jiàn)的情況, 這種高頻的變化中,最不應(yīng)該被流失就是數(shù)據(jù),也就是業(yè)務(wù)的沉淀,但沒(méi)有主數(shù)據(jù)業(yè)務(wù)的應(yīng)用,數(shù)據(jù)流失就會(huì)被當(dāng)作很理所當(dāng)然的情況。
總結(jié)分析上述問(wèn)題,可以看到這些問(wèn)題的發(fā)生,最主要的原因就是沒(méi)有一個(gè)自頂向下的數(shù)據(jù)治理規(guī)范所導(dǎo)致的。主數(shù)據(jù)的產(chǎn)生本質(zhì)也是需要企業(yè)有一個(gè)自上而下的數(shù)據(jù)治理戰(zhàn)略來(lái)配合才能高效推動(dòng),企業(yè)應(yīng)該建立一個(gè)全企業(yè)范圍的主數(shù)據(jù)管理,真正去解決主數(shù)據(jù)問(wèn)題,而不應(yīng)該為了逃避建立企業(yè)主數(shù)據(jù)的成本問(wèn)題而在原有系統(tǒng)上修修改改。
(https://wenku.baidu.com/view/b7cb9e4e2e3f5727a5e962fa.html?re=view)
。(復(fù)制鏈接至瀏覽器打開(kāi))
主數(shù)據(jù)建設(shè)遇到各種問(wèn)題和挑戰(zhàn),主要包含以下幾點(diǎn):
隨著百度小程序業(yè)務(wù)增長(zhǎng),業(yè)務(wù)模塊務(wù)數(shù)量激增,都需要對(duì)數(shù)據(jù)有變更與檢索的需求。
各業(yè)務(wù)服務(wù)模塊SLA標(biāo)準(zhǔn)不統(tǒng)一,很難提供一個(gè)高可用服務(wù),滿足業(yè)務(wù)需求。
網(wǎng)狀式的數(shù)據(jù)存儲(chǔ),造成數(shù)據(jù)冗余、數(shù)據(jù)一致性、數(shù)據(jù)安全、數(shù)據(jù)孤島等問(wèn)題。
對(duì)數(shù)據(jù)認(rèn)知存在差異,多系統(tǒng)、跨產(chǎn)品、跨部門之間數(shù)據(jù)交互困難,無(wú)法做數(shù)據(jù)統(tǒng)一管理。
數(shù)據(jù)邊界劃分,哪些數(shù)據(jù)要納入主數(shù)據(jù)?
數(shù)據(jù)模型變更,如何高效管理數(shù)據(jù)模型?如何高效滿足業(yè)務(wù)快速更新迭代?
如何保證數(shù)據(jù)一致性,正確性,以及服務(wù)穩(wěn)定性?
如何保證數(shù)據(jù)共享實(shí)時(shí)性,準(zhǔn)確性?
主數(shù)據(jù)管理服務(wù)本身也是一個(gè)不斷優(yōu)化和演進(jìn)的服務(wù),在實(shí)戰(zhàn)過(guò)程中不斷探索,理論指導(dǎo)實(shí)踐,總結(jié)出一套符合百度智能小程序業(yè)務(wù)的方法論,我們首先從分析階段開(kāi)始。
目標(biāo)從需求分析出發(fā),將問(wèn)題映射到問(wèn)題空間,對(duì)需求進(jìn)行梳理抽象,理解問(wèn)題和需求背景,進(jìn)行數(shù)據(jù)和流程分析,分析業(yè)務(wù)領(lǐng)域模型,采用數(shù)據(jù)流圖(Data Flow Diagram):簡(jiǎn)稱DFD,以圖形方式來(lái)表達(dá)系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過(guò)程。在確定了全景事件流之后,需要鑒別出領(lǐng)域邊界,通常采用事件風(fēng)暴方法,進(jìn)行領(lǐng)域分析建模。
以百度小程序創(chuàng)建使用流程為例:百度小程序創(chuàng)建使用業(yè)務(wù)流程分析
百度小程序創(chuàng)建使用流程,事件風(fēng)暴分析結(jié)果:
將問(wèn)題空間映射到解決方案空間,抽象業(yè)務(wù)領(lǐng)域,領(lǐng)域數(shù)據(jù)建模,劃分服務(wù)邊界,架構(gòu)設(shè)計(jì)與實(shí)現(xiàn),設(shè)計(jì)階段需要根據(jù)需求分析,畫(huà)出用例圖、狀態(tài)圖、實(shí)體類圖、序列圖、ER圖確保用例沒(méi)有問(wèn)題,參考“主數(shù)據(jù)”設(shè)計(jì)原則,劃分服務(wù)邊界,將數(shù)據(jù)模型以“切蛋糕”的方式,劃分到不同的子服務(wù)域以及主服務(wù)域中。
參考數(shù)據(jù)層次劃分模型理論,提取關(guān)鍵概念作為子域,主要?jiǎng)澐至丝蛻粲?、產(chǎn)品域、用戶域以及基礎(chǔ)數(shù)據(jù)域4塊,客戶域圍繞客戶進(jìn)行建模、產(chǎn)品域圍繞小程序進(jìn)行建模、用戶域以開(kāi)發(fā)者模型為主,基礎(chǔ)數(shù)據(jù)域提供元數(shù)據(jù)碼表。具體如下:
產(chǎn)品域:小程序、包、類目、等級(jí)、權(quán)益等業(yè)務(wù)的核心數(shù)據(jù)模型
基礎(chǔ)數(shù)據(jù)域:小程序類目、宿主等基礎(chǔ)數(shù)據(jù)模型
用戶域:用戶、角色、權(quán)限等用戶域
客戶域:主體、資質(zhì)等客戶域
小程序主數(shù)據(jù)旨在解決多系統(tǒng)中共享數(shù)據(jù)問(wèn)題,提煉小程序業(yè)務(wù)核心數(shù)據(jù)模型,作為基礎(chǔ)服務(wù),為主數(shù)據(jù)范圍內(nèi)的核心數(shù)據(jù)模型提供一套數(shù)據(jù)治理的解決方案,包括為各個(gè)業(yè)務(wù)端提供核心數(shù)據(jù)的存儲(chǔ)、檢索、分發(fā)等服務(wù)。
先來(lái)看一張圖,下面這張圖就是主數(shù)據(jù)服務(wù)部署架構(gòu):
消除數(shù)據(jù)冗余;保證數(shù)據(jù)一致性、安全性
統(tǒng)一數(shù)據(jù)認(rèn)知
統(tǒng)一數(shù)據(jù)管理,提供高可用服務(wù)
數(shù)據(jù)共享,提高多系統(tǒng)、跨產(chǎn)品、跨產(chǎn)品、跨部門之間數(shù)據(jù)協(xié)同力,支持?jǐn)?shù)據(jù)多場(chǎng)景、多維度分發(fā)
數(shù)據(jù)傳輸服務(wù)概念介紹,數(shù)據(jù)傳輸服務(wù)(Data Transmission Service),支持關(guān)系型數(shù)據(jù)庫(kù)、NoSQL、大數(shù)據(jù)(OLAP)等數(shù)據(jù)源間的數(shù)據(jù)傳輸。它是一種集數(shù)據(jù)遷移、數(shù)據(jù)實(shí)時(shí)同步和數(shù)據(jù)訂閱于一體的數(shù)據(jù)傳輸服務(wù)。數(shù)據(jù)傳輸在公有云、內(nèi)部私有云、Paas私有云均有廣泛的應(yīng)用場(chǎng)景,為用戶打造安全、易擴(kuò)展、高可用的數(shù)據(jù)架構(gòu)。
事務(wù)/補(bǔ)償使用場(chǎng)景分析:多表關(guān)聯(lián)存儲(chǔ)操作,主從延遲敏感場(chǎng)景強(qiáng)制讀主庫(kù),關(guān)鍵異常數(shù)據(jù)定時(shí)補(bǔ)償/實(shí)時(shí)重試。
系統(tǒng)開(kāi)發(fā)過(guò)程中,需重點(diǎn)關(guān)注大事務(wù)提交,大事務(wù)會(huì)導(dǎo)致主從延遲、IO負(fù)載、數(shù)據(jù)庫(kù)性能下降等,需合理評(píng)估事務(wù)操作數(shù)據(jù)量級(jí),大數(shù)據(jù)批量操作原則:
事務(wù)大小要合理
數(shù)據(jù)量可控
接口耗時(shí)可控
對(duì)于insert/update/delete操作,每次處理100~500條,執(zhí)行commit
對(duì)于select操作,每次查詢100~500條
推薦:在業(yè)務(wù)場(chǎng)景可接受范圍內(nèi),分批成小事務(wù)操作
服務(wù)高性能主要實(shí)現(xiàn)方式,緩存、數(shù)據(jù)庫(kù)優(yōu)化、數(shù)據(jù)同步解耦等,以主數(shù)據(jù)服務(wù)為例,主要使用提高服務(wù)性能手段如下:
緩存方面:對(duì)于多讀少寫(xiě)場(chǎng)景,添加多級(jí)緩存【分布式緩存、本地緩存等】減輕數(shù)據(jù)庫(kù)壓力,保證服務(wù)橫向擴(kuò)展。
數(shù)據(jù)庫(kù)優(yōu)化方面:從幾個(gè)方面入手,不合理的大批量更新寫(xiě)入,導(dǎo)致數(shù)據(jù)庫(kù)主從延遲問(wèn)題;數(shù)據(jù)庫(kù)深度分頁(yè)問(wèn)題;合理使用子查詢優(yōu)化;索引排序問(wèn)題。
數(shù)據(jù)庫(kù)索引,缺乏合適的索引,一個(gè)稍大的表全表掃描,稍微來(lái)些并發(fā),就可能導(dǎo)致DB響應(yīng)時(shí)間急劇飆升,甚至導(dǎo)致DB性能的雪崩。
檢索方面:對(duì)于多表檢索、模糊檢索等場(chǎng)景,使用Es特性來(lái)滿足高性能檢索。核心關(guān)鍵點(diǎn)保證數(shù)據(jù)庫(kù)到Es同步時(shí)效性以及準(zhǔn)確性。
主數(shù)據(jù)是各個(gè)業(yè)務(wù)端對(duì)于核心數(shù)據(jù)操作的唯一服務(wù),必須保證服務(wù)的高可用性,主數(shù)據(jù)實(shí)時(shí)服務(wù)采用微服務(wù)架構(gòu),利用百度資源虛擬化能力,實(shí)現(xiàn)服務(wù)治理、統(tǒng)一配置管理、分布式鏈路跟蹤等功能,支持請(qǐng)求負(fù)載均衡、重試,服務(wù)自我保護(hù)(限流、熔斷、降級(jí)等),并實(shí)現(xiàn)了無(wú)人值守的機(jī)器故障自愈,充分保障服務(wù)可用性。
設(shè)計(jì)把關(guān):因主數(shù)據(jù)的升級(jí),影響面比較廣,建議有專業(yè)化的獨(dú)立團(tuán)隊(duì)進(jìn)行把關(guān),確認(rèn)設(shè)計(jì)的質(zhì)量。
開(kāi)發(fā)規(guī)范:注重編碼質(zhì)量,保證編碼規(guī)范統(tǒng)一,定期組織代碼 review,提升代碼可讀性,維護(hù)性。
測(cè)試驗(yàn)收:除了自測(cè),單測(cè)等工作外,主數(shù)據(jù)還需要更完善的系統(tǒng)級(jí)測(cè)試, 能實(shí)現(xiàn)多方接入業(yè)務(wù)的聯(lián)動(dòng)測(cè)試回歸。
上線:小流量, 灰度,自動(dòng)化回退、封禁管理等能力,上線確認(rèn)機(jī)制。
運(yùn)維:應(yīng)用生命周期管理,用戶權(quán)限管理,可觀測(cè)監(jiān)控能力, 實(shí)時(shí)監(jiān)控與高效問(wèn)題定位。
主數(shù)據(jù)實(shí)時(shí)變更數(shù)據(jù)的同步方案,基于binlog監(jiān)聽(tīng),多MQ并發(fā)寫(xiě)入支持橫向擴(kuò)展,保證binlog寫(xiě)入速度;統(tǒng)一數(shù)據(jù)接收分發(fā)服務(wù),基于數(shù)據(jù)版本控制,支持服務(wù)橫向擴(kuò)展,保證數(shù)據(jù)消費(fèi),分發(fā)時(shí)效性;數(shù)據(jù)監(jiān)聽(tīng),補(bǔ)償服務(wù)保證數(shù)據(jù)共享可靠性。
下面這張圖就是主數(shù)據(jù)服務(wù)數(shù)據(jù)同步分發(fā)架構(gòu)模型:
總結(jié):百度小程序團(tuán)隊(duì)早在2019年就完成主數(shù)據(jù)服務(wù)上線,基于百度小程序核心數(shù)據(jù)模型,完成數(shù)百?gòu)垟?shù)據(jù)模型沉淀,最高支持9000+QPS,SLA全年可用性4個(gè)9以上,覆蓋百度10+核心業(yè)務(wù)產(chǎn)品線接入,保障百度智能小程序整體服務(wù)可用性達(dá)到4個(gè)9以上。數(shù)據(jù)一致性達(dá)到4個(gè)9,通過(guò)一致性監(jiān)控補(bǔ)償,保證數(shù)據(jù)最終一致性。
3.1 主數(shù)據(jù)是否還有更多可適用場(chǎng)景?
主數(shù)據(jù)應(yīng)用除了服務(wù)實(shí)時(shí)的在線業(yè)務(wù)系統(tǒng)外,還有很多場(chǎng)景可以應(yīng)用。例如 基于主數(shù)據(jù)做 數(shù)據(jù)資產(chǎn)的審計(jì)與監(jiān)控分析, 將主數(shù)據(jù)作為重要的數(shù)據(jù)資產(chǎn),對(duì)其建設(shè)、使用等情況進(jìn)行全面的監(jiān)控,同時(shí)對(duì)于主數(shù)據(jù)的更新、變化趨勢(shì),乃至關(guān)聯(lián)數(shù)據(jù)進(jìn)行分析,可以一定程度上改善決策支撐,以及發(fā)現(xiàn)業(yè)務(wù)操作上的問(wèn)題,進(jìn)行實(shí)時(shí)審計(jì),促進(jìn)管理體系的不斷完善和業(yè)務(wù)發(fā)展不斷提升。又例如基于主數(shù)據(jù)承接業(yè)務(wù)畫(huà)像建設(shè)工作,通過(guò)主數(shù)據(jù)本身的數(shù)據(jù)高實(shí)效與正確性的保障,加上主數(shù)據(jù)比較完善的模型設(shè)計(jì), 可以極大的節(jié)省業(yè)務(wù)畫(huà)像建設(shè)的成本。
3.2如何提升團(tuán)隊(duì)的主數(shù)據(jù)工程能力?
主數(shù)據(jù)(MDM系統(tǒng))的建設(shè)是打造數(shù)據(jù)思維能力的基礎(chǔ)工作,是一個(gè)需要不斷完善進(jìn)步的過(guò)程, 建設(shè)過(guò)程中涉及所有部門、每一方業(yè)務(wù)系統(tǒng)設(shè)計(jì)者的協(xié)同與配合。以下也整理了一下相關(guān)的總結(jié),希望可以幫助大家提升主數(shù)據(jù)的思維能力:
加強(qiáng)大家對(duì)主數(shù)據(jù)的學(xué)習(xí)與認(rèn)識(shí),最好在機(jī)制上進(jìn)行對(duì)齊。建議有強(qiáng)制要求各業(yè)務(wù)方參與建設(shè)。
構(gòu)建單獨(dú)的主數(shù)據(jù)建設(shè)團(tuán)隊(duì),以中立的視角來(lái)承接,保障建設(shè)的合理性,規(guī)范化與專業(yè)化。
加強(qiáng)模型設(shè)計(jì)與架構(gòu)設(shè)計(jì)的評(píng)審工作,確保執(zhí)行過(guò)程的效果,同時(shí)加強(qiáng)總結(jié),幫助大家的學(xué)習(xí),提升能力。
深入剖析全鏈路灰度技術(shù)內(nèi)幕
愛(ài)奇藝基礎(chǔ)數(shù)據(jù)平臺(tái)演進(jìn)
Go語(yǔ)言重新開(kāi)始,Go Modules的前世今生與基本使用
大數(shù)據(jù)平臺(tái)架構(gòu)設(shè)計(jì)探究
冪等設(shè)計(jì)詳解
技術(shù)原創(chuàng)及架構(gòu)實(shí)踐文章,歡迎通過(guò)公眾號(hào)菜單「聯(lián)系我們」進(jìn)行投稿。
高可用架構(gòu)
改變互聯(lián)網(wǎng)的構(gòu)建方式
]]>