分布式消息服务是一种用于在分布式系统中进行异步通信的技术。 拿个例子形象地来说,分布式消息服务比较像现在小区内的丰巢快递站,快递员(生产者)将快递(消息)放在丰巢(消息队列)后可以走了,等待小区住户(消费者)来拿(pull)或是由丰巢的人送货上门(push)。
一、为什么会有分布式消息服务
为什么会有分布式消息服务呢?也可以通过上面快递服务的例子来解释:
想象一下,您有一家全球快递公司,面临着庞大的包裹处理和交付任务。之前我们的快递员都是挨家挨户去送货上门,但是随着电商的流行,快递数量的剧增,如果还按照送货上门那样的方式,要么快递员应接不暇,我们能收到快递的速度大大降低,这对于用户来说是不可接受的;要么快递公司解决这个问题,增加大量的快递员去改善这个情况,但是这对于公司来说成本就大量增加,公司的成本最后也就摊到了用户上(这也是为什么京东顺丰会比其他快递公司贵的原因)。
在这种情况下,分布式消息服务(丰巢)的存在是至关重要的,原因如下:
1. 异步通信:当快递员将包裹交给丰巢时,丰巢不必等待每个包裹的接收者即时到达。快递员可以继续处理其他包裹,而丰巢将异步通知接收者,告诉他们包裹已准备好。由此减少了快递员(生产者)的工作量。
2. 解耦:丰巢不必直接与每个快递员或接收者进行实时通信。分布式消息服务就像一个中介,它解耦了快递员和小区住户(接收者)之间的通信。这样,公司可以独立管理和扩展包裹处理和通知服务,而不会直接与数千名上万快递员和接收者交互。
3. 伸缩性:随着业务的增长,丰巢需要处理更多的包裹和通知。分布式消息服务可以轻松扩展,添加更多的处理节点,以满足不断增加的工作负载,就像增加更多的丰巢快递柜。
4. 持久性:快递公司可以在丰巢快递站(消息队列)中存储包裹信息,以确保即使在快递员把包裹交给公司后,这些信息也不会丢失。如果有包裹丢失,公司可以查看丰巢快递站(消息队列)以找到记录。
5. 可靠性:分布式消息服务确保包裹通知可靠地到达接收者。即使小区住户(接收者)无法立刻接收包裹,消息服务会尝试再次通知他,确保包裹被成功交付。
总之,分布式消息服务就像一个高效、可靠、解耦的包裹传递系统,有助于处理大规模、异步的通信需求,同时提高了系统的可伸缩性和可靠性。
二、分布式服务的差异
像常用的分布式消息服务RocketMQ、Kafka和RabbitMQ,我们如何选择呢?放到上面我举得例子里可以这样理解他们之间的差异:
RocketMQ就像一个高效的快递服务中心。当快递员(生产者)将包裹(消息)交给服务中心,他们会迅速扫描并准备投递,然后可以继续下一个任务。而快递员无需等待接收者(消费者)亲自领取包裹,因为RocketMQ负责安排及时的投递。接收者可以在自己方便的时候前来领取包裹,就像在丰巢快递站一样。
Kafka更像一个完整的快递服务生态系统。每个包裹(消息)的传递都被详细记录,包括寄件人、收件人和传递时间。这个系统不仅提供了及时的快递,还提供了完整的历史记录,您可以随时查询包裹的状态。当快递员将包裹放入系统后,您可以跟踪包裹的位置和状态,确保它安全地送达目的地。
RabbitMQ就像一个友好的社区快递服务。在这个社区中,您可以随时到快递点领取包裹(消息),无需等待送货员上门。这是一种自助式的服务,接收者可以在自己的时间里前来领取包裹。RabbitMQ确保包裹一直可供领取,使人们可以根据自己的时间表来处理。
在这个形象的比喻中,RocketMQ侧重于高效的消息传递,Kafka着重于数据记录和追踪,RabbitMQ提供了更加自由和自助的消息处理方式。选择取决于您的需求:是更重视速度、数据完整性,还是更喜欢自主控制和取件的便利性。