2021-08-19

【CM0071】异地超分
日期 版本 描述 作者
原始需求

详见《云手机异地超分需求说明书》
需求分析
业务场景

当用户移动到其它城市时,连接使用云手机时网络延时会加大。可通过异地超分切换到用当前城市最优机房,将用户RBD数据迁移到对应机房存储,提升云手机网络状态让用户体验更佳。
功能需求
云手机管理平台

1.配置存储节点信息
2.迁移过程审计
双子星客户端

1.客户端迁移测速
2.迁移记录
设计方案
数据库Cloud

1.修改 t_storage_info 表

ALTER TABLE `t_storage_info`
ADD COLUMN `node_num` int(4) NOT NULL DEFAULT 0 COMMENT '存储内网节点数' AFTER `nip`,
ADD COLUMN `parallel_num` int(4) NOT NULL DEFAULT 0 COMMENT 'RBD迁移并行数' AFTER `node_num`,
ADD COLUMN `transfer_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'RBD迁移开关:0.关闭 1.开启' AFTER `parallel_num`

2.更新 t_storage_info 表存储内网节点数量

-- 设置更新节点数量
update `t_storage_info` set node_num = (LENGTH(nip) - LENGTH(REPLACE (nip, ',', '')))

3.修改 t_partition_move_task 表

ALTER TABLE `t_partition_move_task`
MODIFY COLUMN `move_status` int(2) NOT NULL COMMENT '迁移状态(-1:等待中,0:迁移失败,1:迁移成功,2:迁移中,3:暂停中,4:取消)' AFTER `new_pname`,
ADD COLUMN `apply_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间' AFTER `move_describe`,
ADD COLUMN `start_time` timestamp NULL COMMENT '迁移开始时间' AFTER `apply_time`,
ADD COLUMN `finish_time` timestamp NULL COMMENT '迁移结束时间' AFTER `start_time`

业务流程

1.配置存储并发数

2.RBD迁移流程

3.RBD迁移通知回调
接口
云手机管理平台

注:
最大并发数 = t_storage_info【 node_num(节点数) * parallel_num(RBD迁移并行数) 】
当前节点并发数 = t_partition_move_task【 move_status=迁移中 AND storage_id 或 old_storage_id = 节点存储id) 】

1.【修改 -> 页面 -> 存储配置管理 -> 添加存储】参考:com.vcloud.storage.controller.storageController.StorageController#addStorage
添加存储获取集群节点数量时更新表 t_storage_info 里的 node_num 节点数量

2.【新增 -> 页面 -> 迁移策略管理】迁移策略配置
对存储 t_storage_info 配置迁移策略 开关和并行数量,修改并行数量后需要调用RBD接口设置该存储集群节点的并发数

3.【新增 -> 页面 -> 迁移管理】迁移管理
查询 t_partition_move_task 进行任务的管理,相应重试、取消 调用RBD接口,详情调用RBD接口获取迁移过程详情

4.【修改 -> 站点列表】
客户端获取站点列表时新增 ip 参数、以及站点任务情况,按照在线迁移任务比例占存储最大并发数的比例
空闲: < 25%,
一般:< 75% & > 25%,
繁忙:> 75%

5.【新增 -> 站点迁移查询】
查询排队数量(t_partition_move_task apply_time < 当前时间 AND storage_id 或 old_storage_id in (迁移中的两个存储节点)),预计迁移所需时间(查询上一条迁移记录,同 storage_id 到 old_storage_id 迁移成功记录,没有则默认迁移时间(4小时)|如有则计算其上一条成功迁移数据大小时间比例 t_partition_info (b_size,capacity_ratio),t_partition_move_task(start_time, end_time)再根据本次迁移大小计算时间)

6.【修改 -> 站点迁移】
a.排队迁移,写入 t_partition_move_task,任务状态为待迁移
b.不排队迁移,调用迁移RBD服务
 获取redis分布式锁
 查询 storage_id 和 old_storage_id 两个存储节点是否符合并发条件
 符合则把当前任务置为迁移中、不符合则返回需要等待让用户选择
 通知用户开始迁移数据
 调用RBD接口进行迁移,将结果更新到 t_partition_move_task
 解锁redis分布式锁

7.【新增 -> 客户端迁移记录】提供给双子星客户端迁移记录查询
查询 t_partition_move_task 任务

8.【新增 -> RBD迁移回调 】RBD迁移回调
a.RBD迁移回调结果更新到 t_partition_move_task 迁移任务表
b.启动RBD迁移分配线程
c.查询出 t_partiton_move_task 中 storage_id or old_storage_id in (回调迁移中的两个存储节点),按照 apply_time 升序排列,取 两个存储节点中 最大的并发数作为条数
d.循环处理数据调用迁移RBD服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习开源项目成就精彩人生

大家的鼓励我会创作更有实用价值

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值