TiDB 实战分享丨第三方支付企业的核心数据库升级之路

本文介绍了一家第三方支付企业在面对市场竞争和监管压力的态势下,通过升级核心数据库来提升业务能力的实践。该企业选择 TiDB 分布式数据库,成功将其应用于核心业务、计费、清结算和交易查询等关键系统。TiDB 的水平扩展能力、高可用性和简化数据栈等优势,使该企业在处理高并发交易和保障数据安全方面取得了显著进展,提升了业务处理的敏捷性,同时降低了运维复杂度。


在数字时代,网络购物已经成为人们生活的重要组成部分,第三方支付行业迎来了前所未有的发展机遇。 第三方支付是指第三方支付机构在付款人与收款人之间提供的银行卡收单、网络支付和预付卡的发行与受理,以及人民银行确定的其他货币资金转移服务。 在网络购物、社交红包、线下扫码等多元化场景的推动下,中国第三方支付市场凭借便捷、高效、安全的支付体验,领先于全球。

业务挑战驱动数据库升级

某头部第三方支付企业是一家金融科技公司,拥有全面的支付牌照,为用户提供安全、便捷的支付和金融服务。用户可以通过移动应用、POS 终端、网站等多种渠道进行支付和转账。除支付服务以外,该企业还提供票务预订、充值缴费等多元化金融服务。

面对支付平台层出不穷、市场竞争异常激烈的局面,第三方支付企业在监管日益严格的背景下,纷纷聚焦产品质量提升,打造差异化竞争优势,探索服务模式创新。随着人工智能、区块链、数字货币等新兴技术的融合与应用,如何提升刷脸支付、声纹支付、车载支付等新兴支付的交易处理效率,持续拓宽新兴支付方式的切入场景并优化用户体验,成为第三方支付企业提升市场份额和竞争力的重要抓手。

为了更好地满足多变环境下业务高速发展的需求,该支付企业于 2020 年开始探索分布式数据库。经过充分的调研测试,TiDB 数据库凭借其原生分布式架构、应用的无侵入性和独立数据库厂商的中立性赢得了该企业的信任。从 2020 年开始, 该企业逐步将 TiDB 数据库应用于业务核心、计费、交易查询、清结算等多个核心系统。经过三年多的深入实践,目前核心系统运行平稳,不仅提升了业务的处理能力和敏捷性,还大幅降低了运维复杂度。截止到 2023 年 7 月, 该企业已上线 100 多个 TiDB 节点,投产超过 50% 的核心业务。

业务核心系统的数据库升级经历了四个阶段:

● 代码改造 :整个核心系统基础架构的迭代遵循技术领先和开源透明的思路,新的业务系统基于 MySQL 兼容的数据库进行业务改造,充分利用数据库的内核能力,避免对单一产品形成过度依赖和绑定。

● 并行验证 :实际生产流量跑在原有数据库 Oracle,通过网关把所有流量在 TiDB 回放,主要验证 TiDB 数据库性能及承载业务压力的稳定性,该阶段运行时间 6 个月。

● 流量切换 :核心业务的流量逐步按比例迁移到 TiDB,历时一个月左右,成功将近亿级别的全量交易切换到 TiDB。第三方支付企业的交易生命周期包括交易发生、计费、清算、结算、查询统计等环节,面向交易客户、商户、清算机构等群体。由于交易链路长且复杂,为了更好地把控风险和确保业务可回退,整个迁移过程中,将迁移到 TiDB 的流量在 Oracle 侧进行回放。

业务流量切换示意图

● 下游改造:将原先由多个 Oracle 实例通过 ETL、CDC 和业务写入等多种方式汇聚到 TiDB 集群中,提供包括清 算,结算,计费,商户交易统计查询等服务。

TiDB 在核心系统的应用

1 业务核心

业务核心是该企业的核心业务集群,负责存储并处理所有核心交易数据,包括各种扫码渠道和 POS 刷卡交易。每日交易笔数达到亿级别,呈现出明显的商户交易高低峰分布,涵盖了早、中、晚三个高峰时段。为了满足监管机构的要求,需要确保三方支付所有历史交易数据的可追溯性。由于原先公有云上的 RDS 数据库受到性能和容量的限制,处理能力无法达到预期,因此该企业选择使用 TiDB 替换公有云的 RDS 数据库。

TiDB 原生分布式架构设计,可以根据业务实际情况,灵活扩展计算或者存储节点,提供多副本的读写能力来解决读吞吐问题,提升响应延迟,优化 C 端和 B 端用户的使用体验。从上线至今,业务核心处理的数据量已接近 100 TB,日常交易高峰峰值 QPS 达到 60,000+,交易 99 线延迟稳定在 60 毫秒左右,充分展现了 TiDB 在规模化场景下出色的 OLTP 性能。

业务核心架构示意图

2 计费

支付行业的计费系统扮演着至关重要的角色,专门用于处理交易、计算费用并生成账单,与支付交易共同构成了支付生态的两翼。计费系统以严谨的逻辑和高效的算法,确保费用计算的准确无误。同时,它以清晰易懂的方式呈现账单信息,让用户和商户一目了然。目前整个计费数据库的 99 平均延迟稳定在 4ms 左右,峰值 QPS 10K,TPS 5 K,TiDB 完美的在一套系统中同时满足了高频的交易请求和实时的分析业务需求,有效保证了计费的时效和准确性。

3 清结算

清结算是金融机构用于处理交易结算和清算的系统。清算指按照约定的规则,计算并核实参与方的债权和债务关系,最终确定支付的义务;而结算则是履行清算结果,完成实际的支付过程。清结算系统的关键任务是确保交易的安全、准确和及时,包括处理交易、计算费用、生成结算单据以及实际的资金转移。TiDB 的水平扩展能力能够较好地应对清结算对于数据并发写入和瞬时 100K 的查询需求。

4 交易查询平台

为满足海量交易数据的查询需求,该支付企业构建了首个 TiDB 集群作为交易查询平台。该平台经历了从多个上游 Oracle 数据库同步到一套庞大中心化 Oracle 数据库的演进。然而,传统的中心化数据库体系无法满足该支付企业日益增长的交易数据量和扩展性需求,该支付企业将 Oracle 数据迁移到 TiDB 分布式数据库集群。同时,利用 TiDB 提供的 TiCDC 工具将数据同步到 Kafka 消息系统,实现了实时数据更新和多维度分析。

交易查询平台数据流转示意图

升级后,该支付企业交易查询平台在宽表组合、多表数据关联、多列数据截取等复杂操作方面展现出更为灵活的能力。TiDB 原生分布式架构使得平台能够高效地处理海量交易数据。同时,TiCDC 工具确保了数据同步的实时性和可靠性。得益于 TiDB 和 TiCDC 的加持,交易查询平台实现了多维度数据查询和分析能力的提升,为商户和内部管理提供了更全面、更精准的数据分析服务。通过实时获取业务洞察,企业能够做出更敏捷的业务响应,提升市场竞争力。

为什么选择 TiDB?

从过去三年该支付企业使用 TiDB 的实践经验来看,TiDB 带来的具体收益包括:

● 水平扩展能力

业务快速发展背景下,传统单机数据库难以应对高并发读写请求,性能无法水平扩展。分库分表方案的实施往往需要对业务进行大量的改造,带来了不小的成本和风险。原生分布式数据库具备灵活的弹性伸缩能力,可匹配业务的特点分别或同时扩展计算能力与存储能力。在引入 TiDB 之前,为确保核心业务系统的稳定运行,企业经常需要定期清理历史数据,过程繁琐且容易造成数据丢失。TiDB 的自动均衡能力有效解决了该问题,并满足了监管要求。

● 原生高可用能力

从刷卡收单、计费到后续的清结算和交易查询,每个环节都至关重要。TiDB 集群内部各个组件采用冗余设计,避免单机故障,存储节点默认采用 3 副本,通过 Multi Raft 协议保证各副本数据的一致性和高可用性。在 TiDB 集群之间,可通过 TiCDC 或者 TiDB binlog 的方式搭建灾备集群保障集群级别的高可用。TiDB 强大的高可用能力为用户提供更为可靠和稳定的交易体验。

● 简化数据栈,降低成本

TiDB 用一个数据平台满足实时交易与实时分析的场景需求,通过丰富的技术生态实现与 Oracle、DB2 等传统数据库的打通,实现与 Hadoop、Spark、Flink、Kafka 等大数据技术栈的广泛融合,为上层业务提供统一数据服务,在简化企业数据栈的同时大幅降低维护成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

异常的种类

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 Oracle 运行时错误可以分为 Oracle 错误和用户自定义错误,与此对应,根据异常产生的机制和原理,可将 Oracle 的系统异常分为 3 种 预定义…

MySQL事务以及并发访问隔离级别

MySQL事务以及并发问题 事务1.什么是事务2.MySQL如何开启事务3.事务提交方式4.事务原理5.事务的四大特性(ACID) 事务并发问题1.并发引起的三个问题2.事务隔离级别 事务 在 MySQL 中,事务支持是在引擎层实现的。MySQL 是一个支持多引擎的系统&…

猫头虎博主分享运维技巧: 解决RuntimeError: Expected all tensors to be on the same device

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Java基于SpringBoot+Vue的专家医院预约挂号系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【C++航海王:追寻罗杰的编程之路】探寻实用的调试技巧

目录 1 -> 什么是bug? 2 -> 调试是什么?有多重要? 2.1 -> 调试是什么? 2.2 -> 调试的基本步骤 2.3 -> Debug和Release的介绍 3 -> Windows环境调试介绍 3.1 -> 调试环境的准备 3.2 -> 学会快捷键…

7-17 爬动的蠕虫

题目链接&#xff1a;7-17 爬动的蠕虫 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <stdio.h>int main(void) {unsigned int n, u, d;unsigned int minute, high;if (scanf("%d %d %d", &n, &u, &d) ! 3) {retur…

【CKA模拟题】边车容器Shared-Volume的具体用法

Useful Resources: Persistent Volumes Claim , Pod to Use a PV 题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetes An existing nginx pod, my-pod-cka and Persistent Volume Claim…

GIF在线生成器

上传图片就能生成GIF的前端WEB工具 源码也非常简单 <!DOCTYPE html> <html lang"zh" class"dark"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1, m…

设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

概述 本章学习状态模式。在实际的开发中&#xff0c;状态模式并不是很常用&#xff0c;但是在能够用到的场景里&#xff0c;它可以发挥很大的作用。从这一点上看&#xff0c;它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机&#xff0c;而状态机常用在游戏、工…

前端三剑客 —— JavaScript (第一节)

目录 回顾内容 1.弹性布局 2.网格布局 JavaScript 概述 发展 浏览器 什么是Javascript JavaScript 能干什么 JavaScript需要的环境 JavaScript初体验 基本数据 JS书写方式 行内JS 页面JS 外部JS 1&#xff09;创建外部JS文件 2&#xff09;编写页面 对话框 警…

类的函数成员(四):赋值函数

一.赋值函数是什么&#xff1f; 1.1 运算符的重载 运算符的重载实际是一种特殊的函数重载&#xff0c;必须定义一个函数&#xff0c;并告诉C编译器&#xff0c;当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数&#xff0c;它通常为类的成员函数。 定义运算符重…

TCP 重传、滑动窗口、流量控制、拥塞控制(计算机网络)

重传机制 TCP 针对数据包丢失的情况&#xff0c;会用重传机制解决。 接下来说说常见的重传机制&#xff1a; 超时重传快速重传SACKD-SACK 超时重传 重传机制的其中一个方式&#xff0c;就是在发送数据时&#xff0c;设定一个定时器&#xff0c;当超过指定的时间后&#xff0c…

HarmonyOS实战开发-如何使用 geolocation 实现获取当前位置经纬度

介绍 本示例使用 geolocation 实现获取当前位置的经纬度,然后通过 http 将经纬度作为请求参数,获取到该经纬度所在的城市。通过 AlphabetIndexer 容器组件实现按逻辑结构快速定位容器显示区域。 效果预览 使用说明 1.进入主页,点击国内热门城市,配送地址会更新为选择的城…

javaScript 事件循环 Event Loop

一、前言 javaScript 是单线程的编程语言&#xff0c;只能同一时间内做一件事情&#xff0c;按照顺序来处理事件&#xff0c;但是在遇到异步事件的时候&#xff0c;js线程并没有阻塞&#xff0c;还会继续执行&#xff0c;这又是为什么呢&#xff1f; 二、基础知识 堆&#x…

vivado HDL 例化调试探测流程概述

HDL 例化调试探测流程概述 HDL 例化探测流程涉及在 HDL 设计源代码中直接手动自定义、例化和连接各种调试核组件。下表中显示了 Vivado 工具中此流程所支持的新调试核。 新的 ILA 核相比于传统 ILA v1.x 核具有以下 2 大优势 &#xff1a; • 可搭配集成的 Vivado Log…

FreeRTOS临界段代码保护和任务调度器的挂起与恢复学习

FreeRTOS临界段代码保护和任务调度器的挂起与恢复学习 临界段代码保护 所谓临界段代码保护就是指必须完成运行&#xff0c;不能被打断的代码段。比如需要严格按照时序除初始化的外设&#xff1a;IIC、SPI&#xff0c;再或者因为系统自身需求和用户需求。 FreeRTOS 在进入临界…

发型不满意试试开源AI换发型HairFastGAN;前OpenAI员工Karpathy1000纯C语言写完GPT-2

✨ 1: HairFastGAN 开源AI换发型 HairFastGAN 是一种先进的技术&#xff0c;专门设计用于在不同图片之间传输发型。这意味着如果你有一张人物的图片和另一张你喜欢的发型的图片&#xff0c;HairFastGAN 能够将你喜欢的那个发型复制到人物的头上&#xff0c;而且看起来非常自然…

强化学习MPC——(二)

本篇主要介绍马尔科夫决策&#xff08;MDP&#xff09;过程&#xff0c;在介绍MDP之前&#xff0c;还需要对MP&#xff0c;MRP过程进行分析。 什么是马尔科夫&#xff0c;说白了就是带遗忘性质&#xff0c;下一个状态S_t1仅与当前状态有关&#xff0c;而与之前的状态无关。 为…

深入浅出索引(上)

提到数据库索引&#xff0c;我想你并不陌生&#xff0c;在日常工作中会经常接触到。比如某一个 SQL 查询比较慢&#xff0c;分析完原因之后&#xff0c;你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引&#xff0c;索引又是如何工作的呢&#xff1f;今天…

NPW(监控片的)上---基础知识要点精讲

半导体的生产过程已经历经数十年的发展&#xff0c;其中主要有两个大的发展趋势&#xff0c;第一&#xff0c;晶圆尺寸越做越大&#xff0c;到目前已有超过70%的产能是12寸晶圆&#xff0c;不过18寸晶圆产业链推进缓慢&#xff1b;第二&#xff0c;电子器件的关键尺寸越做越小&…