前端監(jiān)控系統(tǒng)是采集用戶端的異常、性能、業(yè)務(wù)埋點(diǎn)等數(shù)據(jù)上報(bào),在服務(wù)端做存儲(chǔ),并支持可視化分析的平臺(tái)。
用戶量可能很大,采集的數(shù)據(jù)可能比較多,這時(shí)候服務(wù)端的并發(fā)壓力會(huì)比較大,要是直接存入數(shù)據(jù)庫(kù),那數(shù)據(jù)庫(kù)服務(wù)很可能會(huì)崩掉。![](/mis/uploader/read.ashx?c=20230509162935faa2529703b8d299&sort=open&uploadlog_code=946155bd4009b3e0)
那就用現(xiàn)在的數(shù)據(jù)庫(kù),如何保證面對(duì)大量并發(fā)請(qǐng)求的時(shí)候,服務(wù)不崩呢?
答案就是消息隊(duì)列,比如常用的 RabbitMQ:![](/mis/uploader/read.ashx?c=202305091630036edf575258051d6&sort=open&uploadlog_code=6af4b56d2e2f942)
第一個(gè) web 服務(wù)接收請(qǐng)求,把消息存入 RabbitMQ,然后另一個(gè) web 服務(wù)從 MQ 中取出消息存入數(shù)據(jù)庫(kù)。
有同學(xué)說(shuō),這不是一樣么?
不一樣,MQ 的并發(fā)量比數(shù)據(jù)庫(kù)高很多。之前 web 服務(wù)要等數(shù)據(jù)庫(kù)存儲(chǔ)完成才能響應(yīng),而現(xiàn)在只存入 MQ 就可以響應(yīng)了。那可以支持的并發(fā)量就更多。
而數(shù)據(jù)庫(kù)的并發(fā)比較低,我們可以通過(guò) MQ 把消費(fèi)的上限調(diào)低,就能保證數(shù)據(jù)庫(kù)服務(wù)不崩。
比如 10w 的消息進(jìn)來(lái),每次只從中取出 1000 來(lái)消費(fèi):![](/mis/uploader/read.ashx?c=202305091630394c6b2baabfea6be7&sort=open&uploadlog_code=cf9b0c3925dab52e)
并發(fā)量被控制住了,自然就崩不了了,從 MQ 中取出慢慢處理就好了。
這就是 MQ 的流量削峰的功能。
而且完全可以加幾個(gè) web 服務(wù)來(lái)同時(shí)消費(fèi) MQ 中的消息:![](/mis/uploader/read.ashx?c=202305091631097307b5066b2a18ef&sort=open&uploadlog_code=d49f655012a4ae5b)
知道了 RabbitMQ 能干啥,那我們就來(lái)用一下試試吧!
該文章在 2023/5/9 16:31:55 編輯過(guò)