偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

后端一次給你10萬條數(shù)據(jù)應(yīng)該如何展示,面試官到底考察我什么?

開發(fā) 前端
今天給大家分享的一個互聯(lián)網(wǎng)公司的多業(yè)務(wù)系統(tǒng)數(shù)據(jù)中心架構(gòu)設(shè)計(jì)就到這里了,希望大家看了我們的架構(gòu)設(shè)計(jì)思路之后,未來在公司里遇到類似問題的時候,能夠有一個整體的設(shè)計(jì)和解決思路。

業(yè)務(wù)背景

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

首先跟大家說一下在沒有數(shù)據(jù)中心的時候,公司里的各個業(yè)務(wù)團(tuán)隊(duì)是什么樣的一個狀況,簡單來說,就是不同的業(yè)務(wù)團(tuán)隊(duì)有有研發(fā)自己的業(yè)務(wù)系統(tǒng),有自己獨(dú)立的數(shù)據(jù)存儲,平時就是自己的系統(tǒng)訪問自己的數(shù)據(jù)就夠了。

如下圖 1 所示:

沒引入多業(yè)務(wù)數(shù)據(jù)中心時的痛點(diǎn)

但是接著隨著你的系統(tǒng)逐步演進(jìn),需求越來越多,越來越復(fù)雜,逐步的會出現(xiàn)每個系統(tǒng)都需要訪問其他系統(tǒng)的數(shù)據(jù)的情況。

此時就會出現(xiàn)你每個系統(tǒng)必須開一些數(shù)據(jù)接口,讓別的系統(tǒng)來調(diào)用你的接口訪問你的數(shù)據(jù),同時你自己也可能要訪問別人的接口去獲取別人的數(shù)據(jù)。

如下圖 2 所示:

大家看到上圖是什么感覺?是不是覺得很懵逼?因?yàn)閷?shí)際上隨著系統(tǒng)慢慢演化,可能會搞成系統(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)用。

這個時候就會出現(xiàn)非常尷尬的場景,就是混亂,沒錯,我敢打賭,你盯著上面的圖看 10s,應(yīng)該還是很懵逼,沒什么頭緒。

沒錯,所以其實(shí)這就是最大的痛點(diǎn),各個業(yè)務(wù)系統(tǒng)其實(shí)都是一個數(shù)據(jù)孤島,也就是大家都只能訪問到自己的數(shù)據(jù),然后別人要訪問你的數(shù)據(jù),必須通過你的接口來訪問,最后導(dǎo)致 n 個業(yè)務(wù)系統(tǒng)之間錯綜復(fù)雜的調(diào)用關(guān)系,進(jìn)而導(dǎo)致系統(tǒng)不好維護(hù),運(yùn)維困難。

數(shù)據(jù)中心的架構(gòu)設(shè)計(jì)思想

所以這個問題,我們設(shè)計(jì)了一個面向多業(yè)務(wù)團(tuán)隊(duì)的數(shù)據(jù)中心,這個數(shù)據(jù)中心的架構(gòu)設(shè)計(jì)思想,就是通過各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)存儲的變更監(jiān)聽。

比如針對 MySQL 數(shù)據(jù)庫就可以部署 Canal 來監(jiān)聽他的數(shù)據(jù)變更,然后把各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)都拉取到數(shù)據(jù)中臺里統(tǒng)一存儲。

如下圖 3 所示:

接著數(shù)據(jù)中心可以提供兩種數(shù)據(jù)訪問模式,一個是主動查詢接口,一個是被動監(jiān)聽 MQ 通知。

也就是說,對于數(shù)據(jù)中心來說,你各個業(yè)務(wù)系統(tǒng)都可以調(diào)用數(shù)據(jù)中心的接口,直接獲取你想要的其他業(yè)務(wù)系統(tǒng)的數(shù)據(jù),同時數(shù)據(jù)中心也會把各個業(yè)務(wù)數(shù)據(jù)的變更通知發(fā)送到 MQ,你也可以訂閱你感興趣的業(yè)務(wù)數(shù)據(jù)變更通知。

如下圖 4 所示:

大家看到上面的架構(gòu)設(shè)計(jì)圖,是不是瞬間感覺世界一下子就清凈了?

沒錯,其實(shí)在互聯(lián)網(wǎng)公司里,對于多業(yè)務(wù)系統(tǒng)錯綜復(fù)雜的互相調(diào)用接口訪問對方數(shù)據(jù),往往會抽出一個統(tǒng)一的公共的數(shù)據(jù)中心來,讓各個業(yè)務(wù)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)共享,這樣就可以大幅度的提升我們系統(tǒng)整體架構(gòu)的整潔性了。

數(shù)據(jù)中心的數(shù)據(jù)存儲架構(gòu)設(shè)計(jì)

那么再來給大家講一下數(shù)據(jù)中心架構(gòu)設(shè)計(jì)的另外一個關(guān)鍵點(diǎn),就是他的數(shù)據(jù)存儲架構(gòu)設(shè)計(jì)。

大家可以想一下,雖然我們的各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)存儲基本都是以 MySQL 為主的,但是我們的數(shù)據(jù)中心的存儲架構(gòu)其實(shí)跟業(yè)務(wù)系統(tǒng)的需求是不同的,因?yàn)闃I(yè)務(wù)系統(tǒng)一般都是需要利用 MySQL 的事務(wù)機(jī)制實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。

但是對于我們數(shù)據(jù)中心來說,本質(zhì)僅僅是將數(shù)據(jù)同步過來,然后后續(xù)的重點(diǎn)是對外提供查詢。

這是功能上定位的不同,另外一個不同就是數(shù)據(jù)量級的不同,因?yàn)槲覀兊臄?shù)據(jù)中心是存儲所有業(yè)務(wù)系統(tǒng)的全量數(shù)據(jù)的,所以這就導(dǎo)致了可能各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)量級是百萬級到億級,而我們的數(shù)據(jù)中心他的數(shù)據(jù)量級可能是百億級的,這是很大的一個特點(diǎn)。

如下圖 5 所示:

所以最終我們的數(shù)據(jù)中心存儲架構(gòu)采用的是 HBase+Elasticsearch 作為核心架構(gòu)。

也就是說,基于 HBase 把數(shù)據(jù)以 kv 的格式分布式的存儲在多臺服務(wù)器上,寫入的時候是 kv 格式,讀取的時候也是 kv 格式,key 就是數(shù)據(jù)的主鍵 id,value 就是一行完整的數(shù)據(jù)。

同時會為各個查詢接口的查詢條件,把要查詢的字段值寫入 ES 里建立查詢索引,讓查詢接口可以基于 ES 中的索引先搜索數(shù)據(jù)主鍵 id,然后根據(jù)數(shù)據(jù)主鍵 id 去 HBase 里查詢完整的一行數(shù)據(jù)。

如下圖 6 所示:

?接下來給大家說一下這套架構(gòu)下的一些技術(shù)難點(diǎn)和問題:

一個是 Hbase 和 ES 之間的一致性問題如何保證,也就是說,萬一寫入 Hbase 成功了,結(jié)果寫入 ES 失敗了,此時應(yīng)該怎么辦?

這個時候其實(shí)應(yīng)該設(shè)計(jì)一個補(bǔ)償機(jī)制,也就是說,寫入 Hbase 成功,而寫入 ES 失敗的時候,需要發(fā)一個補(bǔ)償消息到 MQ 里去,然后下次再重試做一個寫入,實(shí)現(xiàn)最終一致性的效果。

如下圖 7 所示:?

?另外一個比較關(guān)鍵的生產(chǎn)架構(gòu)經(jīng)驗(yàn)就是多業(yè)務(wù)資源隔離,也就是要限制每個業(yè)務(wù)方對數(shù)據(jù)中臺接口的訪問量。

否則可能會出現(xiàn)一個問題,就是某個業(yè)務(wù)方因?yàn)樽陨順I(yè)務(wù)激增或者是業(yè)務(wù) bug,導(dǎo)致讀數(shù)據(jù)局中心的接口進(jìn)行了瞬時高并發(fā)訪問,一下子就把數(shù)據(jù)中心的請求處理線程都打滿了,接著就沒法處理別的業(yè)務(wù)系統(tǒng)的查詢請求了。

如下圖 8 所示:?

所以說往往在這種情況下,我們必須在數(shù)據(jù)中心里設(shè)計(jì)多業(yè)務(wù)資源隔離的機(jī)制,就是說讓每個業(yè)務(wù)系統(tǒng)接入接口訪問的時候,最多就是使用數(shù)據(jù)中心里一部分的線程資源,超過這個閾值,就會限流,不允許這個業(yè)務(wù)方過量訪問。

如下圖 9 所示:

數(shù)據(jù)中心的離線數(shù)據(jù)備份和恢復(fù)的機(jī)制

接著我們還有另外一個重要的架構(gòu)方案設(shè)計(jì),數(shù)據(jù)中心現(xiàn)在是極為重要的是數(shù)據(jù)存儲,因?yàn)樗袠I(yè)務(wù)系統(tǒng)的數(shù)據(jù)都會在數(shù)據(jù)中心內(nèi)部進(jìn)行匯總存儲,然后各個業(yè)務(wù)系統(tǒng)都會強(qiáng)依賴數(shù)據(jù)中心提供的所有數(shù)據(jù)。

所以如果數(shù)據(jù)中心要是出現(xiàn)數(shù)據(jù)存儲故障甚至是數(shù)據(jù)丟失一類的問題,那就會導(dǎo)致很大的麻煩,因此我們設(shè)計(jì)了離線數(shù)據(jù)備份和恢復(fù)的機(jī)制。

也就是說,基于大數(shù)據(jù)技術(shù)將所有數(shù)據(jù)定時同步一份到 Hadoop 集群中去,如果要是出現(xiàn)了 Hbase 或者 ES 集群的崩潰或者數(shù)據(jù)丟失,此時可以基于 Hadoop 集群中的離線備份數(shù)據(jù),把數(shù)據(jù)恢復(fù)到某個時間點(diǎn),繼續(xù)對外提供服務(wù)。

如下圖 10 所示:

總結(jié)

好了,今天給大家分享的一個互聯(lián)網(wǎng)公司的多業(yè)務(wù)系統(tǒng)數(shù)據(jù)中心架構(gòu)設(shè)計(jì)就到這里了,希望大家看了我們的架構(gòu)設(shè)計(jì)思路之后,未來在公司里遇到類似問題的時候,能夠有一個整體的設(shè)計(jì)和解決思路。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-06-17 10:15:35

面試API前端

2024-02-26 12:38:21

MySQLInnoDB跨度

2021-11-02 14:46:50

數(shù)據(jù)

2025-04-11 07:46:09

2020-05-12 11:05:54

MySQL索引數(shù)據(jù)庫

2021-07-05 22:09:53

面試官CollectionsJDK7

2024-03-06 09:22:23

C#數(shù)據(jù)庫判重

2025-06-26 08:22:03

2024-02-19 11:49:23

JavaBitMap類型

2025-05-20 01:00:00

2019-11-28 18:54:50

數(shù)據(jù)庫黑客軟件

2021-07-06 07:08:18

管控數(shù)據(jù)數(shù)倉

2025-09-01 01:45:00

數(shù)據(jù)虛擬列表

2019-07-16 08:51:03

熱搜新浪微博數(shù)據(jù)

2022-07-27 10:30:49

后端前端

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2020-03-19 15:32:47

手機(jī)消毒病毒

2024-04-15 00:01:00

STWJava垃圾

2024-09-05 21:24:02

數(shù)據(jù)庫查詢MySQLlimit

2015-08-13 10:29:12

面試面試官
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號