本文介绍: 分布式消息中间件在支付场景的削峰填谷和应用间解耦用得比较多,且对精度没有那么苛刻的场景,比如集群低到1TPS,就无法做到。

这是《百图解码支付系统设计与实现》专栏系列文章中的第(18)篇,也是流量控制系列的第(4)篇。点击上方关注,深入了解支付系统的方方面面。

本篇重点讲清楚分布式消息中间件的特点,常见消息中间件的简单对比,在支付系统的应用场景,比如削峰填谷,系统应用间的解耦,事务消息等。

内容偏入门介绍,已经使用过消息中间件的同学可以不用往下看了。

在流量控制系列文章中的前四篇,分别介绍了固定时间窗口算法、滑动时间窗口算法、漏桶原理、令牌桶原理,应用场景和java版本的核心代码。

我们做个简单回顾:

固定窗口:算法简单,对突然流量响应不够灵活。超过流量的会直接拒绝,通常用于限流。

  • RocketMQ: 提供非常高的性能和吞吐量,特别适合大规模的消息传输和处理场景。
  • RabbitMQ: 性能优秀,尤其在小型消息的传递上非常高效。但在处理非常大量的消息时,性能可能不如 Kafka 和 RocketMQ。
  • Kafka: 专为高吞吐量设计,特别适合需要处理大数据流的场景。它在持久化和分布式处理方面的性能表现尤其出色。
  • RocketMQ: 提供高可靠性保证,支持分布式事务。
  • RabbitMQ: 通过消息持久化、交付确认等机制提供可靠的消息服务。
  • Kafka: 数据持久化和高容错能力,确保了高可靠性。
  • RocketMQ: 相对复杂,需要一定的学习曲线,但提供丰富的特性和灵活性。
  • RabbitMQ: 用户友好,易于安装和配置,拥有直观的管理界面。
  • Kafka: 配置和管理相对复杂,但社区支持强大,提供了丰富的文档资源。
  • RocketMQ: 支持广泛的消息模式,包括顺序消息、定时/延时消息和事务消息。
  • RabbitMQ: 提供多种消息路由模式,支持灵活的消息模型和多种协议。
  • Kafka: 专注于高吞吐量的消息队列和流处理,支持实时数据处理。
  • RocketMQ: 适用于大规模分布式系统中的消息处理,如电商平台和金融系统。
  • RabbitMQ: 适合需要复杂路由、多种消息协议和高效小消息处理的场景,如企业应用集成。
  • Kafka: 非常适合于需要高吞吐量、大数据处理和实时流处理的应用,如日志聚合和实时监控系统。
  • 在支付系统,我个人更推荐RocketMQ,原因有两个:第一,经过阿里电商+支付各种非常高并发的大促洗礼,RocketMQ 在大型分布式系统中表现出色。第二,支持事务消息,这个在支付领域还是很有用的。
  1. 流量的削峰填谷。尤其是支付交易。
  2. 系统应用间的解耦。比如支付成功后,渠道网关发出支付成功消息,由支付引擎和账务分别监听。
  3. 事务消息。
  4. 离线数据同步。有些公司使用离线库来做,有些公司直接抛消息。比如实时库根据用户来分库分表,离线库要根据商户来聚合等。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注