简介: 社区评论系统在完成了基础功能建设后,开始逐步将老系统业务迁移到新系统,实现整体架构统一、新系统功能赋能老业务、节省系统维护成本;迁移过程本身虽然枯燥无味,但并不妨碍通用解决方案的沉淀,本文以评论新老系统迁移为背景,聊聊系统迁移的基本方法,同时也希望能抛砖引玉,探索更多迁移方案的可能性。


作者|王翔(烈翼)
出品|阿里巴巴新零售淘系技术部

背景

社区评论系统在完成了基础功能建设后,开始逐步将老系统业务迁移到新系统,实现整体架构统一、新系统功能赋能老业务、节省系统维护成本;迁移过程本身虽然枯燥无味,但并不妨碍通用解决方案的沉淀,本文以评论新老系统迁移为背景,聊聊系统迁移的基本方法,同时也希望能抛砖引玉,探索更多迁移方案的可能性。

系统迁移方案概述

▐ 主要步骤

就一般的系统而言,主要涉及到以下几个步骤,其中,读写接口迁移顺序可以根据实际情况做先后调整:

基础数据存量/增量迁移
目标:老系统存量数据迁移到新系统,增量数据实时同步到新系统

需要解决的主要问题:
1、保证数据不丢失,同步后新系统数据准确
2、新老系统id映射:新老系统id体系不同时,需要做好id映射,比如新db中扩展字段存老系统id,同时将老系统id对应的新系统id存到ldb,方便反查;评论新系统设计之初为了方便老系统迁移,使用了与老系统相同的sequenceId生成体系,因此不需要考虑id映射问题

读接口迁移:先读新系统
目标:接口层直接查新系统
需要解决的主要问题:新老接口数据结构兼容,降低前台迁移成本

写接口迁移
目标:新数据先写新系统

需要解决的主要问题:
1、前期需要支持反向同步到老系统(这一步之所以需要双向同步回老系统,主要是为了兼容老业务接口、odps数据,很难一步切干净),需要保证双向同步时不出现死循环
2、老系统各个写入口都要做适配路由,这一步改造的工作量比较大,与具体系统特性相关性比较大,本文不做讨论

▐ 关键阶段

相应的,系统迁移过程也会有几个关键阶段:

阶段一:数据单向同步阶段(老系统->新系统)
阶段二:读/写接口迁移完成,入口流量先走新系统,增量数据先写入新系统,再同步回老系统(双向同步阶段)
阶段三:所有下游业务流量、mtop入口流量均迁移到新系统,老系统流量逐步清0直到下线;这一步也是最终完美的状态

一般来讲,需要平台侧做的适配改造全部完成后,即可进入阶段二,阶段三主要依赖逐步推动下游业务方迁移,平台方本身不需要再做额外改动,因此本文总结的方案重点以解决前两个阶段面临的问题为主。

此外,根据不同的系统特性,除了基础数据迁移,可能还会多一步索引构建,比如评论系统,索引层就是系统很重要的一部分,几乎支撑了前台所有的查询场景,而索引构建策略也会影响到迁移方案的选型。

评论系统迁移的几种方案

▐ 方案一:依赖精卫做数据迁移与索引构建

数据存量迁移/增量同步
1、精卫存量/增量任务
2、精卫client/sar包任务同步创建索引(目前client模式已下线,只能使用sar包方式)

说明:
1、如果系统可以接收一部分增量数据不一致,可以先开启增量任务,再开启全量任务(相同记录会覆盖写);如果系统对一致性要求高,需要使用精卫增量任务的位点回溯功能,保证在全量数据迁移期间发生的所有变更都能同步到新库,如果全量任务迁移时间较长,还需要联系精卫值班保留更长时间的位点(线上默认位点只保留1天)

2、索引构建依赖精卫任务同步完成,整体示意图如下:

读接口迁移
由于索引已同步创建,所以可以直接在接口层做读接口路由迁移

写接口迁移
1、支持反向同步通道(新系统->老系统)
2、源系统tag防止死循环
3、写接口层路由,先写新系统

说明:通过给先写入新系统的数据打源系统标的方式防止双向同步死循环(这里也可以使用打鹰眼标的方式,但个人认为不如直接存储源系统标更保险,也容易根据源数据溯源),老系统->新系统的增量通道中通过校验数据是否带新系统标,决定处理还是丢弃,写接口迁移后新老系统双向同步状态示意图如下:

▐ 方案二:索引构建不依赖精卫

数据存量迁移/增量同步
1、精卫存量/增量任务

说明:存量/增量数据方案与方案一相同

写接口迁移
(双向同步阶段)
1、反向同步通道(保证数据能回流到老系统,兼容老业务) 新->老
2、源系统tag(保证双向同步时不出现循环)
3、写接口路由开启(从先写老库切换为先写新库)

说明:读接口切换前需要先完成索引重建,索引重建包括增量/存量两部分,增量部分依赖系统异步消费评论写接口成功后发的metaq消息完成,因此需要先对写接口做迁移,保证增量数据能进索引:

其他步骤与方案一相同

存量数据索引构建
1、dts 任务读取存量离线表,完成存量数据新索引构建,这里可以使用多机并发任务。
说明:增量数据索引构建依赖写接口切换,存量数据的索引构建则需要专门写任务读离线表完成。

读接口迁移
1、索引存量/增量数据构建完成后,可以开启读接口切换

▐ 方案三:完全不依赖精卫

数据存量迁移/增量同步
1、dts 任务读取存量离线表,接口方式迁移存量数据
2、增量同步依赖接口层双写

说明:精卫方案一般适用于新老系统存储都使用mysql的场景,当存储方案不一致时,只能通过写dts迁移任务的方式完成存量数据迁移,由于是走接口层写入数据,所以metaq方式构建的索引可以同步完成重建。

读接口迁移
1、第一步会同步完成索引构建,因此可以先迁读接口

写接口迁移
1、反向同步通道
2、写接口路由开启,路由开启后,接口层双写自动关闭,数据开始 先写新系统->再回流老系统

说明:这里不存在双向同步的问题,老系统->新系统的同步链路在接口层双写,写接口路由开启后,在先写新系统的同时,双写逻辑就会关闭,只需要构建反向通道将数据同步回老系统即可

总结

3套方案分别解决不同场景的问题,各有优劣,有以下几点可以作为方案选型的判断依据:

1、基础数据迁移:新老系统都使用mysql存储时,尽量采用精卫做全量/增量迁移,精卫本身作为一款专业的数据同步工具,功能全面,可以最大程度保障数据迁移后的一致性和准确性,同时还可以利用精卫控制台随时调整迁移速度,保障迁移过程的稳定性。
2、读写接口迁移顺序:依据索引构建的具体方案决定读写迁移的先后,读接口迁移强依赖索引构建完成:

方案一的优点:基础数据与索引可以同步完成迁移,先切读接口也比先切写接口风险较低。

方案二的优点:虽然不依赖精卫构建索引使得需要专门写任务重建索引,但不依赖精卫的索引构建方案在实际工程中更方便逻辑修改与迭代,精卫依赖binlog的方式原生决定了预发的不可测试性,不方便功能的快速迭代和稳定上线。

One More Thing

我们是淘宝内容社交互动团队,主要承载了用户从“买在淘宝”到“消费生活在淘宝”的重要体验升级,基于新的产品模式和运营模式,通过内容化,游戏化和社交社区化推动用户在淘宝内的活跃。伴随着广阔的业务空间机会之下的是有足够挑战性的技术场景: 我们有百亿级的用户关系和用户互动数据资产有待发掘,百万QPS的大流量高可用强一致性多租户技术场景,覆盖从工程开发,推荐算法,大数据分析平台等,提供了职业生涯增长空间和多样的岗位选择:数据化驱动运营,大容量高并发系统,推荐搜索服务平台,深度学习的工程体系等等
请投递简历至邮箱:zizhan.xb@taobao.com

还在为系统迁移烦恼?掌握这些“基本法”解锁更多可能相关推荐

  1. 【复杂系统迁移 .NET Core平台系列】之调度服务改造

    源宝导读:微软跨平台技术框架-.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件.本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验. ...

  2. 【复杂系统迁移 .NET Core平台系列】之认证和授权

    源宝导读:微软跨平台技术框架-.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件.本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验. ...

  3. 【复杂系统迁移 .NET Core平台系列】之静态文件

    源宝导读:微软跨平台技术框架-.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件.本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验. ...

  4. 【复杂系统迁移 .NET Core平台系列】之界面层

    源宝导读:微软跨平台技术框架-.NET Core已经日趋成熟,已经具备了支撑大型系统稳定运行的条件.本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验. ...

  5. 魅族15无法连接计算机,还在为数据丢失而烦恼?魅族15告诉你什么叫做碎屏无忧...

    原标题:还在为数据丢失而烦恼?魅族15告诉你什么叫做碎屏无忧 无论是时下大热的"全面屏"技术或是"刘海屏"手机,他们都有着一个共同的特征:超高的屏占比.在为用户 ...

  6. 固态硬盘系统迁移踩过的坑

    趁着固态硬盘便宜,赶紧入了手.收到之后,迫不及待地系统迁移. 废话不多说,直接上步骤. 我买的威刚ssd,没找到官方地系统迁移工具,只好使用的分区助手. 如图中所示.点击之后就开始自动迁移系统. 迁移 ...

  7. linux 系统迁移 固态硬盘,系统迁移

    使用DiskGenius软件,可以方便地将系统从一个硬盘迁移到另外一个硬盘上,或者更常见的是将系统从硬盘迁移到SSD固态硬盘.U盘等. 首先, 需要将第二块硬盘.SSD固态硬盘或U盘等,在电脑上安装好 ...

  8. 迁移操作系统:如何把系统迁移到固态硬盘SSD?

    如何把系统迁移到固态硬盘SSD?很多人新买了固态硬盘之后不知道如何操作才能将现有的操作系统的所有数据完完整整迁移到新的固态硬盘上,还有的人甚至不知道还能这样迁移,直接就重装了系统,之后又进行一系列拷贝 ...

  9. 联想笔记本win10系统加装SSD固态硬盘,系统迁移流程

    前几年的联想笔记本原始只配置一个机械硬盘,系统为win10系统,随着时间推移运行速度比较慢,很多情况下考虑加装SSD并进行系统迁移,操作要点繁琐,不同型号的具体操作流程都差不多,现在就以联想G40笔记 ...

最新文章

  1. 高频数字币交易所系统有哪些技术挑战?
  2. Dom查看数据库mysql_Linux中OS系统和MySQL数据库巡检生成html
  3. RabbitMQ之mandatory和immediate
  4. JDK1.6历史版本的下载
  5. 来一个可能防止恶意采集和爬虫的SH
  6. Blazor VS 传统Web应用程序
  7. mysql-练习的数据准备
  8. 早上发现还是问题不断
  9. 社会保险的多层次包括哪些?
  10. MySQL常见故障处理手册_转
  11. 复现IIS PUT任意上传漏洞(过程,步骤,说明)
  12. adbyby广告屏蔽大师使用体验,附自己的过滤规则
  13. Google快讯 - UTStarcom
  14. c语言tc环境下while多大,求救,wintc环境下,写了程序,调试不出来,先谢谢了...
  15. OTA升级的三种方式
  16. 移动开发采用什么平台好?
  17. configure error:Package requirements (openssl) were not met
  18. Oauth认证-新浪微博开发(上)
  19. 也许是史上最全的一次CDN详解
  20. 使用PlayCanvas制作一个简单的小游戏(一)

热门文章

  1. Python 标准库之 XML(下)
  2. c 自动生成html文件,webpack4系列教程(三):自动生成项目中的HTML文件
  3. PHP图片间隙用什么代码,如何解决CSS图片下面有间隙的问题
  4. kubectl 安装
  5. 2002: [Hnoi2010]Bounce 弹飞绵羊
  6. 人工智能——Singleton模式
  7. 关于如何实现程序一天只启动一次的想法(C++实现)
  8. Dave Python 练习十五 -- 面向对象编程
  9. Quartz.NET 架构与源代码分析系列 part 2 :Job 作业
  10. Ubuntu14.04 桌面 launcher 终端 状态栏 失效解决