ShardingSphere异构迁移最佳实践:3.5亿客户系统RTO降低60倍ShardingSphere+MySQL,性能、可用??性、可维护性均有显着提升,是ShardingSphere异构迁移最佳实践。1客户系统背景当当网客户系统主要负责账户注册、登录、隐私数据维护等功能。历史技术栈是PHP+SQLServer,是标准的中心化架构,如下图。在重构项目启动之前,客户系统的多个业务模块存在逻辑分散、吞吐量低、运维成本高等诸多棘手的业务问题和技术挑战。为了提升客户的购物体验,当当网的技术团队决定优化业务逻辑和底层数据结构,以实现多场景下客户系统的易用性、可扩展性和综合提升等多重目标。重构过程中也实现了跨数据源双写、读写分离、智能网关、灰度发布等多项技术创新。从需求设计、分库分表规划、逻辑优化、压力测试到全面上线,当当网技术团队用半年时间完成了基于3.5亿+用户的系统重构。使用Java语言重构十余个模块,通过ShardingSphere+MySQL构建分布式数据库解决方案,成功完成异构数据库的在线迁移。案件要点如下。使用Java语言重构PHP业务代码;使用ShardingSphere+MySQL替代SQLServer;完成线上3.5亿用户数据的完整迁移;通过数据双写方案完成无缝上线。2PainPoints&Challenges业务痛点在业务层面,客户系统部分模块的注册登录逻辑分散在各端,导致维护成本高,当时的技术架构在性能改进和高可用性。难维护:多平台注册登录逻辑比较分散,业务维护复杂;性能受限:PHP+SQLServer中心化技术架构,吞吐量不足;易用性和安全性差:SQLServer主备状态发生变化后,订阅库会失效,重新配置需要一个时间窗口;SQLServer运行在WindowsServer上,受病毒影响导致安全性差,打补丁后升级启动时间长(>30min)。挑战数据完整性客户系统拥有3.5亿+用户数据。数据迁移过程中,需要保证从SQLServer迁移到MySQL后数据的一致性和完整性;API透明API对调用者保持透明,保证调用者不改变,尽量减少改变接口;无缝切换需要满足业务系统的无缝切换,切换过程对业务无影响;时间紧迫,“618”和“11.11”促销活动前后都会封网,所以需要在两次促销活动之间,限时窗口内完成切换,再进行验证面对“11.11”。3方案整体规划为了提高客户系统的可维护性、易用性和性能,研发团队对客户系统的架构进行了重新梳理。在应用层统一各端的功能逻辑,提高服务的可维护性。在数据库层,将集中式架构调整为分布式数据库架构,以提高性能和可用性,采用ShardingSphere+MySQL构建的开源分布式解决方案。应用层:随着当当网整体技术栈的变化,业务开发语言由PHP改为Java;中间件:使用成熟的开源数据库中间件ShardingSphere实现分库分表;数据库:使用多套MySQL集群代替SQLServer数据库。在整体架构设计方面,引入了分布式主键生成策略、分片管理、数据迁移验证、灰度发布等多个解决方案。分布式主键生成策略数据库架构由集中式向基于中间件的分布式架构转变。分布式主键生成策略是首先需要考虑的问题。在系统改造中,选择建立两个以上的数据库ID生成服务器,每个服务器都有一个Sequence表,记录了每个表的当前ID,Sequence中ID增长的步长就是服务器的个数。起始值依次错开,相当于把ID生成散列到每个服务器节点。分片(ShardingSphere)在客户系统改造中,通过ApacheShardingSphere完成数据库分片,同时开启读写分离功能。由于客户系统的高并发、低延迟需求,接入端选择了ShardingSphere-JDBC,定位为轻量级Java框架,在JavaJDBC层提供附加服务。它使用客户端直接连接数据库,以jar包的形式提供服务,无需额外部署和依赖。可以理解为JDBC驱动的增强版,完全兼容JDBC和各种ORM框架。ShardingShardingSphere支持非常全面的分片算法,包括模、散列、范围、时间和自定义算法。客户使用模分片算法拆分大表。除了Sharding,读写分离还启用ShardingSphere读写分离功能,充分利用MHA集群资源,提高系统吞吐量。双写&数据同步数据同步贯穿于整个重构项目。数据迁移的完整性和数据的一致性是重构的关键。本案例基于历史数据的Elastic-Job同步,周期性的将SQLServer的历史数据同步到MySQL中。关于数据库切换,在切换过程中会采用备份方案,对数据库进行双写,保证切换前后数据的一致性。过程如下。第一步:实现双写机制,断开链接1,打开链接2、3、4,打开链接9、10。步骤2:切换登录服务,断开链接9、10,打开链接7,关闭链接5。第三步:将读服务切换为开启链接8,断开链接6。第四步:取消双写机制,断开链接2,完成切换。在数据校验方面,通过业务端和数据库端两个方面进行校验,这两个方面都是周期性校验的,在不同的时间段以不同的频率校验样本或全量数据的完整性,和COUNT/SUM的验证。客户系统改造采用基于apollo的灰度发布方式。在新登录方式的处理过程中,逐步放开配置项,进行小规模割接,确保上线成功率。重构后的系统架构如下图所示。4用户利益重构后,当当网的系统响应速度得到显着提升,日常运维成本也有所降低。ShardingSphere提供的分布式解决方案必不可少。该方案适用于各种大流量的互联网平台服务,以及电子商务平台等基于数据处理的系统。性能提升,响应速度提升20%以上;易用性增强,ShardingSphere+MySQL方案实现RTO<30s;易于维护,业务逻辑和数据库可维护性显着提高;无缝迁移,6个月内所有模块全部切上线然后,窗口时间为零。5总结这是继《ShardingSphere助力当当WMS:订单效率提升30%,节省千万成本》案例后,ShardingSphere在当当的第二个实战案例。ApacheShardingSphere为业务系统提供强大的支持。简单和完美是ShardingSphere的两大突出特点,让业务逻辑更简单,性能更极致。ApacheShardingSphere社区已经在开源领域工作了7年。长期的坚持让社区更加成熟,呈现出开放、多元化的趋势。我们真诚欢迎有开源情怀和编码热情的朋友一起参与社区建设,也欢迎您提供优质的案例内容分享给社区的朋友。如果您对ApacheShardingSphere有任何问题或建议,欢迎您在GitHubIssue列表中提交,也可以到中文社区进行交流和讨论。GitHubIssue:https://github.com/apache/sha...贡献指南:https://shardingsphere.apache...中文社区:https://community.sphere-ex.com/
