一、背景
平台重构上线以后需要面临新老服务切流以及新老数据库数据迁移。
二、目标
做到接近零停机时间完成生产环境数据迁移,保证生产环境数据零丢失,并且迁移完成后新服务能够正常运转。
三、价值
在新老服务线上数据库数据迁移过程中能够尽可能保证服务可用性,避免数据迁移造成线上服务长时间不可用带来的损失。
四、整体方案设计
待迁移的数据基本分为两类,一类是静态(始终不变或变化很小)数据,这类变化很小的数据,通过新增服务开关的方式控制写流量短时间内不让进来,来达到新老数据一致性;一类是动态(比如任务表,始终会有源源不断的流量进来)数据;静态数据迁移很简单,这里就不过多赘述,下面重点将动态数据迁移,迁移流程如下:
1、新服务线上sql脚本和es初始化
2、导出老服务全量数据(db和es),并记录时间点,记为t1时刻
3、迁移全量数据(db和es)
4、新服务上线
5、老服务加入切流功能后上线,切流开关默认关闭
6、灰度发布
1)新服务以测试域名上线,跟目前线上的老服务同时运行
2)打开切流开关,通过apollo配置让一小部分测试商户切流到新服务测试域名,试运行一段时间,测试商户切流时间点选择:测试商户流量最小的时刻
3)新服务稳定后将老服务域名slb解析到新服务域名slb上,老服务下线,切流完成,记为t2时刻,只运行新服务,完成新服务正式发布。
切流方案:
左边为老服务,右边为新服务,mq用的是RocketMQ
7、增量数据迁移
查询全量数据迁移t1时刻和切流完成的t2时刻,这段时间内老服务新增或更新的数据并迁移到新服务
至此,整个线上数据动态迁移完成。
标签:服务,域名,线上,切流,迁移,动态数据,数据 From: https://www.cnblogs.com/peijian/p/17055657.html