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

RabbitMQ簡介以及使用場景

數(shù)據(jù)庫 MySQL
MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊(duì)列的消息(針對應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。

一. RabbitMQ 簡介

MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊(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)對點(diǎn)和發(fā)布/訂閱)、可靠性、 安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。

二. RabbitMQ 使用場景

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

場景說明:用戶下單后,訂單系統(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)儲,并選擇合適的時(shí)機(jī)進(jìn)行投遞(錯(cuò)峰流控)

2. 異步提升效率

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

擴(kuò)展:

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

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

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

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

3. 流量削峰

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

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

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

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

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

這個(gè)短暫的高峰期積壓是沒問題的,因?yàn)楦叻迤谶^了之后,每秒就只有50個(gè)請求進(jìn)入MQ了,但是系統(tǒng)還是按照每秒2000個(gè)請求的速度在處理,所以說,只要高峰期一過,系統(tǒng)就會(huì)快速將積壓的消息消費(fèi)掉。我們在此計(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)就是以上的那些場景應(yīng)用,就是在特殊場景下有其對應(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ù)不一致的問題。

總結(jié)

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

 

責(zé)任編輯:龐桂玉 來源: Java知音
相關(guān)推薦

2023-05-16 07:47:18

RabbitMQ消息隊(duì)列系統(tǒng)

2022-10-28 07:15:26

策略模式使用場景UML

2021-08-29 22:05:04

對象自動(dòng)回收

2023-06-06 08:18:24

Kafka架構(gòu)應(yīng)用場景

2020-10-29 07:16:26

布隆過濾器場景

2015-06-26 11:33:23

Python裝飾器使用場景實(shí)踐

2018-08-15 09:48:27

數(shù)據(jù)庫Redis應(yīng)用場景

2020-06-16 15:40:32

閉鎖柵欄線程

2021-08-06 10:43:56

Kubernetes容器

2024-05-11 12:47:16

Kafka場景.高性能

2022-10-12 07:24:18

大文件哈希算法Hash

2021-08-13 12:31:26

Redis代碼Java

2024-04-11 13:41:47

2013-12-25 16:03:39

GitGit 命令

2023-10-30 00:11:48

微服務(wù)負(fù)載均衡場景

2021-09-18 10:20:07

Redis數(shù)據(jù)庫緩存

2022-10-17 00:27:20

二叉樹數(shù)組索引

2021-12-01 23:34:10

EtcdRedis場景

2024-12-31 07:56:33

Disruptor內(nèi)存有界隊(duì)列消費(fèi)模式

2013-10-15 10:11:33

產(chǎn)品測試使用場景產(chǎn)品
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 99亚洲| 亚洲高清视频一区二区 | 免费午夜视频 | 中文字幕精品视频 | 亚洲精品无| 欧美成年网站 | 午夜电影合集 | 欧美一级片在线看 | 亚洲精品一区在线观看 | 欧美嘿咻 | 欧美日韩在线观看一区 | 精品成人在线 | 欧美精品一二三区 | 日本在线小视频 | 天天宗合网 | 在线一区视频 | 国产精品久久九九 | 一区二区高清 | 在线播放91 | 一级在线免费观看 | 99热.com| 欧美亚洲高清 | 日本黄色一级片视频 | 天天爱天天操 | 求毛片 | 一区二区av | 黄色免费网站在线看 | 粉嫩高清一区二区三区 | 2018国产大陆天天弄 | 亚洲a视 | 天堂综合网久久 | 亚洲成人av在线 | 男女那个视频 | 国产一区二区欧美 | 午夜影院在线观看免费 | 五月天国产视频 | 国产精品色婷婷久久58 | 免费观看一级毛片 | 自拍偷拍精品 | 日本不卡一区二区三区在线观看 |