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

高并發(fā)+海量數(shù)據(jù)下如何實(shí)現(xiàn)系統(tǒng)解耦?「上」

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
這篇文章咱們來(lái)聊聊這套系統(tǒng)里的不同子系統(tǒng)之間通信過(guò)程的一個(gè)可擴(kuò)展性的架構(gòu)處理。

一、背景回顧

如果大家看過(guò)之前的一系列文章,應(yīng)該依稀還記得??上一篇??文章最后,整個(gè)系統(tǒng)架構(gòu)大致演進(jìn)到了如下圖的一個(gè)狀態(tài)。

如果沒(méi)看過(guò)之前的系列文章,上來(lái)猛一看下面這個(gè)圖,絕對(duì)一臉懵逼,就看到一片“花花綠綠”。這個(gè)也沒(méi)辦法,復(fù)雜的系統(tǒng)架構(gòu)都是特別的龐雜的。

二、實(shí)時(shí)計(jì)算平臺(tái)與數(shù)據(jù)查詢平臺(tái)之間的耦合

好,咱們正式開(kāi)始!這篇文章咱們來(lái)聊聊這套系統(tǒng)里的不同子系統(tǒng)之間通信過(guò)程的一個(gè)可擴(kuò)展性的架構(gòu)處理。

這里面蘊(yùn)含了線上復(fù)雜系統(tǒng)之間交互的真實(shí)場(chǎng)景和痛點(diǎn),相信對(duì)大家能夠有所啟發(fā)。

我們就關(guān)注一下上面的架構(gòu)圖里左側(cè)的部分,處于中間位置的那個(gè)實(shí)時(shí)計(jì)算平臺(tái)在完成了每一個(gè)數(shù)據(jù)分片的計(jì)算過(guò)后,都會(huì)將計(jì)算結(jié)果寫(xiě)入到最左側(cè)的數(shù)據(jù)查詢平臺(tái)中。

出于種種考量,因?yàn)橛?jì)算結(jié)果的數(shù)據(jù)量相比于原始數(shù)據(jù)的數(shù)據(jù)量,實(shí)際上已經(jīng)少了一個(gè)數(shù)量級(jí)了。

所以,我們選擇的是實(shí)時(shí)計(jì)算平臺(tái)直接將數(shù)據(jù)寫(xiě)入到數(shù)據(jù)查詢平臺(tái)的MySQL數(shù)據(jù)庫(kù)集群中,然后數(shù)據(jù)查詢平臺(tái)基于MySQL數(shù)據(jù)庫(kù)集群來(lái)對(duì)外提供查詢請(qǐng)求。

此外,為了保證當(dāng)天的實(shí)時(shí)計(jì)算結(jié)果能夠高并發(fā)的被用戶查詢,因此當(dāng)時(shí)采取的是實(shí)時(shí)計(jì)算平臺(tái)的計(jì)算結(jié)果同時(shí)雙寫(xiě)緩存集群和數(shù)據(jù)庫(kù)集群。

這樣,數(shù)據(jù)查詢平臺(tái)可以優(yōu)先走緩存集群,如果找不到緩存才會(huì)從數(shù)據(jù)庫(kù)集群里回查數(shù)據(jù)。

所以上述就是實(shí)時(shí)計(jì)算平臺(tái)與數(shù)據(jù)查詢平臺(tái)之間在某一個(gè)時(shí)期的一個(gè)典型的系統(tǒng)耦合架構(gòu)。

兩個(gè)不同的系統(tǒng)之間,通過(guò)同一套數(shù)據(jù)存儲(chǔ)(數(shù)據(jù)庫(kù)集群+緩存集群)進(jìn)行了耦合。

大家看看下面的圖,再來(lái)清晰的感受一下系統(tǒng)之間耦合的感覺(jué)。

系統(tǒng)耦合痛點(diǎn)1:被動(dòng)承擔(dān)的高并發(fā)寫(xiě)入壓力

大家如果仔細(xì)看過(guò)之前的系列文章,大概就該知道,在早期主要是集中精力對(duì)實(shí)時(shí)計(jì)算平臺(tái)的架構(gòu)做了大量的演進(jìn),以便于讓他可以支撐超高并發(fā)寫(xiě)入、海量數(shù)據(jù)的超高性能計(jì)算,最后就可以抗住每秒數(shù)萬(wàn)甚至數(shù)十萬(wàn)的數(shù)據(jù)涌入的存儲(chǔ)和計(jì)算。

但是因?yàn)樵缙诓捎昧松蠄D的這種最簡(jiǎn)單、最高效、最實(shí)用的耦合交互方式,實(shí)時(shí)計(jì)算平臺(tái)直接把每個(gè)數(shù)據(jù)分片計(jì)算完的結(jié)果寫(xiě)入共享存儲(chǔ)中,就導(dǎo)致了一個(gè)很大的問(wèn)題。

實(shí)時(shí)計(jì)算平臺(tái)能抗住超高并發(fā)寫(xiě)入沒(méi)問(wèn)題了,而且還能快速的高性能計(jì)算也沒(méi)問(wèn)題。

但是,他同時(shí)會(huì)隨著數(shù)據(jù)量的增長(zhǎng),越來(lái)越高并發(fā)的將計(jì)算結(jié)果寫(xiě)入到一個(gè)數(shù)據(jù)庫(kù)集群中。而這個(gè)數(shù)據(jù)庫(kù)集群在團(tuán)隊(duì)劃分的時(shí)候,實(shí)際上是交給數(shù)據(jù)查詢平臺(tái)團(tuán)隊(duì)來(lái)負(fù)責(zé)維護(hù)的。

也就是說(shuō),對(duì)實(shí)時(shí)計(jì)算平臺(tái)團(tuán)隊(duì)來(lái)說(shuō),他們是不care那個(gè)數(shù)據(jù)庫(kù)集群是什么狀態(tài)的,而就是不停的把數(shù)據(jù)寫(xiě)入到那個(gè)集群里去。

但是,對(duì)于數(shù)據(jù)查詢平臺(tái)團(tuán)隊(duì)來(lái)說(shuō),他們就會(huì)被動(dòng)的承擔(dān)實(shí)時(shí)計(jì)算平臺(tái)越來(lái)越高并發(fā)壓力寫(xiě)入的數(shù)據(jù)。

這個(gè)時(shí)候數(shù)據(jù)查詢平臺(tái)團(tuán)隊(duì)的同學(xué)很可能處于這樣的一種焦躁中:本來(lái)自己這塊系統(tǒng)也有很多架構(gòu)上的改進(jìn)點(diǎn)要做,比如說(shuō)之前提到的冷數(shù)據(jù)查詢引擎的自研。

但是呢,他們卻要不停的被線上數(shù)據(jù)庫(kù)服務(wù)器的報(bào)警搞的焦頭爛額,疲于奔命。

因?yàn)閿?shù)據(jù)庫(kù)服務(wù)器單機(jī)寫(xiě)入壓力可能隨著業(yè)務(wù)增長(zhǎng),迅速變成每秒5000~6000的寫(xiě)入壓力,每天到了高峰期,線上服務(wù)器的CPU、磁盤(pán)、IO、網(wǎng)絡(luò)等壓力巨大,報(bào)警頻繁。

此時(shí)數(shù)據(jù)查詢平臺(tái)團(tuán)隊(duì)的架構(gòu)演進(jìn)節(jié)奏就會(huì)被打亂,因?yàn)楸仨毐粍?dòng)的去根據(jù)實(shí)時(shí)計(jì)算平臺(tái)的寫(xiě)入壓力來(lái)進(jìn)行調(diào)整,必須立馬停下手中的工作,然后去考慮如何對(duì)數(shù)據(jù)庫(kù)集群做分庫(kù)分表的方案,如何對(duì)表進(jìn)行擴(kuò)容,如何對(duì)庫(kù)進(jìn)行擴(kuò)容。

同時(shí)結(jié)合分庫(kù)分表的方案,數(shù)據(jù)查詢平臺(tái)自身的查詢機(jī)制又要跟著一起改變,大量的改造工作,調(diào)研工作,數(shù)據(jù)遷移工作,上線部署工作,代碼改造工作。

實(shí)際上,上面說(shuō)的這種情況,絕對(duì)是不合理的。

因?yàn)檎麄€(gè)這套數(shù)據(jù)平臺(tái)是一個(gè)大互聯(lián)網(wǎng)公司里核心業(yè)務(wù)部門(mén)的一個(gè)核心系統(tǒng),他是數(shù)十個(gè)Java工程師與大數(shù)據(jù)工程師通力合作一起開(kāi)發(fā),而且里面劃分為了多個(gè)team。

比如說(shuō)數(shù)據(jù)接入系統(tǒng)是一個(gè)團(tuán)隊(duì)負(fù)責(zé),實(shí)時(shí)計(jì)算平臺(tái)是一個(gè)團(tuán)隊(duì)負(fù)責(zé),數(shù)據(jù)查詢平臺(tái)是一個(gè)團(tuán)隊(duì)負(fù)責(zé),離線數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)團(tuán)隊(duì)負(fù)責(zé),等等。

所以只要分工合作了以后,那么就不應(yīng)該讓一個(gè)團(tuán)隊(duì)被動(dòng)的去承擔(dān)另外一個(gè)團(tuán)隊(duì)猛然增長(zhǎng)的寫(xiě)入壓力,這樣會(huì)打破每個(gè)團(tuán)隊(duì)自己的工作節(jié)奏。

導(dǎo)致這個(gè)問(wèn)題的根本原因,就是因?yàn)閮蓚€(gè)系統(tǒng)間,沒(méi)有做任何解耦的處理。

這就導(dǎo)致數(shù)據(jù)查詢平臺(tái)團(tuán)隊(duì)根本無(wú)法對(duì)實(shí)時(shí)計(jì)算平臺(tái)涌入過(guò)來(lái)的數(shù)據(jù)做任何有效的控制和管理,這也導(dǎo)致了“被動(dòng)承擔(dān)高并發(fā)寫(xiě)入壓力”問(wèn)題的發(fā)生。

這種系統(tǒng)耦合導(dǎo)致的被動(dòng)高并發(fā)寫(xiě)入壓力還不只是上面那么簡(jiǎn)單,實(shí)際在上述場(chǎng)景中,線上生產(chǎn)環(huán)境還發(fā)生過(guò)各種奇葩的事情:

某一次線上突然產(chǎn)生大量的熱數(shù)據(jù),熱數(shù)據(jù)計(jì)算結(jié)果涌入數(shù)據(jù)查詢平臺(tái),因?yàn)闆](méi)做任何管控,幾乎一瞬間導(dǎo)致某臺(tái)數(shù)據(jù)庫(kù)服務(wù)器寫(xiě)入并發(fā)達(dá)到1萬(wàn)+,DBA焦急的擔(dān)心數(shù)據(jù)庫(kù)快宕機(jī)了,所有人也都被搞的焦頭爛額,心理崩潰。

系統(tǒng)耦合痛點(diǎn)2:數(shù)據(jù)庫(kù)運(yùn)維操作導(dǎo)致的線上系統(tǒng)性能劇烈抖動(dòng)

在這種系統(tǒng)耦合的場(chǎng)景下,反過(guò)來(lái)實(shí)時(shí)計(jì)算平臺(tái)團(tuán)隊(duì)的同學(xué)其實(shí)心里也會(huì)吶喊:我們心里也苦??!

因?yàn)榉催^(guò)來(lái)大家可以思考一下,線上數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)改變,那幾乎可以說(shuō)是再正常不過(guò)了,尤其是高速迭代發(fā)展中的業(yè)務(wù)。

需求評(píng)審會(huì)上,要是不小心碰上某個(gè)產(chǎn)品經(jīng)理,今天改需求,明天改需求。工程師估計(jì)會(huì)怒火沖天的想要砍人。但是沒(méi)辦法,最后還是得為五斗米折腰,該改的需求還是得改。該改的表結(jié)構(gòu)也還是要改,改加的索引也還是要加。

但是大家考慮一個(gè)點(diǎn),如果說(shuō)對(duì)上述這種強(qiáng)耦合的系統(tǒng)架構(gòu),單表基本都是在千萬(wàn)級(jí)別的數(shù)據(jù)量,同時(shí)還有單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器每秒幾千的寫(xiě)入壓力。

在這種場(chǎng)景下,在線上走一個(gè)MySQL的DDL語(yǔ)句試一試?奉勸大家千萬(wàn)別胡亂嘗試,因?yàn)閿?shù)據(jù)查詢團(tuán)隊(duì)里的年輕同學(xué),干過(guò)這個(gè)事兒。

實(shí)際的結(jié)果就是,DDL咔嚓一執(zhí)行,對(duì)線上表結(jié)構(gòu)進(jìn)行修改,直接導(dǎo)致實(shí)時(shí)計(jì)算平臺(tái)的寫(xiě)入數(shù)據(jù)庫(kù)的性能急劇下降10倍以上。。。

然后連帶導(dǎo)致實(shí)時(shí)計(jì)算平臺(tái)的數(shù)據(jù)分片計(jì)算任務(wù)大量的延遲。再然后,因?yàn)閷?shí)時(shí)計(jì)算之后的數(shù)據(jù)無(wú)法盡快反饋到存儲(chǔ)中,無(wú)法被用戶查詢到,導(dǎo)致了大量的線上投訴。

并且,DDL語(yǔ)句執(zhí)行的還特別的慢,耗時(shí)數(shù)十分鐘才執(zhí)行完畢,這就導(dǎo)致數(shù)十分鐘里,整套系統(tǒng)出現(xiàn)了大規(guī)模的計(jì)算延遲,數(shù)據(jù)延遲。

一直到數(shù)十分鐘之后DDL語(yǔ)句執(zhí)行完畢,實(shí)時(shí)計(jì)算平臺(tái)才通過(guò)自身的自動(dòng)延遲調(diào)度恢復(fù)機(jī)制慢慢恢復(fù)了正常的計(jì)算。

orz......于是從此之后,數(shù)據(jù)查詢平臺(tái)的攻城獅,必須得小心翼翼的在每天凌晨2點(diǎn)~3點(diǎn)之間進(jìn)行相關(guān)的數(shù)據(jù)庫(kù)運(yùn)維操作,避免影響線上系統(tǒng)的性能穩(wěn)定性。

但是,難道人家年輕工程師沒(méi)有女朋友?難道年長(zhǎng)工程師沒(méi)有老婆孩子?經(jīng)常在凌晨3點(diǎn)看看窗外的風(fēng)景,然后打個(gè)滴滴回家,估計(jì)沒(méi)任何人愿意。

其實(shí)上述問(wèn)題,說(shuō)白了,還是因?yàn)閮商紫到y(tǒng)直接通過(guò)存儲(chǔ)耦合在了一起,導(dǎo)致了任何一個(gè)系統(tǒng)只要有點(diǎn)異動(dòng),直接就會(huì)影響另外一個(gè)系統(tǒng)。耦合!耦合!還是耦合!

系統(tǒng)耦合痛點(diǎn)N

其實(shí)上面只不過(guò)是挑了其中兩個(gè)系統(tǒng)耦合痛點(diǎn)來(lái)說(shuō)明而已,文章篇幅有限,很難把上述長(zhǎng)達(dá)數(shù)月的耦合狀態(tài)下的各種痛點(diǎn)一一說(shuō)明,實(shí)際線上生產(chǎn)環(huán)境的痛點(diǎn)還包括不限于:

  • 實(shí)時(shí)計(jì)算平臺(tái)自身寫(xiě)入機(jī)制有bug導(dǎo)致的數(shù)據(jù)丟失,結(jié)果讓數(shù)據(jù)查詢平臺(tái)的同學(xué)去排查。
  • 實(shí)時(shí)計(jì)算平臺(tái)對(duì)緩存集群和數(shù)據(jù)庫(kù)集群進(jìn)行雙寫(xiě)的時(shí)候,雙寫(xiě)一致性的保證機(jī)制,居然還需要自己來(lái)實(shí)現(xiàn),直接導(dǎo)致自己的代碼里混合了大量不屬于自己的業(yè)務(wù)邏輯。
  • 數(shù)據(jù)查詢平臺(tái)有時(shí)候做了分庫(kù)分表運(yùn)維操作之后,比如擴(kuò)容庫(kù)和表,居然還得讓實(shí)時(shí)計(jì)算平臺(tái)的同學(xué)配合著一起修改代碼配置,一起測(cè)試和部署上線。
  • 數(shù)據(jù)查詢平臺(tái)和實(shí)時(shí)計(jì)算平臺(tái)兩個(gè)team的同學(xué)在上述大量耦合場(chǎng)景下,經(jīng)常天天一起加班到凌晨深夜,各自的女朋友都以為他們打算在一起了,但實(shí)際情況是一堆大老爺兒們天天被搞的焦頭爛額,苦不堪言,都不愿意多看對(duì)方一眼。
  • 因?yàn)橄到y(tǒng)耦合導(dǎo)致的各種問(wèn)題,兩個(gè)team都要抽時(shí)間精力來(lái)解決,影響了自己那套系統(tǒng)的架構(gòu)演進(jìn)進(jìn)度,沒(méi)法集中人力和時(shí)間做真正有價(jià)值和意義的事情。
責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2022-08-10 06:52:28

RabbitMQ消息中間件

2022-08-08 20:48:09

MQ消息中間件系統(tǒng)解耦

2022-09-02 08:23:12

軟件開(kāi)發(fā)解耦架構(gòu)

2025-05-26 02:11:00

2022-04-15 11:46:09

輕量系統(tǒng)解耦鴻蒙操作系統(tǒng)

2025-02-28 00:03:22

高并發(fā)TPS系統(tǒng)

2025-02-26 03:00:00

2012-07-20 13:51:00

初志A2000海量數(shù)據(jù)

2022-12-28 07:45:17

2013-09-16 10:19:08

htmlcssJavaScript

2016-11-30 15:30:42

架構(gòu)工具和方案

2023-09-01 08:46:44

2024-06-11 00:00:05

RabbitMQAMQP協(xié)議

2024-03-15 15:20:10

并發(fā)服務(wù)IP

2021-08-26 08:24:33

高并發(fā)秒殺系統(tǒng)

2022-12-27 11:06:35

海量接口并發(fā)

2021-03-10 05:50:06

IOCReact解耦組件

2024-03-08 16:27:22

領(lǐng)域事件DDD項(xiàng)目跨層解耦

2025-05-20 07:13:22

Spring異步解耦Event

2025-06-05 01:22:00

SpringGateway高并發(fā)
點(diǎn)贊
收藏

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