消息队列在后台技术栈中起着举足轻重的作用。在接下来的一段时间里,我们会系统的讲一下消息队列。今天我们主要说说消息队列的作用。流量削峰消息队列其实并不是什么深奥的东西。和我们这次国庆出游类似,很多景点都会人满为患,到处都是人潮涌动。此时,景区如何解决问题?通常排队是有限的。在检票口设置等候区。如果景区人太多,那就在售票处设置等候区,让游客排队。部分游客从景区出来后,让一批游客进入。在实际生产环境中也是如此。在生产环境中,每个系统的容量是不同的。核心系统或简单系统的吞吐量往往比较大,而非核心系统和复杂系统的吞吐量往往比较低。比如在电子商务系统中,我们经常要上报用户行为数据。与用户浏览、交易等行为相比,数据上报并不是那么重要,因此支持数据上报的系统性能往往不如核心功能。在一些流量高峰期,比如双十一大促,我们一般不扩充上报系统。这时候同步数据上报很可能会造成雪崩。针对这种情况,我们可以将用户行为数据的输入放入异步队列中,根据数据的写入速度进行消费,从而保证系统的健壮性。系统解耦当我们开始开发一个系统时,逻辑总是清晰而简单的。随着需求的迭代,系统会变得越来越复杂。举一个简单的例子,当我们进行一笔交易时,我们可能交易系统可能只是进行简单的库存扣除,然后写订单。随着功能的迭代,我们需要通知广告系统、第三方卖家的话、商家系统等,像阿里巴巴,每笔简单的交易发生后,可能需要通知几十个不同的业务方进行处理.如果我们都在交易系统中做这些增加的逻辑,我们会发现交易系统会越来越臃肿,数据的一致性也很难保证。如果订单完成后,通知广告系统出现故障(比如网络波动),那么,交易是否还要继续,通知广告系统可能会出现故障,但如果通知商家系统出现故障怎么办?数据不一致可能会给公司带来投诉和资金损失,而且在后期开发中需要花费大量时间进行数据恢复。消息队列是一种更简单、更可靠的方法。当我们成功完成一笔交易时,我们生产一条消息,所有业务方消费这条消息,业务方自己保证消费成功。这样一来,交易系统无需关心交易行为的后续动作,大大降低了交易系统的复杂度。延迟、异步等场景在电商系统中非常常见。用户创建订单后,他可能不付款。我们可以在订单创建后25分钟提醒用户,告诉他有订单没有支付,从而提高转化率。如果让你实现这个功能,你会怎么做呢?我们可以使用定时任务每分钟扫描一次数据库,扫描出未支付的订单,然后通知用户支付。这也是一个很好的方法。但是,可靠的定时任务的难度在此不再赘述。今天我们要介绍另一种方法,就是消息队列。有些消息队列提供了延迟队列的功能,比如RabbitMQ,我们可以利用它的延迟特性来非常简单的实现这个功能。当用户下单时,我们发布延迟消息,然后在消费时查询订单状态。后面我们会单独讲消息队列延迟是如何保证可靠性的。今天我们主要讲了消息队列的三个功能。下面介绍几种常见的消息队列及其特点。如果你有兴趣,请关注我。我们将共同学习,共同进步。
