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 等大数据技术栈的广泛融合,为上层业务提供统一数据服务,在简化企业数据栈的同时大幅降低维护成本。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

electron打包Vue前端

Electron-Forge 打包Vue项目 效果:electronforge可将前端静态页面打包成.exe、.deb和.rpm等,能适配各种平台 示例:Windows环境下将前端 Vue 项目打包成exe文件 打包后的 exe 文件 运行 exe 文件 一、项目准备 开源项目 RouYi 下载 本…

码蹄集部分题目(第五弹;OJ赛2024年第10期)

🐋🐋🐋竹鼠通讯(钻石;分治思想;模板题:就算几何平面点对问题) 时间限制:3秒 占用内存:128M 🐟题目描述 在真空中,一块无限平坦光滑…

自偏置电流镜、wilson和cascode电流镜、低压自偏置电流镜

1.自偏置电流镜 参考1:正确偏置和自启动电路 正确偏置: 2.自启动电路 参考2:两种自启动电路、cascode低压设计、自启动充放电过程分析 3.低压自偏置电流镜 参考3:电阻偏置分析 VbVgs3VodVgs1Vod 4.电阻偏置和MOS偏置的分…

【C++】动态规划算法

目录 还会持续更新动态规划斐波那契模型三步问题最小花费爬楼梯 路径问题不同路径路径问题Ⅱ 简单多状态按摩师 还会持续更新 动态规划 什么是动态规划? 斐波那契模型 三步问题 class Solution { public: const int N 1000009;int waysToStep(int n) {if(n1) …

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起,服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况,这时候我们需要找到解决办法,确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

前端二维码工具小程序使用说明书

一、产品概述 前端二维码工具小程序是一款便捷、高效、易用的二维码生成与识别工具。本产品支持根据用户输入的文本或链接生成二维码,同时提供扫一扫功能以识别二维码内容,并支持将识别到的内容复制到剪贴板。此外,产品还提供了美化功能&…

Armadillo库:用于线性代数和科学计算的快速C/C++库下载及vs环境下的使用方法

armadillo库的下载及使用 一. armadillo库的下载二. vs2022环境下armadillo库的基本使用方法 一. armadillo库的下载 armadillo库的官方下载连接: https://arma.sourceforge.net/download.html 选择网页中最新版本的armadillo库压缩包文件进行下载。 解压armadillo-12.8.2.ta…

无重复的最长字串

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 问题 给定一个字符串,我们需要找到该字符串中的最长无重复子串的长度。 示例 让我们以一个具体的示例来说明这个问题&#…

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候,只需要看题目,摘要和结论,先看题目是不是跟我的方向有关,看摘要是不是用到了我感兴趣的方法,看结论他是怎么解决摘要中提出的问题,或者怎么实现摘要中的方法,然…

Elementplus 2.6.1表单校验模块开发体验改进

需求 之前的表单代码看了下,写的比较冗长,于是去万能的Github找点轮子,发现了这个: GitHub - aweiu/element-ui-verify: 如果你受够了饿了么ElementUI原生的校验方式,那就来试试它吧!一款更懂你的校验插件…

Taro框架中的H5 模板基本搭建

1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板

Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

nexus设置s3存储

问题 因为我的nexus是安装在EC2上面,需要利用s3的存储能力,为nexus提供存储服务。 步骤 准备s3桶 输入桶名,创建s3桶,如下图: 创建桶读写策略 具体内容如下: {"Version": "2012-10-1…

c++之代码编译问题

为什么头文件不是编译的对象 1、头文件与包含指令(#include) 那些没有被项目中任何源文件包含的头文件,编译器是不去理会它的,不管它有没有语法错误,也不管它是否已添加到项目中。 2、包含指令的执行 包含指令是一种预编译指令,它…

如何区别进化和演化

在生物学中,"进化"和"演化"这两个词通常可以互换使用,它们都指的是生物种群随时间推移而发生的遗传变化。然而,在某些语境中,这两个词可能会有细微的差别: 进化(Evolution)…

[翻译] 在 CI 或测试环境中使用 Docker-in-Docker,三思而后行

发布日期:2024-04-08 18:01:01 原文地址:Using Docker-in-Docker for your CI or testing environment? Think twice. Docker-in-Docker 的主要目的是帮助 Docker 本身的开发。许多人使用它来运行 CI(例如使用 Jenkins)&#xf…

[NKCTF2024]-PWN:leak解析(中国剩余定理泄露libc地址,汇编覆盖返回地址)

查看保护 查看ida 先放exp 完整exp: from pwn import* from sympy.ntheory.modular import crt context(log_leveldebug,archamd64)while True:pprocess(./leak)ps[101,103,107,109,113,127]p.sendafter(bsecret\n,bytes(ps))cs[0]*6for i in range(6):cs[i]u32(p…

Java 基于微信小程序的校园请教小程序的研究与实现,附源码

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

SpringBoot整合Spring Data JPA

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合Spring Data JPA 📚个人知识库: Leo知识库,欢迎大家访问 1.…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…