业务挑战
该集团主营零售业务,“客户数据中心系统”是公司最核心的系统,主要包括了会员、积分、折扣、交易记录、营销等核心数据。系统对外提供服务时,每个业务单元会独立使用一个 MySQL 数据库集群,部分业务单元数据量比较大,导致系统运行缓慢,特别是在节日优惠活动期间,由于客户访问量大,系统的性能出现明显的瓶颈,对节日优惠活动开展造成一定程度的影响。
实现难点
- 海量数据水平分片技术难度大,需要保证分片后 SQL 兼容性和高性能;
- 水平分片扩缩容需要对业务无影响,能够根据业务系统数据量和访问量进行快速调整;
- 水平分片拆分后,业务上存在跨实例关联调用的情况,支持难度大;
方案亮点
- 零侵入:透明化地实现数据分片功能,避免业务逻辑中侵入数据分片逻辑;
- 性能:按照 memberId 进行分库,拆分为 128 + 1 个分库,可以有效均衡对每一个数据节点的访问量,从而保证海量数据存储下的高性能;
- 连接聚合:通过连接聚合功能,将同一个 ip + port + user 下的连接进行复用,并通过 SQL Schema 改写和 UNION ALL 改写,将连接的使用降到最低;
- 联邦查询(Distributed Join):通过联邦查询,能够自动识别出 SQL 是否是跨实例查询,然后通过语义分析构建出执行计划,并根据执行计划将查询中涉及的结果集,搬迁至目标数据库中执行,从而实现跨实例查询的高效支持;
- 弹性扩容:Scaling 功能能够提供自动化地扩容、缩容能力,灵活应对业务数据量的变化。
解决方案
本项目在数据库结构不做调整的前提下,按业务对数据库进行分库分表,解决了数据库实例存储容量过高问题,大幅提升了系统性能。
客户收益
- “客户数据中心系统”的性能得到明显提升。
- 节假日优惠活动期间,用户访问量和并发量比平时显著增加,系统仍然能够快速响应,用户的操作非常流畅。