关键词: 消息队列 业务解耦 最终一致性 错峰流控 日志同步 Kafka RabbitMQ
声明:本文并非原创,转自华为云帮助中心的的用户指南。客户端连接方法通用,故摘抄过来分享给大家。
分布式消息服务可应用在多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、手游、视频、物联网、车联网等。
分布式消息服务可以应用但不局限于以下业务场景:
- 业务解耦
将业务中依赖其他系统同时属于非核心或不重要的部分使用消息通知即可,无需同步等待其他系统的处理结果。
如电商网站在促销期间抢购订单,抢到的商品订单信息放入消息队列,出库、发货等后续会从队列里读取任务信息然后执行。
- 最终一致性
在交易或支付系统中,不同的子系统/模块的状态需要最终保持一致,或都成功或都失败。子系统/模块之间传递的数据不能丢失,需要有可靠消息传递,能保证业务的连续性。DMS可以用于子系统/模块间的高可靠数据传递,实现两者之间的事务最终一致,降低实现难度和成本。
例如用户使用储蓄余额购买理财产品。由于理财系统一般对理财申购交易采用日终统一处理,允许用户的储蓄余额与理财系统资金余额存在一定时间段的不一致,或者说中间状态,因此,可以对理财产品的购买支付流程使用DMS服务的消息处理机制,保证储蓄余额与理财余额的最终一致,同时避免系统间对账不平。
- 错峰流控
在电子商务系统或大型网站中,上下游系统处理能力存在差异,处理能力高的上游系统的突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。电商大促销等流量洪流突然来袭时,可以通过队列服务堆积缓存订单等信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。消息队列提供亿级消息堆积能力,3天的保留时长,消息消费系统可以错峰进行消息处理。
-
- 日志同步
应用通过可靠异步方式将日志消息同步到消息服务,再通过其他组件对日志做实时或离线分析,也可用于关键日志信息收集进行应用监控。
使用DMS实现日志同步一般按以下流程:
- 日志采集客户端,负责用户应用服务的日志数据采集,以发送消息方式写入DMS消息队列。
- DMS消息队列,负责日志数据的接收、存储和转发管理。
- 日志处理应用,订阅并消费DMS消息队列中的日志数据。
图1 日志同步示意图说明:上图中Scribe、Fluent、Flume、Logstash、Rsyslog为当前几款主流的开源日志采集工具,Logstash、ElasticSearch、Kibana为开源日志分析工具。
- 日志同步