阿里消息队列rocketmq 一道真实的阿里面试题:如何保证消息队列的高可用性?
一道真实的阿里面试题:如何保证消息队列的高可用性?
如果有人询问您的MQ知识,那么高可用性是必须的。如前一节课所述,MQ会导致系统可用性的降低。因此,只要您使用MQ,下一个关键点就是如何解决MQ的缺点。
如果您愚蠢地使用MQ,并且从未考虑过各种问题,那么您将拥有一个杯子。面试官对你的感觉是,他只会不假思索地使用一些简单的技巧,不会马上给你留下好印象。如果招到这样的学生,工资不到两万的普通小弟还可以,但工资两万的高级工就惨了,让我们设计一个制度,里面肯定有很多漏洞。如果发生事故,公司将蒙受损失,团队将共同承担责任。
这是一个好问题,因为我不能问你如何保证卡夫卡的高可用性?如何保证ActiveMQ的高可用性?如果面试官这样问,似乎他很穷。人们可以使用拉比MQ,但他从未使用过卡夫卡。你为什么上来问卡夫卡?这不是一场表演。
所以高水平的面试官问如何保证MQ的高可用性?通过这种方式,您可以告诉我们您对MQ的高可用性的理解。
rabbitmq的高可用性
rabbitmq具有代表性,因为它基于主从(非分布式)高可用性。我们以rabbitmq为例来说明如何实现第一个MQ的高可用性。
Rabbitmq有三种模式:独立模式、公共群集模式和镜像群集模式。
独立模式
独立模式是演示级别。一般来说,您从本地开始播放,没有人使用独立模式进行生产。
普通群集模式(无高可用性)
普通群集模式,这意味着在多台机器上启动多个rabbitmq实例,每台机器一个。您创建的队列只会放置在一个rabbitmq实例上,但是每个实例都会同步队列的元数据(元数据可以看作是队列的一些配置信息,通过元数据可以找到队列的实例)。当您使用时,实际上,如果您连接到另一个实例,该实例将从队列实例中提取数据。
常见的消息队列有哪些,它们之间有什么区别?
Rabbitmq:
Rabbitmq是一个基于Erlang语言的开源消息队列。Rabbitmq在数据一致性、稳定性和可靠性方面都非常优秀。它直接或间接地支持多种协议,并能很好地支持多种语言。然而,它的性能和吞吐量并不令人满意。由于Erlang语言的局限性,二次开发的成本很高。
Kafka:
Kafka是LinkedIn于2010年12月开发的分布式流媒体平台,开源。它现在是Apache的顶级项目,是一个高性能的跨语言分布式流媒体平台。快速持久化,消息持久化开销在O(1)以下;高吞吐量
ActiveMQ:
是Apache下的一个子项目,介于zeromq和rabbitmq之间。与rabbitmq类似,它可以用少量代码高效地实现高级应用场景,并且只需要较低的成本。被称为消息中间件的“瑞士军刀”。然而,ActiveMQ不够轻量级,并且当有许多队列时,它不能很好地支持。据说也有丢失信息的情况。
Rocketmq:
Rocketmq是阿里巴巴的开源消息中间件。它目前在Apache中孵化,并在纯Java中开发。它具有高吞吐量、高可用性,适合大规模分布式计算
阿里消息队列rocketmq 阿里云mq消息队列 阿里rocketmq文档
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。