FiT 基于 Pulsar 在金融在线高并发场景的最佳实践

关于 FiT

腾讯金融科技(Tencent Financial Technology)是腾讯公司提供移动支付与金融服务的综合业务平台。业务领域包括移动支付、投资理财、民生服务和国际化等,作为支付业务的基石和底座,FiT 致力于建设和发展完善的支付平台能力,在微信支付、QQ 钱包等移动支付产品中持续进行功能和服务创新。

FiT 在日常的交易流程中,如信用卡、话费充值、自选股等业务中,需要通过消息中间件来实现上游和下游衔接,以实现广播、过滤、延迟推送等场景。同时由于 FiT 均是交易类场景,对消息产品的高并发、容灾有非常高的要求。比如,在可预期的业务高峰期时,对消息队列集群进行快速扩容;在非预期的可用区故障时,其余可用区可以正常提供服务,保障交易业务的流畅性。于是 TDMQ Pulsar 进入了 FiT 的消息队列技术选型范畴。

TDMQ Pulsar 由于其存算分离的架构,对于计算密集型的业务场景,仅需要添加计算层 Broker ,自动进行 Rebalance;对于海量消息堆积,存储不足时,添加新的 BK 节点即可。在容灾支撑方面,TDMQ Pulsar 专业集群支持 3AZ 跨可用区部署,以确保发生可用区故障时,也能正常提供服务;同时还提供了跨地域冷备功能,支持快速切换接入点解析,实现无需客户端修改接入点地址,而实现跨地域的容灾方案,保障业务的延续性。在场景支撑方面,TDMQ Pulsar 承载了腾讯计费、中国银行等金融场景下的核心交易链路。从各方面来说,都非常匹配 FiT 的需求。

关于 TDMQ Pulsar

腾讯云消息队列 Pulsar 版是基于 Apache Pulsar 自研的消息中间件,具备极好的云原生和 Serverless 特性,计算存储分离的架构使其在扩缩容方面具备良好的底层优势。

在完全兼容社区版的基础上,消息队列 Pulsar 版还提供了重试&死信队列、消息标签过滤、消息轨迹等高级特性。

目前消息队列 Pulsar 版已经有较大规模的应用,如王者荣耀、猫眼、微民保险、QQ 音乐、领星、长安汽车等,以及包括腾讯计费绝大部分场景,包括支付主路径、实时对账、实时监控、大数据实时分析等方面。

FiT 基于 Pulsar 的消息中间件实践

标准模型-发布订阅

第一类使用场景,是标准的 pub - sub 模式,生产者生产一条消息,任意一个消费者成功消费即可。在部署方面,客户端的生产者和消费者均解耦部署。

限定模型-消息标签过滤+自动创建订阅

第二类场景,限定模型,是使用了 TAG 消息过滤的方式,限定消息只能在某一个客户端消费。

FiT 采用单元化(SET)架构。在该场景中的业务消息,会按照一定的规则(如 UIN 等)进行分片,并要求消息限定在某个目标 SET 中消费。

如上图所示,SET 1 中生产者生产消息时,给消息打上「SET 1」的 TAG;消费时,仅消费有「SET 1」TAG 的消息。另外,Pulsar 可以支持自动创建订阅,FiT 使用该能力实现了一套插件,将 SET 做为环境变量注入到启动容器中,这样实现方式极大的方便了业务自定义配置要消费的消息,仅需要调整环境变量即可,而不需要改动业务代码。

扩散模型

第三类场景,扩散模型。在消息生产消费比例为 1:N 时,需要将业务请求,异步「扩散」到其他的多个 SET 中。

基于自动创建订阅的功能,FiT 插件实现在同一个 Topic 下创建多个订阅,灵活的根据业务需求来定义下游消息的客户端。

消息(跨集群)复制

在消息容灾场景下,FiT 基于消息复制组件,配置消息复制关系,自动将消息复制到对端的 Pulsar 集群。同一个复制对象,在不同地域的两个集群中名称需要保持一致,包括 Topic 名称、角色名称及相应的密钥等。如此,可保障当其中一个地域发生故障时,通过接入层的流量调度,将流量调度至另外一个集群。

客户评价

FiT 架构师:

得益于 TDMQ Pulsar 高吞吐、低延迟的能力,FiT 金融产品业务迁移到 TDMQ Pulsar 后,消息从生产者到消费者的耗时缩短了大约80%,消息积压情况大大缓解,积压数量减少了70%。TDMQ Pulsar 延迟消息作用于消息维度,方便业务根据自身场景对每条消息设置不同的延时时间,如延迟通知、延迟核对等。TDMQ Pulsar 运维简单,业务高峰期需要集群扩容时,在控制台一键点击升配即可,业务层无感。TDMQ Pulsar 技术支持专业迅速,及时响应业务需求解决 FiT 业务场景的痛点,如支持接入外部监控、支持灵活的消息过滤功能,较好地支撑了 FiT 业务。

总结展望

下一步,FiT 金融产品业务将继续切量至 TDMQ Pulsar,预计 2024年基本完成迁移。并且 FiT 由于承载了微信支付、银行等国民级支付产品,计划在未来实现多个自建机房的条带化部署,届时 TDMQ Pulsar 也将属地化部署(私有化部署),并作为其交易业务的核心链路。

同时,TDMQ Pulsar 版将继续打磨产品能力,服务好包含 FiT 在内的广大用户,近期我们将推出以下新功能:

  1. 接入外部监控 Prometheus:支持将专业集群的监控数据,接入自建的 Prometheus ,利于用户观测的同时,可以通过监控数据对业务 Workload HPA,使得线上运维更加自动化。

  2. 消息标签过滤支持更灵活的表达式:提供更加灵活的消息标签过滤表达式配置,简化业务侧的架构设计和数据链路。

  3. 更加丰富的应用观测指标:提供更多更丰富的集群性能观测指标,便于客户及时排除业务链路风险,准确定位异常位置。

相关推荐
Java 第一深情3 天前
RabbitMQ最全教程-Part1(基础使用)
分布式·消息队列·rabbitmq
ktkiko114 天前
Java中消息队列——ActiveMQ、RabbitMQ、RocketMQ、Kafka
java·消息队列
确实可以10 天前
7.使用Redis进行秒杀优化
redis·消息队列·go
极客先躯12 天前
高级java每日一道面试题-2024年10月19日-消息队列[RabbitMQ]-RabbitMQ中积压了大量的消息,如何处理?
java·消息队列·rabbitmq·java-rabbitmq·积压大量消息·队列积压·java高级
G丶AEOM12 天前
定时任务使用kafka
java·消息队列·八股
腾讯云中间件17 天前
腾讯云上基于 Apache Pulsar 的大规模生产实践
消息队列·腾讯
ApacheRocketMQ18 天前
Java消息队列入门详解
java·消息队列·开源·rocketmq
w_outlier19 天前
了解消息队列 && 信号量
linux·消息队列·通信·信号量
just-julie25 天前
消息队列面试题——第二篇
java·消息队列