如果把四个消息队列都拉到一个群里,他们会聊些什么?
共 2071字,需浏览 5分钟
·
2020-10-21 19:58
这是我的第 64 篇原创文章
作者 | 悟空聊架构
来源 | 悟空聊架构(ID:PassJava666)
本篇的灵感来自我超级喜欢的一篇文章:《如果把中国 442 位皇帝都放在一个群里面,他们会聊些什么》。
其实我的第一篇文章就是用这种方式写的《悟空聊无事务》,这也是我的公众号名字的来源,叫做:「悟空聊架构」 。
本篇也会以 「群聊、单聊、朋友圈」 的方式来讲解计算机世界中消息队列
的一些奇闻趣事。
从事软件开发的同学,一定都听过或用过消息队列,比如 RabbitMQ,Kafka。消息队列简单来说就是生产者将很多消息放到一个队列结构中,由其他消费者来消费。想了解更多队列
的知识,看下我之前写的 18 个 Queue 的文章,保证整的明明白白。传送门:45张图庖丁解牛18种Queue。
那如果把常见的四大消息队列拉到一个群里,会碰出哪些火花呢?
被嫌弃
四大队列被中间件大队长
拉到了一个群里面。
群名:悟空聊架构群。
成员数:25 个。
管理员:中间件大队长。
群主:神秘悟空哥。
大家来感受下他们的聊天界面吧~
???
RabbitMQ 单独找中间件大队长聊天的画面。
涉及的故事:
Erlang 是啥? 并非一门新语言,出现于 1987 年。并不是面向对象语言。 函数式编程,基于进程并发,高并发、分布式是它的优势。 由爱立信制造商专门为通信应用设计,在国内主要是游戏领域用到。 Erlang 为啥会被其他队列嫌弃? 因为 RocketMQ、ActiveMQ 都是用 Java 实现的,Kafka 是用 Scale 和 Java 实现的,这三种消息队列从语言实现上都有些类似。 在国内现如今超流行的 Java 的技术生态中,懂 Java 又懂 Erlang 的就比较少了,愿意花时间和精力在 Erlang 上面的就更少了。
快和慢
涉及的故事:
他们讨论的低延迟是啥? 就是说这个消息队列的响应速度是非常快的,比如插入一条消息,可以很快的返回插入结果。可以理解为反射弧比较短。而RabbitMQ 的低延迟达到微秒级,而另外三个队列都是毫秒级。 他们讨论的吞吐量是啥? 吞吐量:系统在单位时间内处理请求的数量。 RocketMQ 自称火箭,肯定是有他的道理的,因为他的处理请求的速度快呀!吞吐量可以达到 10 万级,而另外两个队列都是万级。
无界面 vs 社区别凉
他们聊的操作界面又是啥?
RabbitMQ、ActiveMQ、Kafka 都是有界面来操作队列或消息的,而 RocketMQ 就比较坑了, 只提供了命令行工具,这对于长期使用 windows 的用户确实很难受呀。
他们说的阿里出品又是啥?
RocketMQ 由大厂阿里出品,已捐给 Apache 开源社区,活跃度不算高,会不会没人修 bug 了? RabbitMQ 有活跃的开源社区,总能找到修 bug 的,你愿意用哪个?大厂推荐用 RocketMQ,可以自己折腾,小一点的还是用 RabbitMQ 吧,节省解决问题的成本。
mysql 的朋友圈
点开图片后查看大图,mysql 不会飞
的朋友圈如下:
中间件大队长
邀请 mysql 不会飞
进入了群聊。
涉及的故事:
消息队列常用在解耦、削峰、异步场景中。先对这几个点来个大白话扫盲:
悟空大白话削峰:关键词:「别都丢给我!」 比如双十一期间超多用户下单,假如 10万个请求都到数据库了,数据库一下子是扛不住这么多请求的,那么消息队列来解围,把请求丢到消息队列,订单服务从消息队列拿消息处理订单请求,起到了一个缓冲的作用,这样对数据库的压力就小多了。
悟空大白话解耦:关键词:「谁用谁拿」 。A 系统需要将数据传给 B、C、D、E 系统,A 系统时刻需要考虑 B、C、D、E 四个系统如果宕机了怎么办?要不要重发,要不要消息持久化存起来?A 系统要考虑的问题太多了,可把 A 系统累坏了。这就是一种高耦合的现象,BCDE 四个系统强依赖 A 系统。那怎么解耦?A 系统将数据丢到消息队列,BCDE 系统自己想要数据的时候就去消息队列里面拿。
悟空大白话异步:关键词:「先去忙你的吧~」 。比如下一笔订单,从订单支付到订单成功,这个闭环可能很长,比如要发送订单成功消息、赠送优惠券等等操作,用户等待的时间可能很久,用户体验就不好了,那怎么解决呢?可以将下单成功的消息丢到队列里面,快速返回订单成功,然后告知用户,消息触达系统再从队列里面拿到订单数据,依次给用户发送订单消息和优惠券就行了,这个就是异步。
消息队列的尴尬
四大消息队列都默默地去看这篇文章去了,听说这篇文章被大佬们转载了 19 次。