TiDB 在 Ping++ 金融聚合支付业务中的实践
Ping++ 介绍
Ping++ 是国内领先的支付解决方案 SaaS 服务商。自 2014 年正式推出聚合支付产品,Ping++ 便凭借“7行代码接入支付”的极致产品体验获得了广大企业客户的认可。
如今,Ping++ 在持续拓展泛支付领域的服务范围,旗下拥有聚合支付、账户系统、商户系统三大核心产品,已累计为近 25000 家企业客户解决支付难题,遍布零售、电商、企业服务、O2O、游戏、直播、教育、旅游、交通、金融、房产等等 70 多个细分领域。
Ping++ 连续两年入选毕马威中国领先金融科技 50 强,并于 2017 成功上榜 CB Insights 全球 Fintech 250 强。从支付接入、交易处理、业务分析到业务运营,Ping++ 以定制化全流程的解决方案来帮助企业应对在商业变现环节可能面临的诸多问题。
TiDB 在 Ping++ 的应用场景 - 数据仓库整合优化
Ping++ 数据支撑系统主要由流计算类、报表统计类、日志类、数据挖掘类组成。其中报表统计类对应的数据仓库系统,承载着数亿交易数据的实时汇总、分析统计、流水下载等重要业务:
随着业务和需求的扩展,数仓系统历经了多次发展迭代过程:
由于业务需求中关联维度大部分是灵活多变的,所以起初直接沿用了关系型数据库 RDS 作为数据支撑,数据由自研的数据订阅平台从 OLTP 系统订阅而来。
随着业务扩大,过大的单表已不足以支撑复杂的查询场景,因此引入了两个方案同时提供数据服务:ADS,阿里云的 OLAP 解决方案,用来解决复杂关系型多维分析场景。ES,用分布式解决海量数据的搜索场景。
以上两个方案基本满足业务需求,但是都仍存在一些问题:
ADS:一是数据服务稳定性,阿里云官方会不定期进行版本升级,升级过程会导致数据数小时滞后,实时业务根本无法保证。二是扩容成本,ADS 为按计算核数付费,如果扩容就必须购买对应的核数,成本不是那么灵活可控。
ES:单业务搜索能力较强,但是不适合对复杂多变的场景查询。且研发运维代价相对较高,没有关系型数据库兼容各类新业务的优势。
所以需要做出进一步的迭代整合,我们属于金融数据类业务,重要性安全性不能忽视、性能也得要有保障,经过我们漫长的调研过程,最终,由 PingCAP 研发的 TiDB 数据库成为我们的目标选型。
TiDB 具备的以下核心特征是我们选择其作为实时数仓的主要原因:
高度兼容 MySQL 语法;
水平弹性扩展能力强;
海量数据的处理性能;
故障自恢复的高可用服务;
金融安全级别的架构体系。
并追踪形成了以下数据支撑系统架构:
新的方案给我们的业务和管理带来了以下的提升和改变:
兼容:整合了现有多个数据源,对新业务上线可快速响应;
性能:提供了可靠的交易分析场景性能;
稳定:更高的稳定性,方便集群运维;
成本:资源成本和运维成本都有所降低。
TiDB 架构解析及上线情况
TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 NewSQL 数据库。从下图 Google Spanner 的理念模型可以看出,其设想出数据库系统把数据分片并分布到多个物理 Zone 中、由 Placement Driver 进行数据片调度、借助 TrueTime 服务实现原子模式变更事务,从而对外 Clients 可以提供一致性的事务服务。因此,一个真正全球性的 OLTP & OLAP 数据库系统是可以实现的。
我们再通过下图分析 TiDB 整体架构:
可以看出 TiDB 是 Spanner 理念的一个完美实践,一个 TiDB 集群由 TiDB、PD、TiKV 三个组件构成。
TiKV Server:负责数据存储,是一个提供事务的分布式 Key-Value 存储引擎;
PD Server:负责管理调度,如数据和 TiKV 位置的路由信息维护、TiKV 数据均衡等;
TiDB Server:负责 SQL 逻辑,通过 PD 寻址到实际数据的 TiKV 位置,进行 SQL 操作。
生产集群部署情况:
现已稳定运行数月,对应的复杂报表分析性能得到了大幅提升,替换 ADS、ES 后降低了大量运维成本。
TiDB 在 Ping++ 的未来规划
- TiSpark 的体验
TiSpark 是将 Spark SQL 直接运行在分布式存储引擎 TiKV 上的 OLAP 解决方案。下一步将结合 TiSpark 评估更加复杂、更高性能要求的场景中。
- OLTP 场景
目前数仓 TiDB 的数据是由订阅平台订阅 RDS、DRDS 数据而来,系统复杂度较高。TiDB 具备了出色的分布式事务能力,完全达到了 HTAP 的级别。
TiKV 基于 Raft 协议做复制,保证多副本数据的一致性,可以秒杀当前主流的 MyCat、DRDS 分布式架构。且数据库的可用性更高,比如我们对生产 TiDB 集群所有主机升级过磁盘(Case记录),涉及到各个节点的数据迁移、重启,但做到了相关业务零感知,且操作简单,过程可控,这在传统数据库架构里是无法轻易实现的。
我们计划让 TiDB 逐渐承载一些 OLTP 业务。
对 TiDB 的建议及官方回复
DDL 优化:目前 TiDB 实现了无阻塞的 online DDL,但在实际使用中发现,DDL 时生成大量 index KV,会引起当前主机负载上升,会对当前集群增加一定的性能风险。其实大部分情况下对大表 DDL 并不是很频繁,且时效要求并不是特别强烈,考虑安全性。建议优化点:
是否可以通过将源码中固定数值的 defaultTaskHandleCnt、defaultWorkers 变量做成配置项解决;
是否可以像 pt-osc 工具的一样增加 DDL 过程中暂停功能。
DML 优化:业务端难免会有使用不当的 sql 出现,如导致全表扫描,这种情况可能会使整个集群性能会受到影响,对于这种情况,是否能增加一个自我保护机制,如资源隔离、熔断之类的策略。
针对以上问题,我们也咨询了 TiDB 官方技术人员,官方的回复如下:
正在优化 Add Index 操作的流程,降低 Add Index 操作的优先级,优先保证在线业务的操作稳定进行。
计划在 1.2 版本中增加动态调节 Add Index 操作并发度的功能。
计划在后续版本中增加 DDL 暂停功能。
对于全表扫描,默认采用低优先级,尽量减少对于点查的影响。后续计划引入 User 级别的优先级,将不同用户的 Query 的优先级分开,减少离线业务对在线业务的影响。
最后,特此感谢 PingCAP 所有团队成员对 Ping++ 上线 TiDB 各方面的支持!
✎ 作者:宋涛 Ping++ DBA
TiDB 在 Ping++ 金融聚合支付业务中的实践相关推荐
- TiDB 在金融关键业务场景的实践
TiDB 作为一款高效稳定的开源分布式数据库,在国内外的银行.证券.保险.在线支付和金融科技行业得到了普遍应用,并在约 20 多种不同的金融业务场景中支撑着用户的关键计算.本篇文章将为大家介绍分布式关 ...
- TiDB 在量化派风控系统中的应用
作者:朱劲松,量化派研发中心系统架构师,主要参与了基础组件开发.API Gateway 等项目,现在致力于公司风控系统相关业务的架构设计和研发. 一.公司简介 量化派(QuantGroup)创办于 2 ...
- 遍历聚合对象中的元素——迭代器模式(二)
2 迭代器模式概述 在软件开发中,我们经常需要使用聚合对象来存储一系列数据.聚合对象拥有两个职责:一是存储数据:二是遍历数据.从依赖性来看,前者是聚合对象的基本职责:而后者既是可变化的,又是可分离的. ...
- 遍历聚合对象中的元素——迭代器模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/9992005 20世纪80年代,那时我家有一台"古老的"电视机,牌子我忘 ...
- 分布式数据库在金融应用场景中的探索与实践
分布式数据库在金融应用场景中的探索与实践 刘雷, 郭志军, 马海欣, 赵琼, 胡卉芪, 蔡鹏, 杜洪涛, 周傲英, 李战怀 交通银行软件开发中心,上海 201201 华东师范大学数据科学与工程学院,上 ...
- 遍历聚合对象中的元素——迭代器模式(四)
4 使用内部类实现迭代器 在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目的是访问存储 ...
- 谷歌PageRank图算法在金融客户营销中的应用
谷歌PageRank图算法在金融客户营销中的应用 一.PageRank算法原理介绍 二.PageRank 算法代码实现 三.PageRank算法在金融中的应用 万物皆有源-PageRank算法起源 提 ...
- 反向保理供应链金融ABS业务中避免过桥资金的三种方式浅析
保理商作为原始权益人向计划管理入转让其受让的应收账款债权前,应根据保理合同的约定向供应商支付应收账款转让价款.由于保理商的资产规模与项目融资规模往往差距较大,实践中通常有核心企业或其他第三方机构提供过 ...
- 境外聚合支付中,微信和支付宝的不同理念
境外聚合支付中,微信和支付宝的不同理念 这是一篇给技术人员阅读资料文献. 聚合支付犹如水分子汇聚起来的云层.是市场驱使下形成的一种现象. 背景 随着境外交流的密切,跨境支付的场景越来越具体化,游客,境 ...
最新文章
- 适合初学者的数据结构_数据结构101:数组-初学者的直观介绍
- OpenCV On Android
- D3.js 教程: 使用 JavaScript 创建可交互的柱状图
- Segment Routing — SRv6 — 统一的 SDN 控制面与数据面
- python创建新文件-如何在python中编辑文件并创建一个新的文件?
- Bug接口地址找不到
- 阳光学院计算机科学与技术需要英语四级,给各位想报阳光的朋友一点建议!来自学长的亲身经历!...
- eclipse使用ModelGoon插件自动生成java类的UML图
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
- Java基础学习笔记(五)Iterator
- VisualBox安装Ubuntu18.04后续操作:换源、IP、LAMP、phpmyadmin
- Mac配置adb笔记,彻底解决zsh: command not found: adb问题
- 女陔说你不懂我, 到底什么意思
- STC学习:光敏计数
- 数据结构与算法课程笔记(七)
- 华三comware跳槽_H3C Comware
- oracle软件 乱码,oracle 中文乱码解决办法
- stvp打不开iar生成的hex文件
- mysql 清理relay日志_mysql 清除relay-log文件方法
- 2021-2027全球与中国卸扣式绝缘子市场现状及未来发展趋势
热门文章
- phpSysInfo监测服务器
- 百度SEO网站链接抓取器 v1.0
- java中mvc开发模式_MVC开发模式
- 升级版授权系统+盗版追踪+域名IP双授权+在线加密系统
- 我厨蔬菜生鲜商城小程序源码
- 服务器对象错误quot;ASP 0177:80040154quot;Server.CreateObject
- Hashtable Dictionary的使用
- jQuery插件:Tiny Scrollbar滚动条插件(滚动条美化、默认滚动条)
- php获得可靠的精准的当前时间 ( 通过授时服务器 )
- KVM 虚拟机在物理主机之间迁移的实现 -- 静态迁移/动态迁移/存储迁移