久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

RabbitMQ原理以及使用場(chǎng)景是什么

共計(jì) 2419 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

本篇文章給大家分享的是有關(guān) RabbitMQ 原理以及使用場(chǎng)景是什么,丸趣 TV 小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

一. RabbitMQ 簡介

MQ 全稱為 Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊(duì)列的消息(針對(duì)應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過程調(diào)用的技術(shù)。排隊(duì)指的是應(yīng)用程序通過 隊(duì)列來通信。隊(duì)列的使用除去了接收和發(fā)送應(yīng)用程序同時(shí)執(zhí)行的要求。

RabbitMQ 是使用 Erlang 語言開發(fā)的開源消息隊(duì)列系統(tǒng),基于 AMQP 協(xié)議來實(shí)現(xiàn)。AMQP 的主要特征是面向消息、隊(duì)列、路由 (包括點(diǎn)對(duì)點(diǎn)和發(fā)布 / 訂閱)、可靠性、安全。AMQP 協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對(duì)數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場(chǎng)景,對(duì)性能和吞吐量的要求還在其次。

二. RabbitMQ 使用場(chǎng)景

1. 解耦(為面向服務(wù)的架構(gòu)(SOA)提供基本的最終一致性實(shí)現(xiàn))

場(chǎng)景說明:用戶下單后,訂單系統(tǒng)需要通知庫存系統(tǒng)。傳統(tǒng)的做法是,訂單系統(tǒng)調(diào)用庫存系統(tǒng)的接口。

傳統(tǒng)模式的缺點(diǎn):

  假如庫存系統(tǒng)無法訪問,則訂單減庫存將失敗,從而導(dǎo)致訂單失敗

  訂單系統(tǒng)與庫存系統(tǒng)耦合

引入消息隊(duì)列

  訂單系統(tǒng):用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊(duì)列,返回用戶訂單下單成功

  庫存系統(tǒng):訂閱下單的消息,采用拉 / 推的方式,獲取下單信息,庫存系統(tǒng)根據(jù)下單信息,進(jìn)行庫存操作

  假如:在下單時(shí)庫存系統(tǒng)不能正常使用。也不影響正常下單,因?yàn)橄聠魏螅唵蜗到y(tǒng)寫入消息隊(duì)列就不再關(guān)心其他的后續(xù)操作了。實(shí)現(xiàn)訂單系統(tǒng)與庫存系統(tǒng)的應(yīng)用解耦

  為了保證庫存肯定有,可以將隊(duì)列大小設(shè)置成庫存數(shù)量,或者采用其他方式解決。

基于消息的模型,關(guān)心的是“通知”,而非“處理”。

短信、郵件通知、緩存刷新等操作使用消息隊(duì)列進(jìn)行通知。

消息隊(duì)列和 RPC 的區(qū)別與比較:

 RPC: 異步調(diào)用,及時(shí)獲得調(diào)用結(jié)果,具有強(qiáng)一致性結(jié)果,關(guān)心業(yè)務(wù)調(diào)用處理結(jié)果。

  消息隊(duì)列:兩次異步 RPC 調(diào)用,將調(diào)用內(nèi)容在隊(duì)列中進(jìn)行轉(zhuǎn)儲(chǔ),并選擇合適的時(shí)機(jī)進(jìn)行投遞(錯(cuò)峰流控)

2. 異步提升效率

場(chǎng)景說明:用戶注冊(cè)后,需要發(fā)注冊(cè)郵件和注冊(cè)短信。傳統(tǒng)的做法有兩種 1. 串行的方式;2. 并行方式

擴(kuò)展:

異步并發(fā)利器:實(shí)際項(xiàng)目中使用 CompletionService 提升系統(tǒng)性能的一次實(shí)踐

(1)串行方式:將注冊(cè)信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊(cè)郵件,再發(fā)送注冊(cè)短信。以上三個(gè)任務(wù)全部完成后,返回給客戶端

(2)并行方式:將注冊(cè)信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊(cè)郵件的同時(shí),發(fā)送注冊(cè)短信。以上三個(gè)任務(wù)完成后,返回給客戶端。與串行的差別是,并行的方式可以提高處理的時(shí)間

引入消息隊(duì)列,將不是必須的業(yè)務(wù)邏輯,異步處理。改造后的架構(gòu)如下:

3. 流量削峰

流量削峰也是消息隊(duì)列中的常用場(chǎng)景,一般在秒殺或團(tuán)搶活動(dòng)中使用廣泛

應(yīng)用場(chǎng)景:系統(tǒng)其他時(shí)間 A 系統(tǒng)每秒請(qǐng)求量就 100 個(gè),系統(tǒng)可以穩(wěn)定運(yùn)行。系統(tǒng)每天晚間八點(diǎn)有秒殺活動(dòng),每秒并發(fā)請(qǐng)求量增至 1 萬條,但是系統(tǒng)最大的處理能力只能每秒處理 1000 個(gè)請(qǐng)求,于是系統(tǒng)崩潰,服務(wù)器宕機(jī)。

之前架構(gòu):大量用戶(100 萬用戶)通過瀏覽器在晚上八點(diǎn)高峰期同時(shí)參與秒殺活動(dòng)。大量的請(qǐng)求涌入我們的系統(tǒng)中,高峰期達(dá)到每秒鐘 5000 個(gè)請(qǐng)求,大量的請(qǐng)求打到 MySQL 上,每秒鐘預(yù)計(jì)執(zhí)行 3000 條 SQL。但是一般的 MySQL 每秒鐘扛住 2000 個(gè)請(qǐng)求就不錯(cuò)了,如果達(dá)到 3000 個(gè)請(qǐng)求的話可能 MySQL 直接就癱瘓了,從而系統(tǒng)無法被使用。但是高峰期過了之后,就成了低峰期,可能也就 1 萬用戶訪問系統(tǒng),每秒的請(qǐng)求數(shù)量也就 50 個(gè)左右,整個(gè)系統(tǒng)幾乎沒有任何壓力。

引入 MQ:100 萬用戶在高峰期的時(shí)候,每秒請(qǐng)求有 5000 個(gè)請(qǐng)求左右,將這 5000 請(qǐng)求寫入 MQ 里面,系統(tǒng) A 每秒最多只能處理 2000 請(qǐng)求,因?yàn)?MySQL 每秒只能處理 2000 個(gè)請(qǐng)求。系統(tǒng) A 從 MQ 中慢慢拉取請(qǐng)求,每秒就拉取 2000 個(gè)請(qǐng)求,不要超過自己每秒能處理的請(qǐng)求數(shù)量即可。MQ,每秒 5000 個(gè)請(qǐng)求進(jìn)來,結(jié)果只有 2000 個(gè)請(qǐng)求出去,所以在秒殺期間(將近一小時(shí))可能會(huì)有幾十萬或者幾百萬的請(qǐng)求積壓在 MQ 中。

關(guān)于流量削峰:秒殺系統(tǒng)流量削峰這事兒應(yīng)該怎么做?

這個(gè)短暫的高峰期積壓是沒問題的,因?yàn)楦叻迤谶^了之后,每秒就只有 50 個(gè)請(qǐng)求進(jìn)入 MQ 了,但是系統(tǒng)還是按照每秒 2000 個(gè)請(qǐng)求的速度在處理,所以說,只要高峰期一過,系統(tǒng)就會(huì)快速將積壓的消息消費(fèi)掉。我們?cè)诖擞?jì)算一下,每秒在 MQ 積壓 3000 條消息,1 分鐘會(huì)積壓 18 萬,1 小時(shí)積壓 1000 萬條消息,高峰期過后,1 個(gè)多小時(shí)就可以將積壓的 1000 萬消息消費(fèi)掉。

三. 引入消息隊(duì)列的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

優(yōu)點(diǎn)就是以上的那些場(chǎng)景應(yīng)用,就是在特殊場(chǎng)景下有其對(duì)應(yīng)的好處,解耦、異步、削峰。

缺點(diǎn)

  系統(tǒng)的可用性降低

系統(tǒng)引入的外部依賴越多,系統(tǒng)越容易掛掉,本來只是 A 系統(tǒng)調(diào)用 BCD 三個(gè)系統(tǒng)接口就好,ABCD 四個(gè)系統(tǒng)不報(bào)錯(cuò)整個(gè)系統(tǒng)會(huì)正常運(yùn)行。引入了 MQ 之后,雖然 ABCD 系統(tǒng)沒出錯(cuò),但 MQ 掛了以后,整個(gè)系統(tǒng)也會(huì)崩潰。

  系統(tǒng)的復(fù)雜性提高

引入了 MQ 之后,需要考慮的問題也變得多了,如何保證消息沒有重復(fù)消費(fèi)?如何保證消息不丟失?怎么保證消息傳遞的順序?

一致性問題

A 系統(tǒng)發(fā)送完消息直接返回成功,但是 BCD 系統(tǒng)之中若有系統(tǒng)寫庫失敗,則會(huì)產(chǎn)生數(shù)據(jù)不一致的問題。

消息隊(duì)列是一種十分復(fù)雜的架構(gòu),引入它有很多好處,但是也得針對(duì)它帶來的壞處做各種額外的技術(shù)方案和架構(gòu)來規(guī)避。引入 MQ 系統(tǒng)復(fù)雜度提升了一個(gè)數(shù)量級(jí),但是在有些場(chǎng)景下,就是復(fù)雜十倍百倍,還是需要使用 MQ。

以上就是 RabbitMQ 原理以及使用場(chǎng)景是什么,丸趣 TV 小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-19發(fā)表,共計(jì)2419字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 高尔夫| 饶平县| 香河县| 林芝县| 蒙城县| 桃源县| 陕西省| 北流市| 荆门市| 东至县| 时尚| 上思县| 霍林郭勒市| 平江县| 苗栗市| 浦北县| 卓尼县| 镇平县| 拜城县| 安泽县| 福清市| 茶陵县| 南部县| 博乐市| 阳城县| 逊克县| 黑河市| 阿拉善右旗| 涡阳县| 开鲁县| 板桥市| 阳春市| 犍为县| 贵港市| 象山县| 东城区| 宁乡县| 宽城| 宜黄县| 门头沟区| 江陵县|