亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

關(guān)于MQ的幾件小事(一)消息隊(duì)列的用途、優(yōu)缺點(diǎn)、技術(shù)選型

xialong / 3665人閱讀

摘要:數(shù)量對(duì)吞吐量的影響可以達(dá)到幾百幾千個(gè)的級(jí)別,吞吐量會(huì)有小幅度的下降。這是的一大優(yōu)勢(shì),可在同等數(shù)量機(jī)器下支撐大量的從幾十個(gè)到幾百個(gè)的時(shí)候,吞吐量會(huì)大幅下降。下一篇如何保證消息隊(duì)列的高可用

1.為什么使用消息隊(duì)列?

(1)解耦:可以在多個(gè)系統(tǒng)之間進(jìn)行解耦,將原本通過(guò)網(wǎng)絡(luò)之間的調(diào)用的方式改為使用MQ進(jìn)行消息的異步通訊,只要該操作不是需要同步的,就可以改為使用MQ進(jìn)行不同系統(tǒng)之間的聯(lián)系,這樣項(xiàng)目之間不會(huì)存在耦合,系統(tǒng)之間不會(huì)產(chǎn)生太大的影響,就算一個(gè)系統(tǒng)掛了,也只是消息擠壓在MQ里面沒(méi)人進(jìn)行消費(fèi)而已,不會(huì)對(duì)其他的系統(tǒng)產(chǎn)生影響。

(2)異步:加入一個(gè)操作設(shè)計(jì)到好幾個(gè)步驟,這些步驟之間不需要同步完成,比如客戶去創(chuàng)建了一個(gè)訂單,還要去客戶軌跡系統(tǒng)添加一條軌跡、去庫(kù)存系統(tǒng)更新庫(kù)存、去客戶系統(tǒng)修改客戶的狀態(tài)等等。這樣如果這個(gè)系統(tǒng)都直接進(jìn)行調(diào)用,那么將會(huì)產(chǎn)生大量的時(shí)間,這樣對(duì)于客戶是無(wú)法接收的;并且像添加客戶軌跡這種操作是不需要去同步操作的,如果使用MQ將客戶創(chuàng)建訂單時(shí),將后面的軌跡、庫(kù)存、狀態(tài)等信息的更新全都放到MQ里面然后去異步操作,這樣就可加快系統(tǒng)的訪問(wèn)速度,提供更好的客戶體驗(yàn)。

(3)削峰:一個(gè)系統(tǒng)訪問(wèn)流量有高峰時(shí)期,也有低峰時(shí)期,比如說(shuō),中午整點(diǎn)有一個(gè)搶購(gòu)活動(dòng)等等。比如系統(tǒng)平時(shí)流量并不高,一秒鐘只有100多個(gè)并發(fā)請(qǐng)求,系統(tǒng)處理沒(méi)有任何壓力,一切風(fēng)平浪靜,到了某個(gè)搶購(gòu)活動(dòng)時(shí)間,系統(tǒng)并發(fā)訪問(wèn)了劇增,比如達(dá)到了每秒5000個(gè)并發(fā)請(qǐng)求,而我們的系統(tǒng)每秒只能處理2000個(gè)請(qǐng)求,那么由于流量太大,我們的系統(tǒng)、數(shù)據(jù)庫(kù)可能就會(huì)崩潰。這時(shí)如果使用MQ進(jìn)行流量削峰,將用戶的大量消息直接放到MQ里面,然后我們的系統(tǒng)去按自己的最大消費(fèi)能力去消費(fèi)這些消息,就可以保證系統(tǒng)的穩(wěn)定,只是可能要跟進(jìn)業(yè)務(wù)邏輯,給用戶返回特定頁(yè)面或者稍后通過(guò)其他方式通知其結(jié)果。

2.消息隊(duì)列有什么優(yōu)點(diǎn)和缺點(diǎn)?

優(yōu)點(diǎn):1、對(duì)結(jié)構(gòu)復(fù)雜、設(shè)計(jì)系統(tǒng)多的操作進(jìn)行解耦操作,降低系統(tǒng)的操作復(fù)雜度、降低系統(tǒng)的維護(hù)成本。 ???2、對(duì)一個(gè)可以進(jìn)行異步操作的一些系統(tǒng)操作進(jìn)行異步,減小操作的響應(yīng)時(shí)間,提供更好的用戶體驗(yàn)。 ???3、可對(duì)高流量進(jìn)行削峰,保證系統(tǒng)的平穩(wěn)運(yùn)行。 缺點(diǎn):1、系統(tǒng)可用性降低。比如在系統(tǒng)中引入MQ,那么萬(wàn)一MQ掛了怎么辦呢?一般而言,引入的外部依賴越多,系統(tǒng)越
????脆弱,每一個(gè)依賴出問(wèn)題都會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰。 ???2、系統(tǒng)復(fù)雜度提高。需要考慮MQ的各種情況,比如:消息的重復(fù)消費(fèi)、消息丟失、保證消費(fèi)順序等等...... ???3、數(shù)據(jù)一致性問(wèn)題。比如A系統(tǒng)已經(jīng)給客戶返回操作成功,這時(shí)候操作BC都成功了,操作D卻失敗了,導(dǎo)致數(shù)據(jù)不
????一致。

3.kafka、activemq、rabbitmq、rocketmq都有什么優(yōu)點(diǎn)和缺點(diǎn)啊?
特性 ActiveMQ RabbitMQ RocketMQ kafka
單機(jī)吞吐量 萬(wàn)級(jí),吞吐量比RocketMQ和kafka要低一個(gè)數(shù)量級(jí) 萬(wàn)級(jí),吞吐量比RocketMQ和kafka要低一個(gè)數(shù)量級(jí) 10萬(wàn)級(jí),RocketMQ也是可以支撐高吞吐的一種MQ 10萬(wàn)級(jí)別,kafka最大優(yōu)點(diǎn)就是吞吐量大,一般配合大數(shù)據(jù)類的系統(tǒng)來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)計(jì)算、日志采集等場(chǎng)景。
topic數(shù)量對(duì)吞吐量的影響 topic可以達(dá)到幾百、幾千個(gè)的級(jí)別,吞吐量會(huì)有小幅度的下降。這是RocketMQ的一大優(yōu)勢(shì),可在同等數(shù)量機(jī)器下支撐大量的topic topic從幾十個(gè)到幾百個(gè)的時(shí)候,吞吐量會(huì)大幅下降。所以在同等機(jī)器數(shù)量下,kafka盡量保證topic數(shù)量不要過(guò)多。如果支撐大規(guī)模topic需要增加更多的機(jī)器
時(shí)效性 ms級(jí) 微秒級(jí),這是rabbitmq的一大特點(diǎn),延遲是最低的 ms級(jí) 延遲在ms級(jí)以內(nèi)
可用性 高,基于主從架構(gòu)實(shí)現(xiàn)可用性 高,基于主從架構(gòu)實(shí)現(xiàn)可用性 非常高,分布式架構(gòu) 非常高,kafka是分布式的,一個(gè)數(shù)據(jù)多個(gè)副本,少數(shù)機(jī)器宕機(jī),不會(huì)丟失數(shù)據(jù),不會(huì)導(dǎo)致不可用
消息可靠性 有較低的概率丟失數(shù)據(jù) 經(jīng)過(guò)參數(shù)優(yōu)化配置,可以做到0丟失 經(jīng)過(guò)參數(shù)配置,消息可以做到零丟失
功能支持 MQ領(lǐng)域的功能及其完備 基于erlang開(kāi)發(fā),所以并發(fā)性能極強(qiáng),性能極好,延時(shí)低 MQ功能較為完備,分布式擴(kuò)展性好 功能較為簡(jiǎn)單,主要支持加單MQ功能
優(yōu)勢(shì) 非常成熟,功能強(qiáng)大,在業(yè)內(nèi)大量公司和項(xiàng)目中都有應(yīng)用 erlang語(yǔ)言開(kāi)發(fā),性能極好、延時(shí)很低,吞吐量萬(wàn)級(jí)、MQ功能完備,管理界面非常好,社區(qū)活躍;互聯(lián)網(wǎng)公司使用較多 接口簡(jiǎn)單易用,阿里出品有保障,吞吐量大,分布式擴(kuò)展方便、社區(qū)比較活躍,支持大規(guī)模的topic、支持復(fù)雜的業(yè)務(wù)場(chǎng)景,可以基于源碼進(jìn)行定制開(kāi)發(fā) 超高吞吐量,ms級(jí)的時(shí)延,極高的可用性和可靠性,分布式擴(kuò)展方便
劣勢(shì) 偶爾有較低概率丟失消息,社區(qū)活躍度不高 吞吐量較低,erlang語(yǔ)音開(kāi)發(fā)不容易進(jìn)行定制開(kāi)發(fā),集群動(dòng)態(tài)擴(kuò)展麻煩 接口不是按照標(biāo)準(zhǔn)JMS規(guī)范走的,有的系統(tǒng)遷移要修改大量的代碼,技術(shù)有被拋棄的風(fēng)險(xiǎn) 有可能進(jìn)行消息的重復(fù)消費(fèi)
應(yīng)用 主要用于解耦和異步,較少用在大規(guī)模吞吐的場(chǎng)景中 都有使用 用于大規(guī)模吞吐、復(fù)雜業(yè)務(wù)中 在大數(shù)據(jù)的實(shí)時(shí)計(jì)算和日志采集中被大規(guī)模使用,是業(yè)界的標(biāo)準(zhǔn)

綜上所述,總結(jié)如下: 一般業(yè)務(wù)系統(tǒng)要引入MQ,最早大家都用ActiveMQ,但現(xiàn)在用的不多了。沒(méi)有經(jīng)過(guò)大規(guī)模吞吐場(chǎng)景的驗(yàn)證,社區(qū)也不活躍,不推薦再使用。 后來(lái)大家開(kāi)始用rabbitMQ,但是它是使用erlang語(yǔ)言開(kāi)發(fā)的,如果不精通erlang,對(duì)公司而言,幾乎處于不可控的狀態(tài),單其是開(kāi)源的,社區(qū)活躍度高,擁有比較穩(wěn)定的支持。 現(xiàn)在越來(lái)越多的公司開(kāi)始使用RocketMQ,但是要小心被拋棄的風(fēng)險(xiǎn)。如果公司有實(shí)力自己去維護(hù)開(kāi)發(fā),推薦使用。否則還是選擇RabbitMQ。 如果實(shí)在大數(shù)據(jù)的實(shí)時(shí)計(jì)算、日志采集等領(lǐng)域,用kafka是業(yè)界標(biāo)準(zhǔn)。

所以,對(duì)于中小型公司,技術(shù)實(shí)力一般的,應(yīng)該用rabbitmq,對(duì)于大公司,基礎(chǔ)架構(gòu)研發(fā)能力強(qiáng)大的,推薦使用RocketMQ。

下一篇《如何保證消息隊(duì)列的高可用》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/7221.html

相關(guān)文章

  • 關(guān)于MQ幾件小事(七)如果讓你設(shè)計(jì)個(gè)MQ,你怎么設(shè)計(jì)

    摘要:能不能支持?jǐn)?shù)據(jù)丟失啊可以的,參考我們之前說(shuō)的那個(gè)數(shù)據(jù)零丟失方案其實(shí)一個(gè)肯定是很復(fù)雜的,其實(shí)這是個(gè)開(kāi)放題,就是看看你有沒(méi)有從架構(gòu)角度整體構(gòu)思和設(shè)計(jì)的思維以及能力。其實(shí)回答這類問(wèn)題,說(shuō)白了,起碼不求你看過(guò)那技術(shù)的源碼,起碼你大概知道那個(gè)技術(shù)的基本原理,核心組成部分,基本架構(gòu)構(gòu)成,然后參照一些開(kāi)源的技術(shù)把一個(gè)系統(tǒng)設(shè)計(jì)出來(lái)的思路說(shuō)一下就好 比如說(shuō)這個(gè)消息隊(duì)列系統(tǒng),我們來(lái)從以下幾個(gè)角度來(lái)考慮一下 (1...

    Vixb 評(píng)論0 收藏0
  • 關(guān)于MQ幾件小事(六)消息積壓在消息隊(duì)列里怎么辦

    摘要:緊接著征用倍的機(jī)器來(lái)部署,每一批消費(fèi)一個(gè)臨時(shí)的消息。這種做法相當(dāng)于臨時(shí)將資源和資源擴(kuò)大倍,以正常速度的倍來(lái)消費(fèi)消息。解決方案這種情況下,實(shí)際上沒(méi)有什么消息擠壓,而是丟了大量的消息。 1.大量消息在mq里積壓了幾個(gè)小時(shí)了還沒(méi)解決 場(chǎng)景: 幾千萬(wàn)條數(shù)據(jù)在MQ里積壓了七八個(gè)小時(shí),從下午4點(diǎn)多,積壓到了晚上很晚,10點(diǎn)多,11點(diǎn)多。線上故障了,這個(gè)時(shí)候要不然就是修復(fù)consumer的問(wèn)題,讓他恢復(fù)消...

    SwordFly 評(píng)論0 收藏0
  • 關(guān)于MQ幾件小事(五)如何保證消息按順序執(zhí)行

    摘要:一個(gè)對(duì)應(yīng)一個(gè),但是里面進(jìn)行了多線程消費(fèi),這樣也會(huì)造成消息消費(fèi)順序錯(cuò)誤。保證消息的消費(fèi)順序拆分多個(gè),每個(gè)一個(gè),就是多一些而已,確實(shí)是麻煩點(diǎn)這樣也會(huì)造成吞吐量下降,可以在消費(fèi)者內(nèi)部采用多線程的方式取消費(fèi)。 1.為什么要保證順序 消息隊(duì)列中的若干消息如果是對(duì)同一個(gè)數(shù)據(jù)進(jìn)行操作,這些操作具有前后的關(guān)系,必須要按前后的順序執(zhí)行,否則就會(huì)造成數(shù)據(jù)異常。舉例: 比如通過(guò)mysql binlog進(jìn)行兩個(gè)數(shù)據(jù)...

    h9911 評(píng)論0 收藏0
  • 關(guān)于MQ幾件小事(四)如何保證消息不丟失

    摘要:消費(fèi)端弄丟了數(shù)據(jù)關(guān)閉自動(dòng)提交,在自己處理完畢之后手動(dòng)提交,這樣就不會(huì)丟失數(shù)據(jù)。弄丟了數(shù)據(jù)一般要求設(shè)置個(gè)參數(shù)來(lái)保證消息不丟失給設(shè)置參數(shù)這個(gè)值必須大于,表示要求每個(gè)必須至少有個(gè)副本。上一篇如何保證消息不重復(fù)消費(fèi)下一篇如何保證消息按順序執(zhí)行 1.mq原則 數(shù)據(jù)不能多,也不能少,不能多是說(shuō)消息不能重復(fù)消費(fèi),這個(gè)我們上一節(jié)已解決;不能少,就是說(shuō)不能丟失數(shù)據(jù)。如果mq傳遞的是非常核心的消息,支撐核心的業(yè)...

    stackvoid 評(píng)論0 收藏0
  • 關(guān)于redis幾件小事(三)redis數(shù)據(jù)類型與使用場(chǎng)景

    摘要:這個(gè)是類似的一種結(jié)構(gòu),這個(gè)一般就是可以將結(jié)構(gòu)化的數(shù)據(jù),比如一個(gè)對(duì)象前提是這個(gè)對(duì)象沒(méi)嵌套其他的對(duì)象給緩存在里,然后每次讀寫(xiě)緩存的時(shí)候,可以就操作里的某個(gè)字段。 1.string 這是最基本的類型了,就是普通的set和get,做簡(jiǎn)單的kv緩存。 2.hash 這個(gè)是類似map的一種結(jié)構(gòu),這個(gè)一般就是可以將結(jié)構(gòu)化的數(shù)據(jù),比如一個(gè)對(duì)象(前提是這個(gè)對(duì)象沒(méi)嵌套其他的對(duì)象)給緩存在redis里,然后每次...

    zhaochunqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<