业务挑战
该银行是全国一家互联网银行,坚持移动互联、普惠补位的差异化定位,以及数字普惠、开放连接的特色化经营,着力打造成为一家数字科技普惠银行,依托领先的金融科技能力、稳健的大数据风控技术和高效的互联网开放平台运营模式,服务小微群体、支持实体经济、践行普惠金融。
随着移动互联业务的推广,业务量快速增长,为满足业务系统的高并发需求,该银行进行了多方技术调研,最终选择了 ShardingSphere 产品作为分布式数据库中间件,在全行的重要业务系统中推广使用 ShardingSphere 中间件,思斐公司持续为该银行提供 ShardingSphere 产品咨询及技术支持服务,增强 ShardingSphere 的使用效果,并且提供了更多最佳实践。
实现难点
- 将存量单表数据迁移到分片表中,需要同步对数据主键进行调整;
- 数据分片后的事务处理问题,如何通过设计减少分布式事务的出现;
- 分片后的关联查询、分页查询等如何优化性能;
- 夜间批量查询 SQL 复杂,如何通过并发设计来提升效率;
- 期望通过读写分离降低主库的压力,提升读请求性能;
方案亮点
- 实现了存量数据迁移转换的自动化流程,迁移的同时生成分布式 ID;
新上了一套数据库,在新数据库上分片。
MySQL数据库,原先的一主一从,变成了4主4从,每个实例中有 8个数据库,每个数据库中有1个表,共计32个分片。
以前是自增长主键,改成了雪花算法生成的主键(这个是个定制开发)。
- 通过分片大幅提升了 SQL 查询性能;
- 提前规划了关联表的主键生成方式,确保关联查询在同一个分库中,避免分布式事务;
用户信息,贷款记录,还款记录。关联查询,关联更新。
以用户ID作为主分片键,贷款表、还款计划表等的ID末位4位包含了用户ID信息,确保同一个用户的贷款、还款信息在同一个数据库中,避免同一个用户的数据库操作出现分布式事务。
- 使用读写分离功能,降低了主库的压力。
解决方案
该银行的业务系统主要使用 MySQL、TDSQL 数据库,为了实现对 MySQL 和 TDSQL 数据库的统一管理与高效使用,该银行采用了 ShardingSphere 作为分布式数据库中间件。
ShardingSphere 承担着统一接入 MySQL 和 TDSQL 数据库的关键职责,通过数据分片、读写分离等技术显著提升了系统性能。其中,数据分片技术将海量的数据按照设定的规则分散存储在多个数据库节点上,避免单个数据库节点因数据量过大而导致性能瓶颈,使得数据读写操作能够并行处理,大大提高了数据处理速度。读写分离技术则根据业务读写操作的特点,将读操作和写操作分别分配到不同的数据库节点上执行,进一步优化了系统资源的利用,减轻了主数据库的压力,提升了整个系统的响应速度和吞吐量,有力地保障了银行各项业务的稳定、高效运行。
本项目重点功能如下:
1. 高性能处理海量业务数据
该银行数据库中积累了海量的业务数据,随着银行互联网业务的蓬勃发展,数据量持续快速增长,对系统的存储、处理和管理能力提出了极高的要求。
该银行使用 ShardingSphere 的数据分片功能,将单表中的数据分散地存放至多个数据库或表中,每个分片包含一部分数据,从而提高数据处理的性能、可扩展性和并行处理能力,确保能够高性能访问和处理海量业务数据。
ShardingSphere 支持多种分片策略,包括垂直分片和水平分片。垂直分片按照业务逻辑将表进行归类,分布到不同的数据库中;水平分片则通过某个字段(或某几个字段)根据某种规则将数据分散至多个库或表中。
2. 高并发查询,快速返回查询结果
在银行互联网业务中,大量客户在线查询数据,业务系统需要具备高并发查询能力,快速、准确地向客户返回数据。
ShardingSphere 数据分片可以显著提高系统的并发处理能力,在大量用户高并发的应用场景中,能够确保服务的稳定性和响应速度,确保用户的查询能够得到快速响应。
3. 高性能执行复杂的计算任务
银行每天夜间执行批处理任务,进行银行账务处理、计息、统计等,涉及大量的复杂计算和数据操作,数据库需要具备高性能,确保批处理任务能够按时完成。
ShardingSphere 将数据被分散存储到多个数据库实例或表中,从而减少了单个数据库实例或表的负载,批处理任务可以并行地访问多个数据库实例或表,从而提升数据处理的性能。
客户收益
- 实现多个重要业务系统的数据库分布式改造,构建可灵活扩展的技术架构,为银行的业务拓展和创新奠定坚实的技术基础。
- 使用 ShardingSphere 的数据分片功能,大幅提升了海量数据、高并发业务的处理性能,并具备持续扩展能力,轻松应对业务量的持续增长。
- 使用 ShardingSphere 的读写分离功能,提高数据库的性能,提升业务系统的响应速度和吞吐量。