新聞中心
業(yè)務(wù)背景
今天給大家分享一下我們?cè)诠纠?,面向多個(gè)業(yè)務(wù)團(tuán)隊(duì)設(shè)計(jì)的數(shù)據(jù)中心架構(gòu),他是如何一步一步的從多業(yè)務(wù)團(tuán)隊(duì)數(shù)據(jù)現(xiàn)狀分析開始,然后逐步的演化設(shè)計(jì)出一個(gè)數(shù)據(jù)中心架構(gòu)來的,希望能幫助大家對(duì)現(xiàn)在很流行的數(shù)據(jù)中心這個(gè)概念構(gòu)建起來系統(tǒng)化的認(rèn)知。

成都創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需網(wǎng)站策劃,網(wǎng)站開發(fā)公司,從2013年成立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。
首先跟大家說一下在沒有數(shù)據(jù)中心的時(shí)候,公司里的各個(gè)業(yè)務(wù)團(tuán)隊(duì)是什么樣的一個(gè)狀況,簡單來說,就是不同的業(yè)務(wù)團(tuán)隊(duì)有有研發(fā)自己的業(yè)務(wù)系統(tǒng),有自己獨(dú)立的數(shù)據(jù)存儲(chǔ),平時(shí)就是自己的系統(tǒng)訪問自己的數(shù)據(jù)就夠了。
如下圖 1 所示:
沒引入多業(yè)務(wù)數(shù)據(jù)中心時(shí)的痛點(diǎn)
但是接著隨著你的系統(tǒng)逐步演進(jìn),需求越來越多,越來越復(fù)雜,逐步的會(huì)出現(xiàn)每個(gè)系統(tǒng)都需要訪問其他系統(tǒng)的數(shù)據(jù)的情況。
此時(shí)就會(huì)出現(xiàn)你每個(gè)系統(tǒng)必須開一些數(shù)據(jù)接口,讓別的系統(tǒng)來調(diào)用你的接口訪問你的數(shù)據(jù),同時(shí)你自己也可能要訪問別人的接口去獲取別人的數(shù)據(jù)。
如下圖 2 所示:
大家看到上圖是什么感覺?是不是覺得很懵逼?因?yàn)閷?shí)際上隨著系統(tǒng)慢慢演化,可能會(huì)搞成系統(tǒng) A 開的接口被系統(tǒng) B 和 C 調(diào)用,系統(tǒng) B 開的接口被系統(tǒng) A 和 C 調(diào)用,系統(tǒng) C 開的接口被系統(tǒng) A 和 B 調(diào)用。
這個(gè)時(shí)候就會(huì)出現(xiàn)非常尷尬的場景,就是混亂,沒錯(cuò),我敢打賭,你盯著上面的圖看 10s,應(yīng)該還是很懵逼,沒什么頭緒。
沒錯(cuò),所以其實(shí)這就是最大的痛點(diǎn),各個(gè)業(yè)務(wù)系統(tǒng)其實(shí)都是一個(gè)數(shù)據(jù)孤島,也就是大家都只能訪問到自己的數(shù)據(jù),然后別人要訪問你的數(shù)據(jù),必須通過你的接口來訪問,最后導(dǎo)致 n 個(gè)業(yè)務(wù)系統(tǒng)之間錯(cuò)綜復(fù)雜的調(diào)用關(guān)系,進(jìn)而導(dǎo)致系統(tǒng)不好維護(hù),運(yùn)維困難。
數(shù)據(jù)中心的架構(gòu)設(shè)計(jì)思想
所以這個(gè)問題,我們?cè)O(shè)計(jì)了一個(gè)面向多業(yè)務(wù)團(tuán)隊(duì)的數(shù)據(jù)中心,這個(gè)數(shù)據(jù)中心的架構(gòu)設(shè)計(jì)思想,就是通過各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)存儲(chǔ)的變更監(jiān)聽。
比如針對(duì) MySQL 數(shù)據(jù)庫就可以部署 Canal 來監(jiān)聽他的數(shù)據(jù)變更,然后把各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)都拉取到數(shù)據(jù)中臺(tái)里統(tǒng)一存儲(chǔ)。
如下圖 3 所示:
接著數(shù)據(jù)中心可以提供兩種數(shù)據(jù)訪問模式,一個(gè)是主動(dòng)查詢接口,一個(gè)是被動(dòng)監(jiān)聽 MQ 通知。
也就是說,對(duì)于數(shù)據(jù)中心來說,你各個(gè)業(yè)務(wù)系統(tǒng)都可以調(diào)用數(shù)據(jù)中心的接口,直接獲取你想要的其他業(yè)務(wù)系統(tǒng)的數(shù)據(jù),同時(shí)數(shù)據(jù)中心也會(huì)把各個(gè)業(yè)務(wù)數(shù)據(jù)的變更通知發(fā)送到 MQ,你也可以訂閱你感興趣的業(yè)務(wù)數(shù)據(jù)變更通知。
如下圖 4 所示:
大家看到上面的架構(gòu)設(shè)計(jì)圖,是不是瞬間感覺世界一下子就清凈了?
沒錯(cuò),其實(shí)在互聯(lián)網(wǎng)公司里,對(duì)于多業(yè)務(wù)系統(tǒng)錯(cuò)綜復(fù)雜的互相調(diào)用接口訪問對(duì)方數(shù)據(jù),往往會(huì)抽出一個(gè)統(tǒng)一的公共的數(shù)據(jù)中心來,讓各個(gè)業(yè)務(wù)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)共享,這樣就可以大幅度的提升我們系統(tǒng)整體架構(gòu)的整潔性了。
數(shù)據(jù)中心的數(shù)據(jù)存儲(chǔ)架構(gòu)設(shè)計(jì)
那么再來給大家講一下數(shù)據(jù)中心架構(gòu)設(shè)計(jì)的另外一個(gè)關(guān)鍵點(diǎn),就是他的數(shù)據(jù)存儲(chǔ)架構(gòu)設(shè)計(jì)。
大家可以想一下,雖然我們的各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)存儲(chǔ)基本都是以 MySQL 為主的,但是我們的數(shù)據(jù)中心的存儲(chǔ)架構(gòu)其實(shí)跟業(yè)務(wù)系統(tǒng)的需求是不同的,因?yàn)闃I(yè)務(wù)系統(tǒng)一般都是需要利用 MySQL 的事務(wù)機(jī)制實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。
但是對(duì)于我們數(shù)據(jù)中心來說,本質(zhì)僅僅是將數(shù)據(jù)同步過來,然后后續(xù)的重點(diǎn)是對(duì)外提供查詢。
這是功能上定位的不同,另外一個(gè)不同就是數(shù)據(jù)量級(jí)的不同,因?yàn)槲覀兊臄?shù)據(jù)中心是存儲(chǔ)所有業(yè)務(wù)系統(tǒng)的全量數(shù)據(jù)的,所以這就導(dǎo)致了可能各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)量級(jí)是百萬級(jí)到億級(jí),而我們的數(shù)據(jù)中心他的數(shù)據(jù)量級(jí)可能是百億級(jí)的,這是很大的一個(gè)特點(diǎn)。
如下圖 5 所示:
所以最終我們的數(shù)據(jù)中心存儲(chǔ)架構(gòu)采用的是 HBase+Elasticsearch 作為核心架構(gòu)。
也就是說,基于 HBase 把數(shù)據(jù)以 kv 的格式分布式的存儲(chǔ)在多臺(tái)服務(wù)器上,寫入的時(shí)候是 kv 格式,讀取的時(shí)候也是 kv 格式,key 就是數(shù)據(jù)的主鍵 id,value 就是一行完整的數(shù)據(jù)。
同時(shí)會(huì)為各個(gè)查詢接口的查詢條件,把要查詢的字段值寫入 ES 里建立查詢索引,讓查詢接口可以基于 ES 中的索引先搜索數(shù)據(jù)主鍵 id,然后根據(jù)數(shù)據(jù)主鍵 id 去 HBase 里查詢完整的一行數(shù)據(jù)。
如下圖 6 所示:
?接下來給大家說一下這套架構(gòu)下的一些技術(shù)難點(diǎn)和問題:
一個(gè)是 Hbase 和 ES 之間的一致性問題如何保證,也就是說,萬一寫入 Hbase 成功了,結(jié)果寫入 ES 失敗了,此時(shí)應(yīng)該怎么辦?
這個(gè)時(shí)候其實(shí)應(yīng)該設(shè)計(jì)一個(gè)補(bǔ)償機(jī)制,也就是說,寫入 Hbase 成功,而寫入 ES 失敗的時(shí)候,需要發(fā)一個(gè)補(bǔ)償消息到 MQ 里去,然后下次再重試做一個(gè)寫入,實(shí)現(xiàn)最終一致性的效果。
如下圖 7 所示:?
?另外一個(gè)比較關(guān)鍵的生產(chǎn)架構(gòu)經(jīng)驗(yàn)就是多業(yè)務(wù)資源隔離,也就是要限制每個(gè)業(yè)務(wù)方對(duì)數(shù)據(jù)中臺(tái)接口的訪問量。
否則可能會(huì)出現(xiàn)一個(gè)問題,就是某個(gè)業(yè)務(wù)方因?yàn)樽陨順I(yè)務(wù)激增或者是業(yè)務(wù) bug,導(dǎo)致讀數(shù)據(jù)局中心的接口進(jìn)行了瞬時(shí)高并發(fā)訪問,一下子就把數(shù)據(jù)中心的請(qǐng)求處理線程都打滿了,接著就沒法處理別的業(yè)務(wù)系統(tǒng)的查詢請(qǐng)求了。
如下圖 8 所示:?
所以說往往在這種情況下,我們必須在數(shù)據(jù)中心里設(shè)計(jì)多業(yè)務(wù)資源隔離的機(jī)制,就是說讓每個(gè)業(yè)務(wù)系統(tǒng)接入接口訪問的時(shí)候,最多就是使用數(shù)據(jù)中心里一部分的線程資源,超過這個(gè)閾值,就會(huì)限流,不允許這個(gè)業(yè)務(wù)方過量訪問。
如下圖 9 所示:
數(shù)據(jù)中心的離線數(shù)據(jù)備份和恢復(fù)的機(jī)制
接著我們還有另外一個(gè)重要的架構(gòu)方案設(shè)計(jì),數(shù)據(jù)中心現(xiàn)在是極為重要的是數(shù)據(jù)存儲(chǔ),因?yàn)樗袠I(yè)務(wù)系統(tǒng)的數(shù)據(jù)都會(huì)在數(shù)據(jù)中心內(nèi)部進(jìn)行匯總存儲(chǔ),然后各個(gè)業(yè)務(wù)系統(tǒng)都會(huì)強(qiáng)依賴數(shù)據(jù)中心提供的所有數(shù)據(jù)。
所以如果數(shù)據(jù)中心要是出現(xiàn)數(shù)據(jù)存儲(chǔ)故障甚至是數(shù)據(jù)丟失一類的問題,那就會(huì)導(dǎo)致很大的麻煩,因此我們?cè)O(shè)計(jì)了離線數(shù)據(jù)備份和恢復(fù)的機(jī)制。
也就是說,基于大數(shù)據(jù)技術(shù)將所有數(shù)據(jù)定時(shí)同步一份到 Hadoop 集群中去,如果要是出現(xiàn)了 Hbase 或者 ES 集群的崩潰或者數(shù)據(jù)丟失,此時(shí)可以基于 Hadoop 集群中的離線備份數(shù)據(jù),把數(shù)據(jù)恢復(fù)到某個(gè)時(shí)間點(diǎn),繼續(xù)對(duì)外提供服務(wù)。
如下圖 10 所示:
總結(jié)
好了,今天給大家分享的一個(gè)互聯(lián)網(wǎng)公司的多業(yè)務(wù)系統(tǒng)數(shù)據(jù)中心架構(gòu)設(shè)計(jì)就到這里了,希望大家看了我們的架構(gòu)設(shè)計(jì)思路之后,未來在公司里遇到類似問題的時(shí)候,能夠有一個(gè)整體的設(shè)計(jì)和解決思路。
本文題目:后端一次給你10萬條數(shù)據(jù)應(yīng)該如何展示,面試官到底考察我什么?
標(biāo)題URL:http://www.dlmjj.cn/article/dpghdgi.html


咨詢
建站咨詢
