rabiitmq
Rabbitmq集群高可用
RabbitMQ是用erlang開發(fā)的,集群非常方便,因為erlang天生就是一門分布式語言,但其本身并不支持負(fù)載均衡。
Rabbit模式大概分為以下三種:單一模式、普通模式、鏡像模式
單一模式:最簡單的情況,非集群模式。
沒什么好說的。
普通模式:默認(rèn)的集群模式。
對于Queue來說,消息實體只存在于其中一個節(jié)點,A、B兩個節(jié)點僅有相同的元數(shù)據(jù),即隊列結(jié)構(gòu)。
當(dāng)消息進(jìn)入A節(jié)點的Queue中后,consumer從B節(jié)點拉取時,RabbitMQ會臨時在A、B間進(jìn)行消息傳輸,把A中的消息實體取出并經(jīng)過B發(fā)送給consumer。
所以consumer應(yīng)盡量連接每一個節(jié)點,從中取消息。即對于同一個邏輯隊列,要在多個節(jié)點建立物理Queue。否則無論consumer連A或B,出口總在A,會產(chǎn)生瓶頸。
該模式存在一個問題就是當(dāng)A節(jié)點故障后,B節(jié)點無法取到A節(jié)點中還未消費的消息實體。
如果做了消息持久化,那么得等A節(jié)點恢復(fù),然后才可被消費;如果沒有持久化的話,然后就沒有然后了……
鏡像模式:把需要的隊列做成鏡像隊列,存在于多個節(jié)點,屬于RabbitMQ的HA方案。
該模式解決了上述問題,其實質(zhì)和普通模式不同之處在于,消息實體會主動在鏡像節(jié)點間同步,而不是在consumer取數(shù)據(jù)時臨時拉取。
該模式帶來的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊列數(shù)量過多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會被這種同步通訊大大消耗掉。
所以在對可靠性要求較高的場合中適用(后面會詳細(xì)介紹這種模式,目前我們搭建的環(huán)境屬于該模式)
?
轉(zhuǎn)載于:https://www.cnblogs.com/wcLT/p/4598836.html
總結(jié)
- 上一篇: 利用STM32F唯一96bit序列号实现
- 下一篇: onkeyup,onkeydown和on