查询增速200倍!看金融业数据库架构如何在蜕变中逆袭

2018 年 4 月 11 日 DBAplus社群 姜伟锋


作者介绍

姜伟锋,美利金融融资财务团队JAVA后端技术专家,曾从事于互联网金融P2P、第三方支付相关交易、支付、清结算、账务平台系统相关架构设计、研发工作,目前从事于财务项目相关的工作。个人博客:https://my.oschina.net/u/3775437/blog


一、说在前面


分布式是一个老生常谈的话题了,大家都在做服务拆分、微服务化,那么数据库层不做分片,应用的整体性能也不会得到更好的提升。今天主要说的是财务平台的数据库架构是怎么演变的、不同阶段的架构是为了解决什么样的问题。


本文框架

财务平台数据库架构演变:

1、分片模式

2、读写分离模式


二、财务平台数据库架构演进


1
分片模式


解决的是自动化代替手工,先解决历史数据、增量数据存储的问题。


“架构界”有一句话是“任何架构都是为业务服务,根本目的是要解决现阶段的业务问题。没有更好的架构,只有合适不合适”,我觉得说的很有道理。


财务平台业务处理流程是:公司大数据平台从对接财务平台的业务系统数据库中抽取原始业务数据后,清洗、转换成财务口径的业务数据,推送到财务平台,然后经过财务平台的账务处理引擎进行账务处理。


财务平台是对接公司的多个业务线、产品线的业务系统,担负着公司应收应付、实收实付的财务核算职责,因此数据量巨大。目前,财务平台线上冷热数据总量在130TB左右,日热数据量在5百W、月热数据在5千万左右。数据库架构初期采用是主从模式,因此,财务平台数据库架构怎么支撑这样日益增长的数据量,是一个挑战。


财务平台V1.0为了快速落地进而提高财务人效,业务目标很明确:


系统财务核算代替人工财务核算,节省人力成本。


结合财务平台业务CPU、IO密集型的一个特点,为了减少数据库压力、能支撑财务人员第一次庞大的历史数据、后续增量数据账务处理操作,数据库架构采用了分片。从后期的效果来看,财务平台能平稳的走到今天很关键的一步就是在架构设计上有了较大的改进。


目前数据库分片的技术方案有很多,基于传统数据库有Server端的中间件如MyCat;基于Database Mesh思想架构的轻量级的Sharding-JDBC;也有新型的New SQL数据库,如TiDB等。最后经过评估,财务平台目前正在用的方案是Sharding-JDBC,它支持灵活的分片规则、读写分离、分布式柔性事务等特性,基本上可有满足所有的业务场景。 


架构图如下所示:



财务平台是根据账套字段来纵向分库、按照创建时间字段横向分表,后期要先根据事务处理、事务处理类型字段进行纵向分表之后再根据创建时间字段横向分表,数据分片的维度更细一些,会把数据在数据库层打的比较散,最大限度的提高数据库的并行度,这样才能更大限度的提升数据库读写能力。


财务平台V1.0解决了数据存储的问题,数据库已经实现了分片,所以查询的问题只要合理地约束前端页面查询条件和Sharding-JDBC的分片字段完美结合,再加上把数据库索引、SQL优化到位,基于MySQL理论上单表3千万查询速度是可以满足业务需求的。


数据库分片以后,在应用层就会多个数据库进行事务操作。财务平台采用的方案是TCC补偿机制实保证数据的最终一致性,这也要求应用层的事务接口必须是幂等的。


2
读写分离模式


为什么要做读写分离?


财务平台V1.0数据库分片解决了数据存储的问题,SQL也已经做过性能优化,目前这种架构方案是可以支撑一段时间的,但还是有以下这些风险:


  • 随着业务数据量的不断增加,因为数据库已经分片,数据库物理表会越来越多,所以每张物理表的索引维护是一个问题。财务平台线上的这个版本还是1.5,Sharding-JDBC2.0已经加入了“逻辑索引”这个概念,可以解决这个问题,既便是这样可能也需要人为去维护索引。

  • 前台页面查询的条件也会随着新的业务接入变化,因此,要根据页面的输入条件调整数据表的索引,索引的命中率无法100%保证。

  • MySQL索引机制决定了不能随意增加索引,适度的增加索引可以提高查询性能,索引过量会对其他操作有性能影响,因此索引限制这也是一个问题。

  • 数据库读锁和写锁的竞争也是一个问题,会降低数据库的并行度。


基于MySQL读写分离


  • 解决的是账务处理的效率问题;

  • 可以解决读锁和写锁竞争的问题,提高数据库并行度。


读写分离对数据一致性的影响,从库的数据延迟怎么处理呢?


  • 对必须要求有一致性的功能是无法进行读写分离的,可以针对一些场景不实现读写分离、一些场景实现读写分离这样的方案解决在读写分离架构下数据一致性的问题;

  • 从库数据延迟的问题,业务优先级不高的话在延迟时间范围内可以进行重试查询,业务优先级较高的可借助分布式缓存方案解决。


架构图如下所示:



基于MySQL、ES的读写分离


为什么采用ES代替基于MySQL的读操作呢?


  • ES采用倒排索引机制,理论上比基于MySQL的索引查询速度能提升百倍以上;

  • 对索引没限制,可以用于多海量数据多维分析的场景,查询条件约精确查询效率越高,可以全文检索;

  • 维护索引方便,可以保证索引的命中率。


架构图如下所示:



优化前后效果对比图如下所示:



三、说在最后


这里主要介绍了财务平台的数据库架构演变过程,项目搭建初期,为了保证项目按时交付,并结合财务平台写多读少的业务场景,采用了分片这种架构方案。


财务平台经过三个季度的平稳运营,随着数据量不断递增,数据库架构方案从基于Sharding-JDBC+MySQL的分片模式演变为现在的基于Sharding-JDBC+MySQL、ES的读写分离模式,足以支撑后续日益增长的数据量。原来基于MySQL方案查询响应时间在秒级,现在基于ES方案查询响应时间可以达到毫秒级,查询性能提升了200倍左右。


大家可以根据自己项目的业务场景、不同阶段采用不同的数据库架构方案,以上内容仅供参考。


近期热文

5大国内外名企转型之痛悟:三步走实现DevOps落地

双活需求下,MongoDB如何筑起高性能、高可用架构?

以表格存储为例,解密阿里在分布式负载均衡的核心力

这里有7种主流案例,告诉你调度器架构设计通用法则

大数据成败之“监”:美团数据质量监管平台这样搭建


最新活动

2018 Gdevops全球敏捷运维峰会(成都站)

登录查看更多
0

相关内容

数据库( Database )或数据库管理系统( Database management systems )是按照数据结构来组织、存储和管理数据的仓库。目前数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
125+阅读 · 2020年5月22日
大数据安全技术研究进展
专知会员服务
93+阅读 · 2020年5月2日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
德勤:2020技术趋势报告,120页pdf
专知会员服务
190+阅读 · 2020年3月31日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
106+阅读 · 2020年1月2日
【大数据白皮书 2019】中国信息通信研究院
专知会员服务
137+阅读 · 2019年12月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
金融风控面试十二问
七月在线实验室
20+阅读 · 2019年4月9日
SLA 99.99%以上!饿了么实时计算平台3年演进历程
51CTO博客
11+阅读 · 2018年4月10日
智能时代如何构建金融反欺诈体系?
数据猿
12+阅读 · 2018年3月26日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
Hierarchy Parsing for Image Captioning
Arxiv
6+阅读 · 2019年9月10日
Arxiv
4+阅读 · 2018年4月29日
Arxiv
3+阅读 · 2018年1月31日
VIP会员
相关VIP内容
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
125+阅读 · 2020年5月22日
大数据安全技术研究进展
专知会员服务
93+阅读 · 2020年5月2日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
德勤:2020技术趋势报告,120页pdf
专知会员服务
190+阅读 · 2020年3月31日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
106+阅读 · 2020年1月2日
【大数据白皮书 2019】中国信息通信研究院
专知会员服务
137+阅读 · 2019年12月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
金融风控面试十二问
七月在线实验室
20+阅读 · 2019年4月9日
SLA 99.99%以上!饿了么实时计算平台3年演进历程
51CTO博客
11+阅读 · 2018年4月10日
智能时代如何构建金融反欺诈体系?
数据猿
12+阅读 · 2018年3月26日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
Top
微信扫码咨询专知VIP会员