引言
在数字化转型的浪潮中,云盛海宏 ToC 系统作为公司的业务核心,承载着日益增长的数据量和用户请求。然而,随着业务的快速扩展,原有的数据库架构逐渐显露出性能瓶颈,亟需一种更高效、更可靠的数据库解决方案。在深入分析和多次测试后,我们选择了 TiDB 作为新的数据库平台,以期实现更优的数据管理和服务能力。
背景与挑战
云盛海宏 ToC 系统在业务增长迅速的背景下,遭遇了数据库性能瓶颈。随着数据量的激增,单库单表的数据量快速增长,导致了性能问题的频发。具体来说,存在以下问题:
- 数据量增长:系统中存在千万级别的表87张,亿级别的表21张,对数据库的存储和检索能力提出了更高要求。
- 分库分表数据倾斜:业务系统过度依赖分库分表,导致数据倾斜,影响了数据库性能。
- 隔离程度不足:现有的MySQL实例在面对SQL故障时,影响范围过大,缺乏有效的隔离机制。
TiDB 解决方案
为了解决上述问题,云盛海宏 ToC 系统决定采用 TiDB 作为数据库解决方案。TiDB 的分布式特性允许系统自动处理数据的分片和负载均衡,从而避免了手动分库分表的设计。以下是 TiDB 解决问题的关键点:
- 自动分片:TiDB 通过 PD 记录 region 分布信息,自动处理数据的分片,无需人工介入。
- 负载均衡:TiDB 的 Region 会自动分裂和合并,有效避免了热点问题,实现了负载均衡。
- 资源复用:40个数据库运行在同一个 TiDB 集群,极大提升了资源利用率。
- 资源隔离:TiDB 支持资源组隔离,在用户级别、会话级别、语句级别进行资源控制,增强了系统的稳定性。
实践过程
我们的迁移过程遵循了以下时间线和步骤:
- 接触与测试:从2020年开始了解 TiDB,经过多次 PoC 测试,最终在2021年4月和2022年11月分别测试了 TiDB 5.0.0 和 6.5.0 版本。
- 全量使用:2023年6月,测试环境全量使用 TiDB 6.5.0 版本,并于10月在生产环境中使用 TiDB 7.1.0 版本。
- 全面迁移:到2024年3月,生产环境全部切换至 TiDB 版本。
在迁移过程中,团队采用了以下步骤:
- SQL 录制:利用 MySQL 的慢查询功能录制 SQL。
- SQL 回放:使用 playback 工具将慢查询回放到 TiDB。
- 错误详情分析:分析 SQL 回放的输出报告,解决兼容性问题。
sql兼容性验证方案
playback 工具
项目地址:https://github.com/Percona-Lab/query-playback.git
-
SQL 录制:利用MySQL 的慢查询功能录制sql
- 将 MySQL 慢查询阈值调整为 0,采集一个业务周期全量 SQL(样本越大越准确)
- 部分 SQL 没有 schema 信息,编写脚本根据database<>table关系补充上
-
SQL 回放:playback 工具解析慢查询文件,回放到TiDB
-
报告分析:分析SQL回放的输出报告(含执行失败的 SQL、性能退化的 SQL 等)
sql兼容性验证结果
错误详情分析
-
会员运营:
- 1 处业务 SQL 错误:“during query: Data too long for column”,原因字段精度不够,调大后解决,其余业务 SQL 均兼容
- 剩余 1220855 次均为非业务 SQL 的报错:如 MySQL 中"show binary logs/status/events"、set 特有变量、系统表查询,或慢查询格式调整时出现的一些格式错误等
-
私域商城:
- 无业务 SQL 错误,业务 SQL 均兼容
- 所有错误均为非业务 SQL:如 MySQL 中"show binary logs/status/events"、set 特有变量、系统表查询,或慢查询格式调整时出现的一些格式错误等
可回滚迁移方案
我们制定了详细的可回滚迁移方案,包括:
- 停机后禁用 mycat+mysql 应用连接用户。
- 使用 sync-diff 工具进行数据比对,确保 MySQL 和 TiDB 数据一致。
- 迁移完成后,使用数据比对工具监控告警,确保数据一致性。
注意事项
- 停机后,禁用mycat+mysql应用连接用户,sync-diff工具数据比对mysql和TiDB数据一致
- 迁移完成后,数据比对工具巡检mysql和TiDB数据一致监控告警
- 工具开发:TiDB同步回分库分表的mysql不能直接cdc sink需要开发工具
使用效果
迁移到 TiDB 后,云盛海宏 ToC 系统取得了显著的效果:
- 性能提升:会员运营业务线执行时间节省了一半,私域商城业务线执行时间缩短了六分之五,部分SQL性能提升了百倍。
- 运维效率提升:管理效率提升了至少10倍,显著降低了运维成本。
- 高可用性:经历了10次物理机故障的考验,业务未受影响。
未来规划与思考
云盛海宏 ToC 系统计划从以下三个方向进一步发展:
- 跨机房容灾:建设第二个机房,提升系统的容灾能力。
- 混合事物支持:随着业务的发展,支持简单的业务分析。
- 大数据能力建设:与 TiDB 团队合作,规划大数据能力建设。
总结
通过这次成功的数据库迁移,云盛海宏 ToC 系统展示了 TiDB 在处理大规模数据和高并发场景下的强大能力,同时也为其他企业提供了宝贵的实践经验。迁移到 TiDB 后,云盛海宏 ToC 系统在可观测性方面得到了显著提升,主要体现在以下几个方面:
- 告警完善:TiDB 提供了丰富的告警规则,帮助系统管理员及时发现并响应潜在的问题。这些告警规则可以针对不同的性能指标进行配置,如 CPU 使用率、内存使用量、磁盘 I/O 等,确保系统运行在最佳状态。
- 流量可视化:TiDB 支持集成 Prometheus,这是一个开源的监控和警报工具。通过 Prometheus,TiDB 能够提供流量的可视化功能,帮助管理员理解流量模式和系统负载,从而做出更合理的资源分配和扩容决策。
- 看板丰富:TiDB 支持 Grafana,这是一个跨平台的开源分析和监控解决方案。利用 Grafana 提供的丰富看板,管理员可以创建多种数据可视化展示,包括时间序列、面板、图表等,以直观地展示系统状态和性能指标。
- 慢查询优化:TiDB dashboard 提供了慢查询的列表功能,使得管理员可以方便地查看慢查询的执行时间、消耗资源以及执行计划等详细信息。这有助于识别和优化慢查询,提高数据库的整体性能。
- 集群状态一目了然:TiDB dashboard 的流量可视化功能通过一张图展示了整个集群的库表冷热情况,使得管理员可以快速把握集群的运行状况,及时发现热点数据和潜在的性能瓶颈。
通过这些可观测性的提升,云盛海宏 ToC 系统能够更加精细和主动地进行数据库管理,提高了运维效率,降低了故障率,同时也增强了对系统状态的实时监控和快速响应能力。