MQ——从队列到消息中间件从队列到消息中间件
前言
消息中间件本质上就是一种很简单的数据结构——队列,但是一条队列肯定是当不成中间件的,你必须要考虑性能、容灾、可
靠性等等因素。这也给我的写作提供了一些思路,我将从队列开始,给你演示一条队列是如何进化成一个靠谱的中间件的。
消息中间件的实现有很多,有新贵Kafka、RocketMq,也有老牌劲旅RabbitMq和ActiveMq,不过我最后选择了Nsq来讲解,
因为它极简、清爽,用起来舒服,讲起来也好理解,更重要的是,通过对Nsq的学习,我们很容易扩展到消息中间件的通用层
面,对学习其他Mq,乃至优化和设计自己的Mq都有很大帮助。
这一系列的文章,将有以下这些topics:
为什么要使用消息中间件
如何从一条队列,进化成一个靠谱的消息中间件:这一节,将带你从演化的视角,认识Nsq的各个组件
Bringing It All Together:从微观层面了解完Nsq后,我们再从宏观的视角,把上一节学的东西串起来,看一条消息,是如何从
生产到被消费的
一些实现细节:从近到远的看完了Nsq,现在让我们再一次把镜头拉近,看看Nsq在处理一些细节问题上的智慧,这对我们理
解消息中间件,将有很大帮助
如何设计一个消息中间件:由近到远,由远及近,我们已经把Nsq看了个遍,是时候尝试总结一下,如何设计一个消息中间件
了
Nsq的不足:作为一个极简的Mq,Nsq肯定做不到的面面俱到,那么Nsq有哪些不足呢?
Nsq vs Kafka:Nsq的那些不足,Kafka几乎都给解决了,毕竟人家是重量级Mq,功能自然强大的多。虽然大多数业务,使用
Nsq已经可以解决问题,但还是了解一下,Kafka是怎么解决那些Nsq不屑于解决的问题吧~
有赞自研版Nsq:基于Nsq的一些不足,和对Kafka实现思路的借鉴,有赞对Nsq进行了自研开发,这一节,让我们了解一下有
赞的改进思路
…
为什么要使用消息中间件
假设我们在淘宝下了一笔订单后,淘宝后台需要做这些事情:
消息通知系统:通知商家,你有一笔新的订单,请及时发货
推荐系统:更新用户画像,重新给用户推荐他可能感兴趣的商品
会员系统:更新用户的积分和等级信息
…
于是一个创建订单的函数,至少需要取调用三个其他服务的接口,就像这样: