MQ概念
MQ
1.消息队列可以简单理解为:把要传输的数据放在队列中。用来降低Web服务器因发送消息而导致的负载和延时问题。
2.为什么用MQ(MQ优点):解耦、异步、削峰/限流、高可用、防数据丢失。
1)解耦举例:订单系统下单,需要调用支付系统、物流系统、库存系统、积分系统等等一批。物流系统宕机,整个一串全完。使用MQ,只需要物流系统修复后从MQ中读取消息进行处理,其他系统正常运行。
2)异步举例:订单系统下单,需要调用支付系统、物流系统、库存系统、积分系统等等一批。导致订单提交耗时很长。使用MQ,订单系统推送到MQ,然后结束,其他系统接收消息后自行处理。
3)削峰/限流:并发量大系统,假设每秒钟并发1万次,一台服务器每秒钟处理1百次,共10台机器。可以使用MQ每次处理1百,其他的排队等待。
4)高可用:MQ用来削峰,一但宕机,全完蛋,这就需要支持集群。
5)防数据丢失:MQ运行着,各种原因导致宕机,要防止数据丢失。MQ可把数据持久化到磁盘上。
版本比较
ActiveMQ
多用于传统企业,对高并发、高吞吐、高负载要求不高的,且版本的迭代速度比较慢,目前是几个月迭代一个小版本。
RabbitMQ
多用于中型企业,支持万级的吞吐,可以保证数据不丢失,有可视化的数据管理页面,版本迭代速度比较快,缺点是用erlang语言开发的,源码分析较难,难以二次开发。
RocketMQ
阿里开发的,用的是Java语言,支持十万级的吞吐,可以做分布式的,缺点是如果阿里放弃此技术,公司又没有研究源码的人,那后续出现的问题不好解决。
Kafka
是apache开源的消息队列项目,多用于大数据,有超高的吞吐量,如实时日志采集、实时数据同步、实时数据计算等。
RabbitMQ和Kafka比对:
Kafka作为消息传输的数据管道,RabbitMQ作为交易数据作为数据传输管道,主要的取舍因素则是是否存在丢数据的可能;RabbitMQ在金融场景中经常使用,具有较高的严谨性,数据丢失的可能性更小,同时具备更高的实时性;而kafka优势主要体现在吞吐量上,虽然可以通过策略实现数据不丢失,但从严谨性角度来讲,大不如RabbitMQ;由于Kafka保证每条消息最少送达一次,有较小的概率会出现数据重复发送的情况;Kafka的设计初衷就是处理日志。