互聯網高級Java工程師訓練-如何保證MQ的高可用

RabbitMQ的高可用

RabbitMQ是基於主從做高可用的,RabbitMQ有三種模式:單機模式,普通集羣模式,鏡像集羣模式。

  • 單機模式
    一般用在本地,不會用在生產環境。

  • 普通集羣模式
    在多臺機器上啓動多個RabbitMQ實例,每個機器啓動一個,但是你創建的queue只會放在一個RabbitMQ實例上,每個實例都同步queue的元數據。消費者消費的時候,如果連接到了另外一個實例,那麼這個實例會從queue所在實例上拉取數據過來,這種模式不是分佈式,就是個普通集羣。因爲這導致你要麼消費者每次隨機連接一個實例然後拉取數據,要麼固定連接那個queue所在實例,前者有數據拉取的開銷,後者存在單實例性能瓶頸。而且那個queue所在實例宕機了,會導致其他實例無法拉取數據,如果開啓了消息持久化,讓RabbitMQ落地存儲消息的話,得等到這個實例恢復了,纔可以繼續從這個實例拉取數據。這樣也就沒有什麼高可用而言了,這種方案主要是提高吞吐量的,就是說讓集羣中多個節點來服務某個queue的讀寫操作。

  • 鏡像集羣模式
    RabbitMQ真正的高可用模式,你創建的queue的元數據和消息都會存儲在多個實例上,每次寫消息到queue的時候,都會自動把消息同步到多個實例queue裏。這樣的話如果有一個實例不可用,還有其他的實例可用。但是性能開銷太大,消息同步所有機器,導致網絡帶寬壓力和消耗很大。同時就也沒有什麼擴展性了,如果某個queue負載很重,即使加機器,新增的機器也包含了這個queue的所有數據,並沒有辦法線性擴展queue。不是分佈式的。

Kafka的高可用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章