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