当前位置: 首页 > article >正文

基于 TDMQ for Apache Pulsar 的跨地域复制实践

导语

自2024年9月6日起,TDMQ Pulsar 版专业集群支持消息、元数据两级跨地域复制功能,消息级复制解决用户全球地域的数据统一归档问题,元数据级复制提供解决用户核心业务跨地域容灾的场景。

用户在跨地域场景遇到的疑问和挑战

在跨地域相关场景下,通常有两大类原始需求:

跨地域容灾

TDMQ Pulsar 版目前支持在同一地域下进行跨可用区部署,这种部署方式能够在一定程度上提高系统的可用性和容灾能力。

在这里插入图片描述

如上图所示,在广州地域内的3个可用区部署了 TDMQ Pulsar 版集群。如果广州的某个可用区无法使用,系统仍然可以依靠其他两个可用区继续提供服务。

然而,金融级客户通常需要更高的容灾标准,希望能够通过跨地域部署来实现跨地域的容灾,以确保在极端情况下,比如发生自然灾害或网络故障时,也能保证业务的连续性和数据的安全性。

在这里插入图片描述

如上图展示的架构,用户业务可以在主地域进行日常的生产和消费,同时在其他地域进行数据备份和灾备。这种架构能够实现当一个数据中心发生故障时,迅速切换到另一个地域的数据中心,确保业务不中断,以保护数据的完整性和可用性。

全球数据归档

这类需求一般来源于国际站用户,例如某客户希望实现流数据的全球跨地域传输和统一数据归档 。具体场景如下图:

在这里插入图片描述

不同地域的生产者各自在本地生成数据,并将这些数据发送到对应地域的 TDMQ Pulsar 版集群,这些集群将接收到的数据传输到数据中心的 TDMQ Pulsar 版集群,数据中心收集来自所有地域的数据后,将其聚合在同一个 Topic 中,之后消费者可以从聚合后的数据中读取和处理信息,实现数据的统一归档。

TDMQ Pulsar 版跨地域复制功能介绍

基于以上两类用户需求,TDMQ Pulsar 版提供了跨地域复制的解决方案。

TDMQ Pulsar 专业版基于 GEO Replication 方案,实现跨地域的集群复制,专业集群支持两种类型的复制:

  • 元数据级:用于满足用户核心业务跨地域容灾需求,元数据级复制集群的命名空间、Topic、订阅、角色等内容。

  • 消息级:解决用户全球地域的数据统一归档问题,消息级复制消息内容、消息顺序、标签、消息类型等。

在这里插入图片描述

元数据级复制

元数据级复制用于应对跨地域容灾场景,当发生地域级灾难时,客户能够快速迁移业务,确保业务的连续性。

在这里插入图片描述

在正常场景下:业务在 A 地域访问 TDMQ Pulsar 版服务端,用户需要完成两个前置动作:

  1. 建立跨城网络的连接,通过云联网打通跨地域的 VPC 网络;

  2. 建立两地的集群元数据同步。

异常发生时:TDMQ Pulsar 版提供域名解析切换功能,将原 A 地域使用的域名指向到目标容灾 B 地域的集群,这样做可避免在客户端修改接入点地址,而实现对容灾 B 地域的集群连接方案,保障业务的延续性。

A 地域异常恢复后

用户首先需要判断是否要将 B 地域所产生的消息回写至 A 地域,以确保消息的完整性。

接着,用户在 B 地域的集群进行接入点的域名解析切回,切回操作执行后,客户端即可正常访问 A 地域。

消息级复制

TDMQ Pulsar 版消息级复制用于解决数据统一归档问题。

在这里插入图片描述

以上海地域复制到北京地域为例。

上海地域的 Pulsar 集群中运行 Replicator 组件,该组件中会启动 Producer-R,绑定了北京地域对端集群的 Topic1,将消息数据用生产者的方式发送到北京机房。具体的复制过程如下:

  1. Producer1 生产消息到上海集群 Topic1;

  2. 上海集群把消息持久化到 BookKeeper;

  3. BookKeeper 返回成功后把消息推给 Replicator 的 Cursor;

  4. Replicator 的 Cursor 通过 Producer-R 把消息发给北京集群 Topic1;

  5. 北京集群 Topic1 写入 BookKeeper 成功后给上海集群 Replicator 的 Cursor 回复 ACK,上海机房 Cursor 收到 ACK 后通过 Producer-R 推送下一条消息。

通过这种方式,上海集群的消息就可以被可靠地复制到北京集群,确保数据在两个地域之间的一致性和可用性。这种流程就实现了全球多个地点生成的数据, 能够集中在一个地点进行管理和处理,实现了数据归档操作。

跨地域复制使用指引

  1. 在目标复制地域创建专业集群,在集群购买界面,需要开启「跨地域复制」开关,并选择数据源集群;

  2. 通过控制台配置集群的复制链路:

    ● 复制链路名称:为同步链路定义一个名字。

    ● 链路类型:选择消息级。

    ● 源集群选择:选择要进行数据源的 TDMQ Pulsar 版集群。

    ● 目标集群选择:在不同地域选择创建好的目标集群,此处仅会显示「集群 ID」相同的集群。

    ● 复制级别:支持集群级、命名空间和 Topic 三个级别:

    ○ 集群级:适用于集群级的复制。
    
    ○ 命名空间级:适用于两地集群日常都是活跃的,不同的命名空间分布在不同地域。
    
    ○ Topic 级:跨地域复制的最小粒度。
    
  3. 创建完成后,消息级的复制任务会进入到监控界面,您可以查阅复制任务的事实复制速率、复制消息堆积等数据。

在这里插入图片描述

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

FiT 是腾讯公司提供移动支付与金融服务 的 综合业务平台。业务领域包括 移动支付、投资理财、民生服务和国际化等。

业务需求

FiT 在日常的交易流程中,需要通过 消息中间件 来实现上游和下游衔接,以实现广播、过滤、延迟推送等场景。由于 FiT 均是交易类场景,对消息产品的高并发、容灾均有非常高的要求。

TDMQ Pulsar 版解决方案

在应用实践上,用户选择了 TDMQ Pulsar 版这款产品。

  • 标准模型-发布订阅:使用标准的 pub - sub 模式,生产者生产一条消息,任意一个消费者成功消费即可。在部署方面,客户端的生产者和消费者均解耦部署。

  • 扩散模型:消息生产消费比例为 1:N ,将业务请求异步「扩散」到其他的多个SET中,实现一端生产,多端消费。

  • 限定模型-消息标签过滤+自动创建订阅:使用了 TAG 消息过滤的方式,限定消息只能在某一个客户端消费。消息标签过滤用于对某个 Topic 下的消息进行分类,例如交易流水 Topic 包含了下单流水、支付流水、发货流水等,业务若只想消费者订阅其中一种类别的流水,可在客户端进行 tag 的过滤。

  • 跨地域复制:通过配置复制关系,自动将消息复制到对端集群,当其中一个地域发生故障时,通过接入层的流量调度,将流量调度至另外一个集群。确保在发生灾难时,业务能够迅速恢复,保障业务的连续性,降低了灾难发生时的风险和损失。

在这里插入图片描述

用户评价

得益于 TDMQ Pulsar 高吞吐、低延迟的能力,FiT 金融产品业务迁移到 TDMQ Pulsar 后,消息从生产者到消费者的耗时缩短了大约80%,消息积压情况大大缓解,积压数量减少了70%。


http://www.kler.cn/news/306121.html

相关文章:

  • 2024.9.14 Python与图像处理新国大EE5731课程大作业,马尔可夫随机场和二值图割,校正立体图像的深度
  • 攻击者如何在日常网络资源中隐藏恶意软件
  • rust + bevy 实现小游戏 打包成wasm放在浏览器环境运行
  • Vue3使用Websocket进行跨页面通信
  • 2024年金九银十最新版Java面试题及答案整理(持续更新)
  • 从单体到微服务:FastAPI ‘挂载’子应用程序的转变
  • AI在医学领域:医学AI的安全与隐私全面概述
  • 【iOS】ViewController的生命周期
  • Linux06(vi/vim)
  • 【Python机器学习】循环神经网络(RNN)——超参数
  • 什么是Java 语法糖?
  • ARM驱动学习之8 动态申请字符类设备号
  • sqli-labs Basic Challenge Less_1 通关指南
  • 【AI学习】陶哲轩在 2024 年第 65 届国际数学奥林匹克(IMO)的演讲:AI 与数学
  • 基于YOLOV8+Pyqt5光伏太阳能电池板目标检测系统
  • 使用docker配置wordpress
  • SQLite的入门级项目学习记录(一)
  • Kafka 消息丢失如何处理?
  • kubeadm方式安装k8s续:
  • 【Unity实战】SO反序列化正确姿势
  • 【智路】智路OS Airos Edge 2.0 Quick Start
  • 利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用
  • 通过logstash同步elasticsearch数据
  • 【资料分析】常见的坑
  • 文件外发怎么保证安全
  • sqli-labs靶场自动化利用工具——第1关
  • 在Coontroller层中我们经常使用的@RequestParam, @PathVariable, @RequestBody ,区别以及各自的使用场景
  • golang实现从服务器下载文件到本地指定目录
  • 简单接口自动化框架实现(Python+requests+pytest)
  • _Array类,类似于Vector,其实就是_string