成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

開(kāi)發(fā) 項(xiàng)目管理
在分布式系統(tǒng)中,要么是通過(guò) rest 調(diào)用,要么是通過(guò) dubbo 等 RPC 調(diào)用,但是有些場(chǎng)景需要解耦設(shè)計(jì),不能直接調(diào)用。 比如消息驅(qū)動(dòng)的系統(tǒng)中,消息發(fā)送者完成本地業(yè)務(wù),發(fā)送消息,多平臺(tái)的消息消費(fèi)者服務(wù)需要收到推送的消息,然后繼續(xù)處理其他業(yè)務(wù)。
  1.  MQ 為什么在系統(tǒng)中使用?一定要在分布式系統(tǒng)中使用嗎?
  2. MQ 有哪些中間件?他們有哪些特點(diǎn)?
  3. MQ 給系統(tǒng)帶來(lái)好處的同時(shí)有沒(méi)有帶來(lái)什么問(wèn)題?如何解決?

[[332190]]

在阿里的面試中,面試官問(wèn)到關(guān)于 MQ 的幾個(gè)問(wèn)題:

你的項(xiàng)目中 MQ 的作用?

為什么選擇這款 MQ 作為消息中間件?

重復(fù)消費(fèi)怎么辦?

如何確保消息被消費(fèi)?

有遇到其他問(wèn)題嗎?

那么接下來(lái)帶著問(wèn)題先思考下,有好的想法可以在評(píng)論區(qū)留言,大家一起分享。

消息中間件在系統(tǒng)中的使用

MQ 在系統(tǒng)中到底有哪些作用呢?拋開(kāi)基本的消息發(fā)布訂閱不說(shuō),還有以下幾點(diǎn):

  1. 分布式系統(tǒng)解耦
  2. 不需要立即返回的業(yè)務(wù)異步處理
  3. 削峰填谷,不直接訪問(wèn)服務(wù),緩解服務(wù)壓力,增加性能
  4. 日志記錄

分布式系統(tǒng)解耦

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

在分布式系統(tǒng)中,要么是通過(guò) rest 調(diào)用,要么是通過(guò) dubbo 等 RPC 調(diào)用,但是有些場(chǎng)景需要解耦設(shè)計(jì),不能直接調(diào)用。 比如消息驅(qū)動(dòng)的系統(tǒng)中,消息發(fā)送者完成本地業(yè)務(wù),發(fā)送消息,多平臺(tái)的消息消費(fèi)者服務(wù)需要收到推送的消息,然后繼續(xù)處理其他業(yè)務(wù)。

看這兩個(gè)架構(gòu)圖,第一種 BC 都直接依賴(lài) A 服務(wù),那么如果 A 中的接口修改,BC 都要跟著做修改,耦合度高。 第二種,通過(guò) MQ 來(lái)作為中間件收發(fā)消息,BC 只依賴(lài)收到的消息而不是具體的接口,這樣即使 A 服務(wù)修改或者增加其他服務(wù),都只要訂閱MQ就行。

不要求實(shí)時(shí)的業(yè)務(wù)異步處理

用戶注冊(cè)業(yè)務(wù)流程為例:

  1. 用戶注冊(cè)入庫(kù)
  2. 用戶驗(yàn)證郵件發(fā)送
  3. 用戶驗(yàn)證短信發(fā)送

原來(lái)的系統(tǒng)設(shè)計(jì),這樣的服務(wù)流程會(huì)串行處理,即先 1-2-3 ;但是這里可以思考下,如果單個(gè)服務(wù)單臺(tái)機(jī)器的情況下,注冊(cè)用戶特別多,系統(tǒng)能不能抗住?

這里假設(shè)各個(gè)階段的時(shí)間 1 = 50ms , 2 = 50ms , 3 = 50ms,那么一個(gè)請(qǐng)求下來(lái)就是 all = 150ms; 這里再假設(shè),這個(gè)服務(wù)器 CPU = 1 , 且只能處理單線程,那么以這種單臺(tái)服務(wù)器單線程的 QPS 來(lái)算;QPS = 1000/150 ≈ 7

現(xiàn)在我要讓這個(gè) QPS * 3 提升三倍,這個(gè)時(shí)候引入 MQ 服務(wù)作為中間件

 

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

 

如圖可見(jiàn),我在 A 服務(wù)用戶注冊(cè)完成后,就直接返回了,這個(gè)時(shí)候 MQ 用來(lái)發(fā)送異步處理消息,B,C 服務(wù)分別處理。

A 不用等待 B、C 的返回結(jié)果 ,這樣用戶體驗(yàn)就是只有 50ms 等待時(shí)間。而在郵件、短信這個(gè)階段,因?yàn)榫W(wǎng)絡(luò)延遲原因,用戶可以接受一定時(shí)間的等待。

削峰填谷

一般的服務(wù),我們的請(qǐng)求訪問(wèn)到系統(tǒng)都是直接請(qǐng)求,這樣的模式在用戶訪問(wèn)量不大的情況下,問(wèn)題不是很大。 但是如果用戶請(qǐng)求達(dá)到了一定的瓶頸或者產(chǎn)生了一些問(wèn)題,我們就需要考慮優(yōu)化我們的架構(gòu)設(shè)計(jì),MQ 中間件正是解決辦法之一。

下面以秒殺系統(tǒng)為例分析問(wèn)題 秒殺系統(tǒng)瞬間百萬(wàn)并發(fā),怎么處理?一般秒殺系統(tǒng)會(huì)進(jìn)行請(qǐng)求過(guò)濾,無(wú)效、重復(fù)都會(huì)被過(guò)濾一遍,剩下的才真正進(jìn)入到秒殺服務(wù)、訂單服務(wù)。 但即使這樣并發(fā)仍然很高,如果網(wǎng)關(guān)把全部請(qǐng)求都轉(zhuǎn)發(fā)到下游訂單服務(wù),一樣會(huì)壓垮下游系統(tǒng),造成服務(wù)不可用甚至雪崩。

 

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

 

真實(shí)的秒殺系統(tǒng)更復(fù)雜 ,包含 Nginx 、網(wǎng)關(guān)、注冊(cè)中心、redis 緩存、mysql 集群、消息隊(duì)列集群

解決方式就是將上游處理的較快的任務(wù),加入到隊(duì)列處理,下游逐一消費(fèi)隊(duì)列,直到所有隊(duì)列消費(fèi)完成。 假如秒殺服務(wù)處理請(qǐng)求數(shù):1000/s,

下游訂單服務(wù)處理請(qǐng)求書(shū):10/s,

為了不給下游訂單服務(wù)造成壓力,秒殺后的信息發(fā)送到隊(duì)列,訂單服務(wù)就可以從容淡定的每秒處理十個(gè),而不是直接塞 1000 個(gè)請(qǐng)求

也不管人家愿意不愿意。

到這里,可以總結(jié)下秒殺系統(tǒng)的過(guò)濾方式:

頁(yè)面按鈕點(diǎn)擊一次置灰

每秒透過(guò)請(qǐng)求數(shù)限制,例如 100/s,可以使用 Nginx ,sentinel

過(guò)濾同一用戶的重復(fù)請(qǐng)求,通過(guò)用戶唯一標(biāo)識(shí)、商品信息,

通過(guò)消息隊(duì)列存儲(chǔ)成功的秒殺信息,下游訂單系統(tǒng)處理

日志

所有服務(wù)都將日志發(fā)送到 MQ 服務(wù)用來(lái)作為日志存儲(chǔ)。 MQ 作為中間件對(duì)日志進(jìn)行持久化、轉(zhuǎn)發(fā) 大數(shù)據(jù)服務(wù)對(duì) MQ 讀取和進(jìn)行日志分析

 

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

 

MQ 怎么選

有人上來(lái)就是一通性能比較,然后說(shuō) RabbitMQ 是世界上最好的 MQ…

你把挑選 MQ 比作挑老婆吧,上來(lái)就要全套,膚白貌美、前凸后翹、性感火辣、勤勞能干。。。 真是缺乏社會(huì)的教育啊,兄弟 養(yǎng)得起嗎?動(dòng)不動(dòng)一套保養(yǎng)套餐,1W/月 守得住嗎?隔壁老王經(jīng)常來(lái)你家吃飯吧,瘋狂腦補(bǔ)。。。 吃的消嗎?紅棗+枸杞+腎寶片,怕是心有余力不足吧

言歸正傳,其實(shí)我覺(jué)得這是一個(gè)思考題,首先我們要看的應(yīng)該是條件是哪些?

1. 用途?是用來(lái)做日志、解耦、還是異步處理

2. 公司情況?人員是否充足,現(xiàn)有人員技術(shù)棧情況,人員的技術(shù)棧實(shí)力

3. 項(xiàng)目情況?項(xiàng)目周期,人員,用戶量,架構(gòu)設(shè)計(jì),是否老項(xiàng)目

4. 主流 MQ 現(xiàn)狀?穩(wěn)定可靠度,社區(qū)活躍度,文檔全面性,云服務(wù)支持情況

上圖的例子日志消息就是使用的 kafka,為什么是kafka? Kafka是LinkedIn開(kāi)源的分布式發(fā)布-訂閱消息系統(tǒng),屬于 Apache 頂級(jí)項(xiàng)目,社區(qū)活躍。

Kafka主要特點(diǎn)是基于Pull的模式來(lái)處理消息消費(fèi),追求高吞吐量,一開(kāi)始的目的就是用于日志收集和傳輸。 后來(lái)版本開(kāi)始支持復(fù)制,不支持事務(wù),對(duì)消息的重復(fù)、丟失、錯(cuò)誤沒(méi)有嚴(yán)格要求,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。 但是 kafka 相對(duì)來(lái)說(shuō)很重,需要依賴(lài) zookeeper,大公司里使用沒(méi)問(wèn)題,也少不了專(zhuān)人維護(hù)。

RocketMQ 是阿里開(kāi)源的一套可靠消息系統(tǒng),已經(jīng)捐贈(zèng) Apache 成為頂級(jí)項(xiàng)目。剛開(kāi)始定位于非日志的可靠消息傳輸,其實(shí)在日志處理方面性能也不錯(cuò)。

目前支持的客戶端包括 java,c++,GO ,社區(qū)比較活躍,文檔還算全面。但是涉及到核心的要修改還是有難度的,畢竟阿里云靠賣(mài)這個(gè)服務(wù)賺錢(qián)呢。

所以如果公司實(shí)力不自信還是慎重選擇吧,實(shí)在不行可以直接購(gòu)買(mǎi)云服務(wù),省心省力,還是那句話,看實(shí)際情況。

主流 MQ 的特點(diǎn) 下圖是來(lái)源網(wǎng)絡(luò)的圖片,部分描述已經(jīng)過(guò)時(shí),但是基本不差,僅供參考:

請(qǐng)務(wù)必講清楚你項(xiàng)目里使用的消息中間件(MQ),如何選擇的?

如何確保消息不被重復(fù)消費(fèi)

這里簡(jiǎn)單說(shuō)說(shuō),后面專(zhuān)門(mén)針對(duì)這個(gè)問(wèn)題進(jìn)行書(shū)寫(xiě)招供。 大致就是一些特殊原因例如網(wǎng)絡(luò)原因,服務(wù)重啟造成消息消費(fèi)未被記錄,造成重復(fù)消費(fèi)的可能。 一般的處理方式就是保證接口設(shè)計(jì)的冪等性,主旨通過(guò)唯一標(biāo)識(shí)判斷是否存在。

1. redis 緩存使用,唯一性 token 保存redis,每次消費(fèi)后刪除 token

2. 唯一主鍵判斷,數(shù)據(jù)庫(kù)判斷是否存在該主鍵記錄,存在則更新,不存在則插入

 

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

2023-10-24 07:50:18

消息中間件MQ

2023-06-29 10:10:06

Rocket MQ消息中間件

2022-12-15 17:13:22

MQRocketMQ架構(gòu)

2022-07-26 00:00:00

MQ消息中間件

2022-11-18 07:54:02

Go中間件項(xiàng)目

2021-10-29 11:30:31

補(bǔ)碼二進(jìn)制反碼

2019-12-13 10:32:56

開(kāi)源消息中間件

2024-07-11 11:17:00

消息隊(duì)列Java

2022-07-25 06:46:24

MQ中間件消息中間件

2020-08-19 08:39:05

中間件前端設(shè)計(jì)模式

2016-09-12 18:01:05

IBM

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2022-11-02 10:08:46

分布式高并發(fā)消息中間件

2015-08-11 11:16:36

淘寶中間件

2019-06-20 17:49:51

RPCHTTP協(xié)議

2020-07-29 09:21:34

Docker集群部署隔離環(huán)境

2021-07-05 22:22:24

協(xié)議MQTT

2019-07-19 07:56:13

消息隊(duì)列消息代理消息中間件

2023-10-16 12:25:48

2023-12-24 22:42:57

數(shù)據(jù)庫(kù)分片中間件
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美a∨ | 另类一区| 中文字幕国产视频 | 在线小视频 | 久热9 | 免费亚洲视频 | 伊人久久伊人 | 国产小视频自拍 | 91精品一区二区三区久久久久 | 久久久久成人精品亚洲国产 | 成人精品一区二区三区 | 国产精品久久精品 | 日韩中文在线观看 | 久久精品一区二区 | 欧美激情综合五月色丁香小说 | 亚洲三区在线观看 | 日本精品免费 | 青青草华人在线视频 | 日本黄色大片免费看 | 成人免费观看视频 | 午夜精品在线观看 | 久久99蜜桃综合影院免费观看 | 成人性生交a做片 | 久久久精 | 91精品久久久久久久久 | 国产91久久久久蜜臀青青天草二 | 人人看人人干 | 一区二区在线观看免费视频 | 久久精品综合 | 午夜影院视频在线观看 | 亚洲精品一区二区另类图片 | 久久久精品 | 日韩精品在线观看视频 | 97精品国产一区二区三区 | 欧美精品一区二区三区在线播放 | 91精品国产乱码久久久久久久久 | 亚洲在线免费观看 | 成人欧美日韩一区二区三区 | 午夜视频一区二区 | 一区二区高清在线观看 | 日本精a在线观看 |