硬盘的读写速度成为现代大数据量高并发模式下的瓶颈。而数据的访问往往遵循二八定律:80%的业务访问集中在20%的数据上,于是将这20%常用的数据写入内存(缓存)可以大大改善程序的运行速度。
异步处理 和 应用解耦。
- 异步处理
同步情况下【如下图】:用户发出一个请求(下一个订单),要等待订单程序访问数据库扣减库存成功后,用户才能得到响应,在大量订单的情况下,数据库来不及处理,假设你前面已经有一万个订单在排队,每个订单处理需要0.02秒,那么一万个订单就是200秒,这个等待时间显然是不能承受的。
引入MQ的异步情况下【如下图】:用户下订单后(下单之前一般会查询库存量是否>=购买量),直接返回下单成功,不做扣减库存的处理,而是将订单消息放入MQ储存起来,用户作为生产者,队列的另一端有异步程序在消费(即扣减库存),所以我们一般情况下会在购买东西之后几秒或者几分钟收到购买成功的短信,这个短信发送就是异步处理的。这样处理后,用户无需等待与自己无关的处理即可直接得到响应,让真正的操作在队列后台中默默的进行。
- 应用解耦
注意:在实际情况中,使用异步处理后,下单返回的消息可以是正在处理中等,一般不会直接将成功返回给用户,因为后续修改数据库等操作可能出现失败。所以会在所有的真正操作处理完成后,给用户发送一个下单成功的短信或邮件,避免纠纷。
文章来源: 消息队列MQ使用场景