阿里消息隊列rocketmq 一道真實的阿里面試題:如何保證消息隊列的高可用性?
一道真實的阿里面試題:如何保證消息隊列的高可用性?如果有人詢問您的MQ知識,那么高可用性是必須的。如前一節(jié)課所述,MQ會導致系統(tǒng)可用性的降低。因此,只要您使用MQ,下一個關(guān)鍵點就是如何解決MQ的缺點。
一道真實的阿里面試題:如何保證消息隊列的高可用性?
如果有人詢問您的MQ知識,那么高可用性是必須的。如前一節(jié)課所述,MQ會導致系統(tǒng)可用性的降低。因此,只要您使用MQ,下一個關(guān)鍵點就是如何解決MQ的缺點。
如果您愚蠢地使用MQ,并且從未考慮過各種問題,那么您將擁有一個杯子。面試官對你的感覺是,他只會不假思索地使用一些簡單的技巧,不會馬上給你留下好印象。如果招到這樣的學生,工資不到兩萬的普通小弟還可以,但工資兩萬的高級工就慘了,讓我們設(shè)計一個制度,里面肯定有很多漏洞。如果發(fā)生事故,公司將蒙受損失,團隊將共同承擔責任。
這是一個好問題,因為我不能問你如何保證卡夫卡的高可用性?如何保證ActiveMQ的高可用性?如果面試官這樣問,似乎他很窮。人們可以使用拉比MQ,但他從未使用過卡夫卡。你為什么上來問卡夫卡?這不是一場表演。
所以高水平的面試官問如何保證MQ的高可用性?通過這種方式,您可以告訴我們您對MQ的高可用性的理解。
rabbitmq的高可用性
rabbitmq具有代表性,因為它基于主從(非分布式)高可用性。我們以rabbitmq為例來說明如何實現(xiàn)第一個MQ的高可用性。
Rabbitmq有三種模式:獨立模式、公共群集模式和鏡像群集模式。
獨立模式
獨立模式是演示級別。一般來說,您從本地開始播放,沒有人使用獨立模式進行生產(chǎn)。
普通群集模式(無高可用性)
普通群集模式,這意味著在多臺機器上啟動多個rabbitmq實例,每臺機器一個。您創(chuàng)建的隊列只會放置在一個rabbitmq實例上,但是每個實例都會同步隊列的元數(shù)據(jù)(元數(shù)據(jù)可以看作是隊列的一些配置信息,通過元數(shù)據(jù)可以找到隊列的實例)。當您使用時,實際上,如果您連接到另一個實例,該實例將從隊列實例中提取數(shù)據(jù)。
常見的消息隊列有哪些,它們之間有什么區(qū)別?
Rabbitmq:
Rabbitmq是一個基于Erlang語言的開源消息隊列。Rabbitmq在數(shù)據(jù)一致性、穩(wěn)定性和可靠性方面都非常優(yōu)秀。它直接或間接地支持多種協(xié)議,并能很好地支持多種語言。然而,它的性能和吞吐量并不令人滿意。由于Erlang語言的局限性,二次開發(fā)的成本很高。
Kafka:
Kafka是LinkedIn于2010年12月開發(fā)的分布式流媒體平臺,開源。它現(xiàn)在是Apache的頂級項目,是一個高性能的跨語言分布式流媒體平臺。快速持久化,消息持久化開銷在O(1)以下;高吞吐量
ActiveMQ:
是Apache下的一個子項目,介于zeromq和rabbitmq之間。與rabbitmq類似,它可以用少量代碼高效地實現(xiàn)高級應(yīng)用場景,并且只需要較低的成本。被稱為消息中間件的“瑞士軍刀”。然而,ActiveMQ不夠輕量級,并且當有許多隊列時,它不能很好地支持。據(jù)說也有丟失信息的情況。
Rocketmq:
Rocketmq是阿里巴巴的開源消息中間件。它目前在Apache中孵化,并在純Java中開發(fā)。它具有高吞吐量、高可用性,適合大規(guī)模分布式計算