1.概述
- 目前我们是通过IO流读取和写入Nas盘
- 最终我们的目的是去Nas,文件上云,业务系统接入文件存储服务
- 文件迁移是一个长期的过程,中间过程需要一个兼容,通过SDK读取文件时,文件存储服务直接读取Nas盘.
- 从Nas盘迁移文件到OSS是一个静默过程,业务无感知,对应下图的(5.迁移文件部分)
- 所以为了实现我们的终态,我们需要迁移数据,并且将Nas盘的文件迁移到OSS,文件迁移完成后,文件存储服务无感知切换OSS,下线Nas.
1.1背景
实现今年去NAS盘,文件上云的目标。其中涉及到文件迁移和数据迁移,需要本文档去说明其中的问题和解决方案
1.2目的
1.2.1:本设计文档,包含业务系统的文件迁移,业务系统的数据迁移两部分
1.2.2:本设计文档的目的是指导开发,实现最终文件迁移和数据迁移
3.需求分析
3.1:将业务系统数据库的文件路径字段,迁移到文件系统
3.2:将业务系统保存的Nas盘文件,迁移到OSS
3.3:将文件从OSS迁移到OSS,或者从OSS迁移到S3.简单来说,就是将文件从源地址迁移到目标地址。
4总体方案
【术语解析】
- 文件迁移==文件备份。比如将文件从NAS盘迁移到OSS,或者说,将文件从NAS盘备份到OSS,都是同一个意思
- 业务系统,指的是接入文件存储服务的系统,比如:PCB订单服务就是属于一个业务系统
- 数据迁移系统,指的是运行的数据迁移服务
- 主表:fr_file_record,也称为文件记录主表;NAS文件记录表:fr_nas_file_record;OSS文件记录表:fr_oss_file_record
【方案解析】
- 得先有迁移的数据,才能驱动要迁移的文件
- 首先由数据迁移程序,从业务系统同步数据到数据迁移服务的迁移记录表transfer_file_log
- 同步完成以后,回写业务系统的新增字段file_id,这个file_id对应的是这条记录在文件存储服务的唯一id
- 同时要写入文件存储服务的nas文件记录数表fr_nas_fie_record
- 此时文件迁移服务就会读取nas文件记录表fr_nas_file_record的记录,开始从Nas盘迁移文件到OSS
- 迁移完成了以后,需要回写OSS文件记录表fr_oss_file_record
4.1数据迁移方案
4.1.1数据迁移生命周期
- 第一步:将业务系统的业务表file_upload_info的数据,灌到新增的数据迁移表file_transfer_record.也即是将这两张表水位平衡,后面会介绍水位平衡过程。
- 第二步:将业务侧新增的数据迁移表file_transfer_record的数据,同步到数据迁移服务的数据迁移表file_transfer_record.
- 第三步:由于各种可能异常原因,导致业务侧和数据迁移服务侧的数据迁移状态不一致,需要这一步进行回查两侧状态,将不一致的状态修改,实现最终一致。
- 第四步:经过了前面的三步,业务侧的数据已经成功迁移到迁移服务了,最后就是直接在业务侧快速的将file_id回填到业务表file_upload_info
4.1.2数据迁移整体流程
【迁移整体流程说明】
- 第一步:业务系统水位平衡:目的是将业务系统的业务表,填平业务系统的数据迁移表
- 第二步:监控水位平衡进度,同时要检测自动水位平衡程序是否已启动,没启动的话要自动拉起
- 第三步:业务系统与数据迁移系统水位平衡:将第一步的业务系统的数据迁移表的数据,同步到数据迁移系统的文件记录主表
- 第四步:迁移状态回查,实现数据最终一致性。查询业务系统与数据迁移系统的数据迁移状态是否一致,不一致就修改
4.2文件迁移方案
4.2.1历史文件迁移方案
- 历史文件迁移指的是文件目前存储在NAS盘,现在要迁移到OSS
- 这类迁移,是基于数据已经迁移的前提下进行的
4.2.2增量文件备份
- 新上传的文件会直接上传到文件平台,比如:OSS,S3
- 如果我们有需求需要上传到OSS,同时也要将文件迁移到S3,这个方案就是针对这种情况说的
5架构设计
5.1应用架构
【服务职责说明】
微服务名称 | 中文描述 | 微服务职责 |
file-storage-manage | 文件存储管理服务 |
文件存储后台配置入口,包括以下功能: 存储管理:平台管理,区域管理,目录管理,仓库管理,资源组管理,业务线管理 文件管理:文件列表查询,文件上传,文件下载 |
file-storage-api | 文件存储api服务 | 文件操作功能api服务 |
file-storage-stream | 文件存储流服务 | 文件与Nas,OSS,S3等云平台交互,进行文件的上传下载 |
file-storage-core | 文件核心服务 | 提供给其他服务调用进行文件的管理,备份,安全等核心功能 |
file-storage-task | 文件存储编排服务 |
任务生成,任务调度 |
file-storage-transfer | 数据迁移服务 |
迁移水位平衡,迁移统计,获取迁移数据集合 |
5.2业务架构
6专题设计
7开发视图
7.1工程划分
父工程 | 子工程 | 职责范围 |
file-storage-web | fs-web-api | 文件操作api服务,提供文件操作webapi |
fs-web-api-sdk | 文件操作api封装sdk,供业务系统使用 | |
fs-web-stream | 文件流服务,提供文件流服务处理 | |
file-storage-transfer | fs-transfer-service | 数据迁移服务,处理业务系统业务数据,将其迁移到文件系统中 |
fs-transfer-sdk | 文件迁移sdk,可以接入业务方业务系统的sdk,从而完成远程数据迁移 | |
file-storage-service | fs-componet-auth | 文件服务授权组件 |
fs-componet-cache | 文件服务缓存组件 | |
fs-componet-event | 文件服务事件组件,guava的事件发布 | |
fs-componet-safe | 文件安全组件,集成第三方授权库,提供acl等授权功能 | |
fs-componet-storage | 文件存储组件,抽象云平台(s3,oss),nas等平台功能,提供统一访问入口 | |
fs-componet-tool | 文件工具组件,提供业务异常码,统一返回对象定义等 | |
fs-core | 文件核心服务,提供各个业务模块的数据支持 | |
file-storage-manage | fs-web-manage | 文件后台管理服务,提供各个文件模块的后台管理功能 |