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

RabbitMQ簡介以及使用場景

數據庫 MySQL
MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。

一. RabbitMQ 簡介

MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用于諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

RabbitMQ是使用Erlang語言開發的開源消息隊列系統,基于AMQP協議來實現。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、 安全。AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。

二. RabbitMQ 使用場景

1. 解耦(為面向服務的架構(SOA)提供基本的最終一致性實現)

場景說明:用戶下單后,訂單系統需要通知庫存系統。傳統的做法是,訂單系統調用庫存系統的接口。

傳統模式的缺點:

  •  假如庫存系統無法訪問,則訂單減庫存將失敗,從而導致訂單失敗
  •  訂單系統與庫存系統耦合

引入消息隊列

  •  訂單系統:用戶下單后,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功
  •  庫存系統:訂閱下單的消息,采用拉/推的方式,獲取下單信息,庫存系統根據下單信息,進行庫存操作
  •  假如:在下單時庫存系統不能正常使用。也不影響正常下單,因為下單后,訂單系統寫入消息隊列就不再關心其他的后續操作了。實現訂單系統與庫存系統的應用解耦
  •  為了保證庫存肯定有,可以將隊列大小設置成庫存數量,或者采用其他方式解決。

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

短信、郵件通知、緩存刷新等操作使用消息隊列進行通知。

消息隊列和RPC的區別與比較:

  •  RPC: 異步調用,及時獲得調用結果,具有強一致性結果,關心業務調用處理結果。
  •  消息隊列:兩次異步RPC調用,將調用內容在隊列中進行轉儲,并選擇合適的時機進行投遞(錯峰流控)

2. 異步提升效率

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

擴展:

異步并發利器:實際項目中使用CompletionService提升系統性能的一次實踐

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

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

引入消息隊列,將不是必須的業務邏輯,異步處理。改造后的架構如下:

3. 流量削峰

流量削峰也是消息隊列中的常用場景,一般在秒殺或團搶活動中使用廣泛

應用場景:系統其他時間A系統每秒請求量就100個,系統可以穩定運行。系統每天晚間八點有秒殺活動,每秒并發請求量增至1萬條,但是系統最大的處理能力只能每秒處理1000個請求,于是系統崩潰,服務器宕機。

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

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

關于流量削峰:秒殺系統流量削峰這事兒應該怎么做?

這個短暫的高峰期積壓是沒問題的,因為高峰期過了之后,每秒就只有50個請求進入MQ了,但是系統還是按照每秒2000個請求的速度在處理,所以說,只要高峰期一過,系統就會快速將積壓的消息消費掉。我們在此計算一下,每秒在MQ積壓3000條消息,1分鐘會積壓18萬,1小時積壓1000萬條消息,高峰期過后,1個多小時就可以將積壓的1000萬消息消費掉。

三. 引入消息隊列的優缺點

優點

優點就是以上的那些場景應用,就是在特殊場景下有其對應的好處,解耦、異步、削峰。

缺點

  •  系統的可用性降低

系統引入的外部依賴越多,系統越容易掛掉,本來只是A系統調用BCD三個系統接口就好,ABCD四個系統不報錯整個系統會正常運行。引入了MQ之后,雖然ABCD系統沒出錯,但MQ掛了以后,整個系統也會崩潰。

  •  系統的復雜性提高

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

  • 一致性問題

A系統發送完消息直接返回成功,但是BCD系統之中若有系統寫庫失敗,則會產生數據不一致的問題。

總結

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

 

責任編輯:龐桂玉 來源: Java知音
相關推薦

2023-05-16 07:47:18

RabbitMQ消息隊列系統

2022-10-28 07:15:26

策略模式使用場景UML

2021-08-29 22:05:04

對象自動回收

2023-06-06 08:18:24

Kafka架構應用場景

2020-10-29 07:16:26

布隆過濾器場景

2015-06-26 11:33:23

Python裝飾器使用場景實踐

2018-08-15 09:48:27

數據庫Redis應用場景

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 命令

2021-09-18 10:20:07

Redis數據庫緩存

2022-10-17 00:27:20

二叉樹數組索引

2021-12-01 23:34:10

EtcdRedis場景

2013-10-15 10:11:33

產品測試使用場景產品

2023-10-30 00:11:48

微服務負載均衡場景

2024-10-06 12:35:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99热播精品 | 国产高清精品在线 | 亚洲国产精品久久人人爱 | 国产精品爱久久久久久久 | 日韩一二三区视频 | 精品在线一区 | av免费网址| 免费观看一级毛片 | 久久久精品一区二区三区 | 激情网站在线 | 国产精品视频免费观看 | 日韩欧美一级精品久久 | 久久综合九九 | 国产精品久久久久久久久久免费看 | 亚洲综合在线视频 | 成人免费视频久久 | 久久99视频这里只有精品 | 亚洲精品久久久久久久久久吃药 | 亚洲一区精品在线 | 黄色三级免费 | 欧美一级小视频 | 精品一区二区不卡 | 日韩av在线一区二区三区 | 午夜精品久久久久久久久久久久久 | 91精品国产一区二区三区香蕉 | 国产乱码高清区二区三区在线 | 欧美日韩精品在线一区 | 欧美视频一区二区三区 | 精品视频一区在线 | 毛片一级片 | 蜜桃臀av一区二区三区 | 亚州一区二区三区 | 精品欧美一区二区精品久久 | 羞羞视频免费观 | 欧美日韩中文字幕在线 | av在线成人 | 国产精品成人一区二区三区夜夜夜 | 日韩视频在线播放 | 日韩精品一区二区三区免费视频 | 最近最新中文字幕 | a级黄色毛片免费播放视频 国产精品视频在线观看 |