为什么RabbitMQ性能高

底层语言是Erlang(Ericsson Language), 是一门为交换机软件开发的编程语言。

Erlang优势:

  1. 高并发的编程语言,适合分布式系统。
  2. 跨平台,虚拟机解释运行。
  3. 进程间上下文切换性能高。(cpu在并行时候,是假并行,其实是串行的,进程间要切换的运行,所以进程间切换的效率,就决定了这个语言多线程并行的能力)
  4. 和Socket一样的速度。(也就是应用靠的是TCP这一层连接,TCP就决定了消息中间件的性能)

MQ = Message Queue

ActiveMQ

activemq

上世纪90年代的产品,比较老,Apache出品,Java开发。对Java用户友好,并且方便java二开。
优点:

  1. 跨平台(java)。
  2. 用jdbc连接多种数据库。
  3. 完善监控和安全机制。(有界面)
  4. 自动重连和错误重试

缺点:

  1. 目前不活跃
  2. 不适合队列规模较大的应用场景(比如上千个队列)
RabbitMQ

rabbitmq_logo

这个是2007年左右开始做的,而且应用也很广泛,
高可靠,高可用,支持发送确认,支持投递确认,
支持镜像队列(一份数据存储在多个节点,保证数据可靠性)
优点:

  1. 支持高并发。
  2. 支持多种客户端,多平台。
  3. 文档齐全。
  4. 社区活跃,应用广泛。

缺点:

  1. erlang语言小众。
  2. amqp协议,有学习成本。(我们会用最短的时间,让大家上手RabbitMQ)
RocketMQ

rocketmq

这个是阿里研发的,后来给了apache,复杂度高,
有nameserver,有服务发现,服务注册,集群架构,是一个大规模业务设计,经受了双11的考验。
(如果没人特别熟悉这一大套东西,运维啊,系统使用啊,公司生产环境不会用的,就怕出问题,没人搞得定,rabbitmq性价比还是很不错的。)

Kafka

kafka_logo

大数据和日志收集。LinkedIn开发。性能高,扩展性好,复制,容错。
优点:

  1. 分布式系统
  2. 零拷贝技术(减少IO操作步骤,提高系统性能)
  3. 快速持久化(O(1)的复杂度)
  4. 支持批量发送和拉取。

缺点:

  1. 单机不建议超过64个分区。(性能明显下降)
  2. 短轮训模式。(轮询时间决定了实时性)
  3. 不支持重试(消费失败的时候)
  4. 可靠性不高(发1w条日志,少几条日志,没关系。适合大数据。)

RabbitMQ该如何学习

计算机学科是一个要求动手能力很强的学科,通过实战,用实际项目,把知识牢牢掌握住。

《Go语言+RabbitMQ实战课》-课程目录海报 《Go+RabbitMQ课程》-优惠券
添加微信 公众号更多内容
wechat gzh