极速同步如何保证反向同步数据一致性

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 背景 文件网关在一个事务中将客户户端数据写入缓存盘返回,然后以异步的方式在后台线程中上传到OSS,如果存在多个网关共享同时写入一个文件,对象的完整性是由OSS语义来保证的,网关始终能够保证正向同步的数据一致性。

背景

文件网关在一个事务中将客户户端数据写入缓存盘返回,然后以异步的方式在后台线程中上传到OSS,如果存在多个网关共享同时写入一个文件,对象的完整性是由OSS语义来保证的,网关始终能够保证正向同步的数据一致性。当网关需要反向同步OSS端的元数据时,之前采用的策略是定期在用户所进入的目录内进行全扫描,也可以保证网关的元数据最终与OSS一致。为了实现高效的数据共享,网关推出了极速同步功能,以初始全量扫描+增量事件通知的方式快速同步云上的元数据。在用户体验到秒级同步的极速性能时,网关是如何保证反向同步的一致性呢?是否会存在丢失增量信息的情况?如果由于网络原因导致MNS服务不可用又如何处理?下面我们就着这些问题展开讨论。

状态机管理

在极速同步的生命周期管理中,我们引入了几个状态位。
state

全量同步等待:网关创建同步组时会同时创建OSS事件通知规则,规则会同步到OSS集群,生效需要10分钟时间,如果同步组创建之后共享立即开启同步功能,则需要等待最长时间,稍后开启的话等待时间会随之减少。
全量同步进行中:创建全量同步扫描任务,多线程快速扫描OSS同步元数据到网关,监控任务状态,直至任务完成
同步正常:全量同步任务完成后,开始增量同步,处理消息队列的通知消息,并监控消息主题和消息队列的状态以及心跳包监听。需要注意的是,在全量同步等待中,网关已经开启消息监听,在全量同步的过程中有OSS事件发生,也会进行处理。虽然与全量同步可能存在重复对象处理,保证了全量同步完成时,网关的元数据和云上是完全一致的。
同步异常:异常是一个统称,会细化为消息主题不可访问,消息队列不可访问。

状态机异常处理

全量同步等待中:如果网关重启或者后台进程重启,会持久化保存等待时间,保证事件规则生效。
全量同步进行中:如果全量扫描任务出现异常,会重新发起扫描任务。
同步正常:如果健康检查中发现消息主题或者消息队列不可访问,会上报异常状态。同时每个开启极速同步的共享会发送心跳包到消息主题,如果没有收到心跳包,有可能是消息主题/消息队列不可访问导致消息通路中断或者是网关宕机很长一段时间才恢复。MNS可以保证已经成功投递的消息至少会被消费一次,如果长期没有收到心跳包,投递的消息会在消息队列中堆积,考虑到消息有其存活周期,心跳包中断超过一定的期限,我们会重启全量扫描任务保证极速同步共享重新获得跟OSS一致的元数据信息。

消息投递失败处理

对于消息主题和消息队列的持续异常网关会通过健康检查上报,这里讨论的是偶发性的OSS事件通知投递失败。OSS投递事件消息,会有简单重试机制,如果还是失败的话,会把投递状态位返回给网关,网关会生成自定义的消息往消息主题,重试直至投递成功。

小结

本文介绍了极速同步的生命周期管理,包括同步中的状态机管理以及异常处理。网关确保极速同步共享的消息投递成功,MNS保证了消息最少被消费一次,可以保证消息都能够被处理。在异常情况下,会有健康检测上报和心跳包实效管理,重启全量同步扫描保证数据的最终一致性。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
数据同步大事务同步延迟
数据同步大事务同步延迟
25 6
|
14天前
|
NoSQL Redis
Redis事务:保证数据操作的一致性和可靠性
Redis事务:保证数据操作的一致性和可靠性
|
10天前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
11 0
|
3月前
|
SQL 监控 调度
dts数据一致性保证
dts数据一致性保证
39 3
|
3月前
|
消息中间件 Java 数据库
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
30 0
|
3月前
|
消息中间件 缓存 中间件
如何保证缓存和数据库数据一致性
如何保证缓存和数据库数据一致性
|
6月前
|
存储 消息中间件 缓存
场景应用:如何保证缓存与数据库的双写一致性?
场景应用:如何保证缓存与数据库的双写一致性?
|
9月前
|
消息中间件 存储 缓存
如何保证缓存与数据库双写时的数据一致性?
如何保证缓存与数据库双写时的数据一致性?
|
11月前
|
监控 关系型数据库 MySQL
如何避免主从不同步
如何避免主从不同步
73 0
|
11月前
|
CDN
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
多主复制的最大问题:可能发生写冲突,这是必须要解决的。
85 0