本篇的灵感来自我超级喜欢的一篇文章:《若是把中国 442 位皇帝都放在一个群里面,他们会聊些什么》。mysql
其实个人第一篇文章就是用这种方式写的《悟空聊无事务》,这也是个人公众号名字的来源,叫作:「悟空聊架构」 。面试
本篇也会以 「群聊、单聊、朋友圈」 的方式来说解计算机世界中消息队列
的一些奇闻趣事。sql
从事软件开发的同窗,必定都听过或用过消息队列,好比 RabbitMQ,Kafka。消息队列简单来讲就是生产者将不少消息放到一个队列结构中,由其余消费者来消费。想了解更多队列
的知识,看下我以前写的 18 个 Queue 的文章,保证整的明明白白。传送门:45张图庖丁解牛18种Queue。
数据库
那若是把常见的四大消息队列拉到一个群里,会碰出哪些火花呢?编程
被嫌弃
四大队列被中间件大队长
拉到了一个群里面。小程序
群名:悟空聊架构群。windows
成员数: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 次。传送门:这三年被分布式坑惨了,曝光十大坑
彩蛋
mysql不会飞
用到了周杰伦的歌曲:《超人不会飞》
Nigix阳光男孩
用到了周杰伦的歌曲:《阳光男孩》
拍一拍得到了棒棒糖
,来自于读者我是一颗糖波波
的微信昵称。
该架构聊天群成员数已经 26 个啦,成员有消息队列、各大数据库、分布式中间件,想进群来看一看他们的聊天吗?「在群里不说话都能进步哦~」 加我微信 PassJava
备注[加群]
写在最后
你猜我用了几个手机来作聊天截图?
你好,我是
悟空哥
,「7年项目开发经验,全栈工程师,开发组长,超喜欢图解编程底层原理」。
我还手写了 2 个小程序
,Java 刷题小程序
,PMP 刷题小程序
,点击个人公众号菜单打开!
另外有 111 本架构师资料以及 1000 道 Java 面试题,都整理成了PDF。
能够关注公众号 「悟空聊架构」 回复悟空
领取优质资料。
「转发->在看->点赞->收藏->评论!!!」 是对我最大的支持!
我是悟空哥,努力变强,变身超级赛亚人!咱们下期见!
本文同步分享在 博客“7年一线互联网经验,超爱图解底层原理,全栈一枚”(CNBlog)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。