日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

了解中间件与消息中间件

發(fā)布時(shí)間:2023/12/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解中间件与消息中间件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該筆記大部分搬運(yùn)B站學(xué)相伴的RabbitMQ,順便把圖文合并記錄,便于回顧,僅用于學(xué)習(xí)!
視頻地址:https://www.bilibili.com/video/BV1dX4y1V73G 作者真的非常好,別白嫖,記得三連
如有侵權(quán),請(qǐng)聯(lián)系刪除!

1. 什么是中間件

  • 我國(guó)企業(yè)從20世紀(jì)80年代開(kāi)始就逐漸進(jìn)行信息化建設(shè),由于方法和體系的不成熟,以及企業(yè)業(yè)務(wù)和市場(chǎng)需求的不斷變化,一個(gè)企業(yè)可能同時(shí)運(yùn)行著多個(gè)不同的業(yè)務(wù)系統(tǒng),這些系統(tǒng)可能基于不同的操作系統(tǒng)、不同的數(shù)據(jù)庫(kù)、異構(gòu)的網(wǎng)絡(luò)環(huán)境。現(xiàn)在的問(wèn)題是,如何把這些信息系統(tǒng)結(jié)合成一個(gè)有機(jī)地協(xié)同工作的整體,真正實(shí)現(xiàn)企業(yè)跨平臺(tái)、分布式應(yīng)用。中間件便是解決之道,它用自己的復(fù)雜換取了企業(yè)應(yīng)用的簡(jiǎn)單。

  • 中間件(Middleware)是處于操作系統(tǒng)和應(yīng)用程序之間的軟件,也有人認(rèn)為它應(yīng)該屬于操作系統(tǒng)中的一部分。人們?cè)谑褂弥虚g件時(shí),往往是一組中間件集成在一起,構(gòu)成一個(gè)平臺(tái)(包括開(kāi)發(fā)平臺(tái)和運(yùn)行平臺(tái)),但在這組中間件中必須要有一個(gè)通信中間件,即中間件=平臺(tái)+通信,這個(gè)定義也限定了只有用于分布式系統(tǒng)中才能稱為中間件,同時(shí)還可以把它與支撐軟件和使用軟件區(qū)分開(kāi)來(lái)。

舉例:

  • RMI(Remote Method Invocations, 遠(yuǎn)程調(diào)用)
  • Load Balancing(負(fù)載均衡,將訪問(wèn)負(fù)荷分散到各個(gè)服務(wù)器中)
  • Transparent Fail-over(透明的故障切換)
  • Clustering(集群,用多個(gè)小的服務(wù)器代替大型機(jī))
  • Back-end-Integration(后端集成,用現(xiàn)有的、新開(kāi)發(fā)的系統(tǒng)如何去集成遺留的系統(tǒng))
  • Transaction事務(wù)(全局/局部)全局事務(wù)(分布式事務(wù))局部事務(wù)(在同一數(shù)據(jù)庫(kù)聯(lián)接內(nèi)的事務(wù))
  • Dynamic Redeployment(動(dòng)態(tài)重新部署,在不停止原系統(tǒng)的情況下,部署新的系統(tǒng))
  • System Management(系統(tǒng)管理)
  • Threading(多線程處理)
  • Message-oriented Middleware面向消息的中間件(異步的調(diào)用編程)
  • Component Life Cycle(組件的生命周期管理)
  • Resource pooling(資源池)
  • Security(安全)
  • Caching(緩存)
  • 2. 為什么需要使用消息中間件

    具體地說(shuō),中間件屏蔽了底層操作系統(tǒng)的復(fù)雜性,使程序開(kāi)發(fā)人員面對(duì)一個(gè)簡(jiǎn)單而統(tǒng)一的開(kāi)發(fā)環(huán)境,減少程序設(shè)計(jì)的復(fù)雜性,將注意力集中在自己的業(yè)務(wù)上,不必再為程序在不同系統(tǒng)軟件上的移植而重復(fù)工作,從而大大減少了技術(shù)上的負(fù)擔(dān),中間件帶給應(yīng)用系統(tǒng)的,不只是開(kāi)發(fā)的簡(jiǎn)便、開(kāi)發(fā)周期的縮短,也減少了系統(tǒng)的維護(hù)、運(yùn)行和管理的工作量,還減少了計(jì)算機(jī)總體費(fèi)用的投入。

    為什么要使用MQ消息中間件?它解決了什么問(wèn)題?
    https://www.jianshu.com/p/2820561158c4

    3. 中間件特點(diǎn)

    為解決分布異構(gòu)問(wèn)題,人們提出了中間件(middleware)的概念。中間件是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),如下圖所示,這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)。


    也許很難給中間件一個(gè)嚴(yán)格的定義,但中間件應(yīng)具有如下的一些特點(diǎn):
    (1)滿足大量應(yīng)用的需要
    (2)運(yùn)行于多種硬件和OS平臺(tái)
    (3)支持分布計(jì)算,提供跨網(wǎng)絡(luò)、硬件和OS平臺(tái)的透明性的應(yīng)用或服務(wù)的交互
    (4)支持標(biāo)準(zhǔn)的協(xié)議
    (5)支持標(biāo)準(zhǔn)的接口

    由于標(biāo)準(zhǔn)接口對(duì)于可移植性和標(biāo)準(zhǔn)協(xié)議對(duì)于互操作性的重要性,中間件已成為許多標(biāo)準(zhǔn)化工作的主要部分。對(duì)于應(yīng)用軟件開(kāi)發(fā),中間件遠(yuǎn)比操作系統(tǒng)和網(wǎng)絡(luò)服務(wù)更為重要,中間件提供的程序接口定義了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境,不管底層的計(jì)算機(jī)硬件和系統(tǒng)軟件怎樣更新?lián)Q代,只要將中間件升級(jí)更新,并保持中間件對(duì)外的接口定義不變,應(yīng)用軟件幾乎不需任何修改,從而保護(hù)了企業(yè)在應(yīng)用軟件開(kāi)發(fā)和維護(hù)中的重大投資。

    簡(jiǎn)單說(shuō):中間件有個(gè)很大的特點(diǎn),是脫離于具體設(shè)計(jì)目標(biāo),而具備提供普遍獨(dú)立功能需求的模塊。這使得中間件一定是可替換的。如果一個(gè)系統(tǒng)設(shè)計(jì)中,中間件時(shí)不可替代的,不是架構(gòu)、框架設(shè)計(jì)有問(wèn)題,那么就是這個(gè)中間件,在別處可能是個(gè)中間件,在這個(gè)系統(tǒng)內(nèi)是引擎。

    4. 在項(xiàng)目中什么時(shí)候使用中間件技術(shù)

    在項(xiàng)目的架構(gòu)和重構(gòu)中,使用任何技術(shù)和架構(gòu)的改變我們都需要謹(jǐn)慎斟酌和思考,因?yàn)槿魏渭夹g(shù)的融入和變化都可能人員,技術(shù),和成本的增加,中間件的技術(shù)一般現(xiàn)在一些互聯(lián)網(wǎng)公司或者項(xiàng)目中使用比較多,如果你僅僅還只是一個(gè)初創(chuàng)公司建議還是使用單體架構(gòu),最多加個(gè)緩存中間件即可,不要盲目追求新或者所謂的高性能,而追求的背后一定是業(yè)務(wù)的驅(qū)動(dòng)和項(xiàng)目的驅(qū)動(dòng),因?yàn)橐坏┳非缶鸵馕吨愕膶W(xué)習(xí)成本,公司的人員結(jié)構(gòu)以及服務(wù)器成本,維護(hù)和運(yùn)維的成本都會(huì)增加,所以需要謹(jǐn)慎選擇和考慮。

    但是作為一個(gè)開(kāi)放人員,一定要有學(xué)習(xí)中間件技術(shù)的能力和思維,否則很容易當(dāng)項(xiàng)目發(fā)展到一個(gè)階段在去掌握估計(jì)或者在面試中提及,就會(huì)給自己帶來(lái)不小的困擾,在當(dāng)今這個(gè)時(shí)代這些技術(shù)也并不是什么新鮮的東西,如果去掌握和挖掘最關(guān)鍵的還是自己花時(shí)間和花精力去探討和研究。

    5. 中間件技術(shù)及架構(gòu)的概述

    知識(shí)圖譜

    6. 什么是消息中間件

    6.1 單體架構(gòu)

    在實(shí)際的項(xiàng)目中,大部分的企業(yè)項(xiàng)目開(kāi)發(fā)中,在早起都采用的是單體的架構(gòu)模式

    在企業(yè)開(kāi)發(fā)當(dāng)中,大部分的初期架構(gòu)都采用的是單體架構(gòu)的模式進(jìn)行架構(gòu),而這種架構(gòu)的典型的特點(diǎn):就是把所有的業(yè)務(wù)和模塊,源代碼,靜態(tài)資源文件等都放在一個(gè)工程中,如果其中的一個(gè)模塊升級(jí)或者迭代發(fā)生一個(gè)很小的變動(dòng)都會(huì)重新編譯和重新部署項(xiàng)目。這種這狗存在的問(wèn)題是:

  • 耦合度太高
  • 不易維護(hù)
  • 服務(wù)器的成本高
  • 以及升級(jí)架構(gòu)的復(fù)雜度也會(huì)增大
  • 這樣就有后續(xù)的分布式架構(gòu)系統(tǒng)。 如下:

    6.2 分布式架構(gòu)


    何謂分布式系統(tǒng):
    通俗一點(diǎn):就是一個(gè)請(qǐng)求由服務(wù)器端的多個(gè)服務(wù)(服務(wù)或者系統(tǒng))協(xié)同處理完成
    和單體架構(gòu)不同的是,單體架構(gòu)是一個(gè)請(qǐng)求發(fā)起 jvm調(diào)度線程(確切的是 tomcat線程池)分配線程 Thread來(lái)處理請(qǐng)求直到釋放,而分布式系統(tǒng)是:一個(gè)請(qǐng)求時(shí)由多個(gè)系統(tǒng)共同來(lái)協(xié)同完成,jvm和環(huán)境都可能是獨(dú)立。如果生活中的比喻的話,單體架構(gòu)就像建設(shè)一個(gè)小房子很快就能夠搞定,如果你要建設(shè)一個(gè)鳥(niǎo)巢或者大型的建筑,你就必須是各個(gè)環(huán)節(jié)的協(xié)同和分布,這樣目的也是項(xiàng)目發(fā)展到后期的時(shí)候要去部署和思考的問(wèn)題。我們也不難看出來(lái):分布式架構(gòu)系統(tǒng)存在的特點(diǎn)和問(wèn)題如下:

    存在問(wèn)題:

  • 學(xué)習(xí)成本高,技術(shù)棧過(guò)多
  • 運(yùn)維成本和服務(wù)器成本增高
  • 人員的成本也會(huì)增高
  • 項(xiàng)目的負(fù)載度也會(huì)上升
  • 面臨的錯(cuò)誤和容錯(cuò)性也會(huì)成倍增加
  • 占用的服務(wù)器端口和通訊的選擇的成本高
  • 安全性的考慮和因素逼迫可能選擇 RMI/MQ相關(guān)的服務(wù)器端通訊
  • 好處:

  • 服務(wù)系統(tǒng)的獨(dú)立,占用的服務(wù)器資源減少和占用的硬件成本減少,確切的說(shuō)是:可以合理的分配服務(wù)資源,不造成服務(wù)器資源的浪費(fèi)
  • 系統(tǒng)的獨(dú)立維護(hù)和部署,耦合度降低,可插拔性
  • 系統(tǒng)的架構(gòu)和技術(shù)棧的選擇可以變的靈活(而不是單純地選擇 java)
  • 彈性的部署,不會(huì)造成平臺(tái)因部署造成的癱瘓和停服的狀態(tài)
  • 6.3 基于消息中間件的分布式系統(tǒng)的架構(gòu)

    沒(méi)有加一層解決不了的事情!

    從上圖中可以看出來(lái),消息中間件的是

  • 利用可靠的消息傳遞機(jī)制進(jìn)行系統(tǒng)和系統(tǒng)直接的通訊
  • 通過(guò)提供消息傳遞消息的派對(duì)機(jī)制,它可以在分布式系統(tǒng)環(huán)境下擴(kuò)展進(jìn)程間的通訊
  • 7. 消息中間件應(yīng)用的場(chǎng)景

  • 跨系統(tǒng)數(shù)據(jù)傳遞
  • 高并發(fā)的流量削峰
  • 數(shù)據(jù)的并發(fā)和異步處理
  • 大數(shù)據(jù)分析與傳遞
  • 分布式事務(wù)
  • 比如你有一個(gè)數(shù)據(jù)要進(jìn)行遷移或者請(qǐng)求并發(fā)過(guò)多的時(shí)候,比如你有10 W的并發(fā)請(qǐng)求下訂單,我們可以在這些訂單入庫(kù)之前,我們可以把訂單請(qǐng)求堆積到消息隊(duì)列中,讓它穩(wěn)健可靠的入庫(kù)和執(zhí)行


    8. 常見(jiàn)的消息中間件

    ActiveMQ、RabbitMQ、Kafka、RocketMQ等

    9. 消息中間件的本質(zhì)及設(shè)計(jì)

    它是一種接受數(shù)據(jù)、接受請(qǐng)求、存儲(chǔ)數(shù)據(jù)、發(fā)送數(shù)據(jù)等功能的技術(shù)服務(wù)

    MQ消息隊(duì)列:負(fù)責(zé)數(shù)據(jù)的傳接受,存儲(chǔ)和傳遞,所以性能要高于普通服務(wù)和技術(shù)

    誰(shuí)來(lái)生產(chǎn)消息,存儲(chǔ)消息和消費(fèi)消息呢?

    10. 消息中間件的核心組成部分

  • 消息的協(xié)議
  • 消息的持久化機(jī)制
  • 消息的分發(fā)策略
  • 消息的高可用,高可靠
  • 消息的容錯(cuò)機(jī)制
  • 11. 小結(jié)

    其實(shí)不論選擇單體架構(gòu)還是分布式架構(gòu)都是項(xiàng)目開(kāi)發(fā)的一個(gè)階段,在什么階段選擇合適的架構(gòu)方式,而不能盲目追求,最后造成的后果和問(wèn)題都需要自己買單。但作為一個(gè)開(kāi)發(fā)人員學(xué)習(xí)和探討新的技術(shù)使我們每個(gè)程序開(kāi)發(fā)者都應(yīng)該去保持和思考的問(wèn)題。當(dāng)我們沒(méi)辦法去改變社會(huì)和世界的時(shí)候,我們?yōu)榱松詈蜕婺蔷捅仨氁掀髽I(yè)和市場(chǎng)的需求,發(fā)揮你的價(jià)值和所學(xué)的才能,創(chuàng)造價(jià)值和實(shí)現(xiàn)自我。

    總結(jié)

    以上是生活随笔為你收集整理的了解中间件与消息中间件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。