以电商的 IT 架构作为例子,在传统紧耦合订单场景里,客户在电商网站下订单(如买一台手机),订单系统接收到请求后,立即调用库存系统接口,库存减一;但这种模式存在巨大风险:
订单系统与库存系统强耦合,假如库存系统无法访问(升级、业务变更、故障等),则订单减库存将失败,从而导致订单失败;
传统的解决方案是服务间通过订单系统与库存系统建立 socket 连接,但是如果库存系统的 IP/端口变更、增加库存系统的接收者,都需要订单系统进行修改;
短时间内大量的请求,对库存系统的 SQL,频繁查询库存,修改库存,库存系统负载极大;
用户的感受:订单失败,重试,依然失败,导致顾客流失。
引入 CMQ 后的方案如下图:
其中几个系统分别工作,解除强耦合性:订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。此时客户可以认为手机已经买到了。CMQ 提供异步的通信协议,消息的发送者将消息发送到消息队列后可以立即返回,不用等待接收者的响应。消息会被保存在队列中,直到被接收者取出。
库存系统:从 CMQ 获取下单信息,库存系统根据下单信息进行库存操作。
这样,哪怕用户在下单时库存系统宕机,也不影响正常下单(库存系统修复后再从 CMQ 中取出订单进行操作)。订单系统写入腾讯云 CMQ 消息队列后,就无需再关心其他后续操作了。实现订单系统与库存系统的应用解耦。
像电商这样需要保证消息被可靠传递的业务,即使发送消息(订单系统)时,接收者(库存系统)由于断电、宕机或 CPU 负载过高等原因不可用,消息也可以在接收者恢复可用时被送达。腾讯云 CMQ 的分布式消息队列存储保证了消息的持久化保存,直到接收者成功获取它,而不用担心某些消息队列方案存储在单机内存中而导致的数据丢失。