国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

消息隊列、消息代理和消息中間件的區別和聯系

開發 后端
如果你經常看技術文章應該聽過「消息隊列」、「消息代理」和「消息中間件」這三個詞,它們有什么區別和聯系呢?希望這篇文章能告訴你答案。

如果你經常看技術文章應該聽過「消息隊列」、「消息代理」和「消息中間件」這三個詞,它們有什么區別和聯系呢?希望這篇文章能告訴你答案。

[[271087]]

中間件(Middleware)

首先就要說什么是中間件?我的理解是:

中間件是幫助應用程序與其他應用程序、網絡、硬件、操作系統交互或通信的軟件。

換句更簡潔的話:「將具體業務和底層邏輯解耦的軟件」。其實符合中間件的軟件范疇非常寬,日常用的Redis、Nginx、Zookeeper、Memcached等等都是「中間件」。所謂的「中間」是相對于架構體系內的,它不涉及具體的業務邏輯也不涉及底層的硬件邏輯,用于用戶數據交換和管理,能夠起到「中介」的作用,這就是中間件。

那么問題來了:為什么需要中間件的幫助(代理),直接去和對應的應用程序、硬件、操作系統等交互/通信不好嘛?

回答問題前,我們要明確一點:任何中間件必然是為了解決特定領域的某個(些)問題而出現的。

我舉2個例子來幫助大家理解。

1. 數據庫中間件

當項目很小的時候,直接使用編程語言下的數據庫驅動操作數據庫就可以了,有些開發會用ORM的方式操作數據庫:這是夠用的。

但隨著業務發展,數據量和讀寫QPS越來越高,主從模式的MySQL實例壓力越來越大,單純的對服務器硬件升級已經無法滿足生產環境的需要。在我司不成文的習慣是單表不要超過5千萬條記錄,數據庫量大的時候就設計分庫分表,也就是「分而治之」,把QPS和數據量分片限定在一個范圍內。

當然還有很多其他相關的功能,如讀寫分離、路由策略、統計、管理、鑒權等等。這些是在業務邏輯之上的,不應該在業務代碼中把這部分堆進去,應該抽象它們出來作為一個獨立的組件,這就是數據庫中間件。

[[271088]]

現在主流的開源數據庫中間件有Mycat、MySQL-proxy、Atlas等等,不過現在都不怎么維護了,另外還有Cetus ,作者是tcpcopy的作者,這個項目還在不斷維護,有同學有興趣的可以試試。當然其實各大公司內部都有自己的數據庫中間件產品,更多的貼近公司的業務產品和基礎設施。

2. Web框架中間件

一般Web框架都支持中間件,Web框架中間件的本質是插件系統,是一系列的框架鉤子,在收到請求和返回響應這個過程里面去做一些額外的事情。中間件種類很多,舉例一些:

  • 響應壓縮
  • 記錄日志
  • 支持會話Session
  • CSRF保護
  • 驗證/身份鑒別
  • 訪問控制
  • 資源使用檢查(如內存占用)
  • 請求指標
  • 健康檢查
  • 靜態資源管理 …

這些中間件將業務和非業務代碼功能進行解耦:

框架里面可能內置了一些常用的中間件,也可能只是內置中間件支持。你可以配置使用某個(些),也能方便的自定義中間件

Web視圖中不需要手寫中間件邏輯,按約定好的用法框架會在對應的生命周期中按照約定的順序去執行這些中間件邏輯

PS:Golang語言中最知名的Web框架Gin支持中間件,而且還官網搞了個叫gin-gonic/contrib的項目搜集社區里面的中間件。

消息隊列(Message Queue)

消息隊列就是Message+Queue。其實消息可以說是一個數據傳輸單位,它包含了創建時間、通道/主題信息、輸入參數等全部數據;隊列(Queue)是一種FIFO(先進先出)的數據結構,編程語言一般都內置(內存中的)隊列實現,可以作為進程間通訊(IPC)的方法。使用隊列最常見的場景就是生產者/消費者模式:生產者生產消息放到隊列中,消費者從隊列里面獲取消息消費。

準確的說,消息隊列(以下簡稱MQ**是一種能實現生產者到消費者單向通信的通信模型,而一般大家說MQ是指實現了這個模型的中間件,比如RabbitMQ、RocketMQ、Kafka等。

設想一個訂單場景,當你付款成功之后要做什么:

  • 通知/提醒系統。通知商家有人買了Ta的商品,通知買家你購買成功(相當于確認訂單)。通知/提醒的方式很多,如郵件、短信、App內消息等等
  • 會員系統。更新用戶的積分、等級等
  • 日志系統。訂單這么重要的服務需要有日志可以用于未來回溯問題
  • 推薦系統。更新用戶畫像,重新給用戶推薦他可能感興趣的商品 ..

這就出現了一些問題:

  • 響應耗時。事實上做的比這要多得多,每一項都需要有開銷,增加響應時間。如果這些邏輯是同步執行的,用戶要等多久?這種體驗是完全不可以接受的!所以呢,需要一種異步消費的機制
  • 過度耦合。本來僅僅是一個訂單系統,結果上述的那些東西都要堆進來,這就成了一個巨無霸應用,未來開發、維護都是問題
  • 錯誤丟失。假如這些后續的行為中某個(些)服務正好出現了故障執行失敗或者驗證超時,但是付款成功的確認是必須完成的,那么需要有個地方存這些還沒有被正確消費的部分
  • 需要組(廣)播。就像上面的訂單場景,付款成功這個消息被發送給多個子系統,相當于組播。未來如果要新增刪減訂閱源,怎么便捷的實現呢?

當然還有其他的問題:

  • 秒殺場景下并發可能會很高的,非常有可能出現出現遠超現有服務器處理能力的情況,這就容易把系統搞崩了,如果出現這種問題時把未處理的放進消息隊列,這就達到了「削峰」和「限流」的作用。
  • 某些場景下需要有消息的優先級 …

而消息中間件就是解決上述問題的,雖然不同的中間件的實現方案不同,但都具備以下特點:

  • 分布式。其實消息中間件解決的就是分布式系統之間消息傳遞的問題,消費者可以分布在多臺服務器上,一方面降低了由于單點故障引起的消息隊列阻塞的風險,另外一方面也非常容易橫向擴展。
  • 持久可靠。消息隊列一般會把接收到的消息存儲到本地硬盤上,保證消息不會在未消息前莫名丟失。
  • 高性能和高吞吐量。例如RocketMQ有億級消息堆積能力,廣泛應用在阿里系的各種高并發場景下;而Kafka在實時計算、日志采集等場景下算是業界的標準。

可以說,消息中間件是現在企業架構中不可或缺的組合部分,用了都說好。

消息代理(Message Broker)

消息代理是一種架構模式,用于消息驗證、變換、路由。雖然不同的消息中間件架構和實現各不相同,但是大部分都實現了Broker:其實就是消息中間件服務器,它是中間件的核心。

注意:RabbitMQ、Kafka、RocketMQ等都有消息代理,但是注意,不是所有中間件都這么選,例如ZeroMQ,它用了套接字風格的API。

在一些地方其實說消息代理就是指消息中間件,如Python語言知名的分布式任務隊列框架Celery中就這么稱呼的(所謂的「任務」其實就是一個包含了任務全部數據的消息)。

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2024-07-11 11:17:00

消息隊列Java

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發消息中間件

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2022-08-09 08:31:29

RocketMQ消息中間件

2023-05-08 08:09:26

路由元信息謂詞

2022-11-24 15:19:16

Connect架構消息中間件

2024-01-24 08:19:02

Stream應用場景注解

2023-10-16 12:25:48

2022-10-21 10:48:17

消息中間件互聯網應用協議

2022-02-13 23:04:28

RedisRabbitMQKafka

2022-12-27 17:56:40

ack機制RocketMQ

2019-11-18 09:58:11

中間件投遞模式

2022-09-21 16:09:28

消息中間件

2019-12-13 10:32:56

開源消息中間件

2022-05-10 09:24:44

中間件應用方案

2023-09-08 10:02:14

Linux系統

2022-10-28 13:33:05

Push模式互聯網高并發
點贊
收藏

51CTO技術棧公眾號

亚洲精品日产精品乱码不卡| 日韩亚洲电影在线| 欧美日韩亚洲免费| 国产美女撒尿一区二区| 91国偷自产一区二区开放时间 | 成人国产精品久久久久久亚洲| 玖玖在线播放| 一本色道**综合亚洲精品蜜桃冫 | 日韩精品一区二区三区四区五区| 麻豆精品一区| 亚洲精品在线视频| 韩国中文字幕在线| 色一情一乱一乱一91av| av天天在线| 久久亚洲欧美国产精品乐播| 亚洲看片网站| 国产视频一区在线观看一区免费| 国产精品福利片| 精品国产影院| 色综合久综合久久综合久鬼88| 麻豆mv在线看| 亚洲国产精品专区久久| 东凛在线观看| 欧美性猛交xxxx| 在线观看视频免费| 国产精品女同一区二区三区| 亚洲熟妇无码一区二区三区| 强制捆绑调教一区二区| 精品国产综合区久久久久久| 成人综合一区| 成人激情在线播放| 91精品秘密在线观看| 成人国产精品日本在线| 四虎成人精品永久免费av九九| 国产成人a亚洲精品| 免费成人网www| 日本精品久久中文字幕佐佐木| av日韩精品| 日本精品久久久久影院| 日本一区二区三区视频| 成人午夜在线影院| 亚洲东热激情| 亚洲a∨一区二区三区| 蜜桃在线一区二区三区| 中国成人亚色综合网站| 国产成人啪午夜精品网站男同| 亚洲在线不卡| 成人免费av资源| 欧美激情精品久久久久久小说| 久久久久久久综合| www.这里只有精品| 午夜视频在线观看一区二区| 亚洲成人天堂| 这里是久久伊人| 欧美亚洲韩国| 欧美激情网友自拍| 久久精品国产99久久| 好吊色欧美一区二区三区视频| 日韩精品免费专区| 精品一区二区三区无码视频| caoporn国产精品| 国产特级毛片| 欧美高清视频www夜色资源网| 91福利在线尤物| 欧美精品做受xxx性少妇| 亚洲伊人春色| 精品一区二区日本| 成人av电影在线| 最新91在线| 日韩成人中文字幕在线观看| 婷婷丁香久久| 国产精品女人网站| 久久久久久黄| 可以在线看的黄色网址| 午夜影院久久久| 绿色成人影院| 国产精品国产福利国产秒拍| 国产欧美日韩一区二区三区在线| 400部精品国偷自产在线观看| 久久久综合九色合综国产精品| 97在线观视频免费观看| 91精品福利视频| www.成人在线视频| 成人福利视频在线观看| 蜜臀av一区二区在线观看 | 在线欧美福利| 亚洲欧美电影在线观看| 久久久国产午夜精品 | 奇米4444一区二区三区 | 蜜桃特黄a∨片免费观看| 一道本成人在线| 欧美123区| 国产一区视频在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲乱码一区av黑人高潮| 超碰97成人| 久久久影院一区二区三区| 久久先锋资源网| 国内在线免费高清视频| 欧美成人精品在线播放| 一区二区三区四区五区精品视频| 国产女女做受ⅹxx高潮| 欧美日韩国产首页| 老司机精品在线| 8x8x华人在线| 91久久免费观看| 精品资源在线| 成人在线视频一区二区三区| 欧美日韩亚洲成人| 色悠久久久久综合先锋影音下载| 蜜桃精品久久久久久久免费影院 | 欧美丝袜一区二区三区| 日韩精品一区二区三区| 亚洲一区二区三区sesese| 97国产精品videossex| 在线看的av网站| 国产精品高潮呻吟视频| 99久久综合色| 97人人在线视频| 国产精品国产亚洲精品看不卡15| 国产日产亚洲精品系列| av日韩电影| 蜜桃导航-精品导航| 一区二区三区国产| 亚洲精品v亚洲精品v日韩精品| 最新欧美日韩亚洲| 欧美日韩中文字幕一区二区| 亚洲国产国产| 麻豆一区二区三区视频| 一本大道久久加勒比香蕉 | 午夜精品免费视频| 国产成人综合网| 久久精品视频免费看| 亚洲aⅴ日韩av电影在线观看 | 少妇精品久久久久久久久久| 午夜激情综合网| 日韩高清在线免费观看| 青青草原成人网| 中文字幕久久精品| 国产馆精品极品| 综合另类专区| 午夜久久久久久久久久久| 欧美成人一区二区三区片免费| 国产一区欧美| 国产精品免费观看| 91手机视频在线观看| 亚洲一区二区四区蜜桃| 欧美freesex8一10精品| 九九热在线免费| 97热在线精品视频在线观看| 久久久精品中文字幕麻豆发布| 日本欧美在线| 黄色av免费在线播放| 久久影院模特热| 久久亚洲综合色| 国产精品tv| 天堂在线视频中文网| 国产精品私拍pans大尺度在线| 亚洲午夜电影在线观看| 色综合五月天| 成人高清在线| 天堂资源在线亚洲视频| 日韩精品中文字幕在线播放| 国产精品主播直播| 精品视频91| 白白色在线发布| 国产在线精品一区| 亚洲激情视频在线播放| 国产99精品国产| 99久久婷婷国产综合精品青牛牛 | 91成人国产精品| 雨宫琴音一区二区在线| av网站大全在线| 亚洲精品影院| 色天天综合狠狠色| 中文字幕精品在线不卡| 国产精品tv| 日韩有码电影| 色99中文字幕| 欧美精品一区二区免费| 亚洲欧美日韩在线播放| 午夜久久久久| 筱崎爱全乳无删减在线观看| 男女激情无遮挡| 欧美一级视频一区二区| 欧美性猛交xxxx黑人猛交| 久久精品三级| 中文字幕综合| 少妇激情av一区二区| 亚洲精品中文字幕在线| 色与欲影视天天看综合网| 五月天亚洲婷婷| 日韩成人伦理电影在线观看| 日韩毛片一区| 伊人春色在线| 99re8这里只有精品| 欧美亚洲另类视频| 日韩女优av电影| 中文字幕色av一区二区三区| 国产精品地址|