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

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
云备份 Cloud Backup,100GB 3个月
简介: 背景 文件网关在一个事务中将客户户端数据写入缓存盘返回,然后以异步的方式在后台线程中上传到OSS,如果存在多个网关共享同时写入一个文件,对象的完整性是由OSS语义来保证的,网关始终能够保证正向同步的数据一致性。

背景

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

状态机管理

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

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

状态机异常处理

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

消息投递失败处理

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

小结

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

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
7月前
|
存储 关系型数据库 MySQL
数据同步大事务同步延迟
数据同步大事务同步延迟
85 6
|
3月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
6天前
|
消息中间件 监控 Java
线程池关闭时未完成的任务如何保证数据的一致性?
保证线程池关闭时未完成任务的数据一致性需要综合运用多种方法和机制。通过备份与恢复、事务管理、任务状态记录与恢复、数据同步与协调、错误处理与补偿、监控与预警等手段的结合,以及结合具体业务场景进行分析和制定策略,能够最大程度地确保数据的一致性,保障系统的稳定运行和业务的顺利开展。同时,不断地优化和改进这些方法和机制,也是提高系统性能和可靠性的重要途径。
25 6
|
3月前
|
消息中间件 缓存 NoSQL
15)如何保证缓存和数据库之间的数据一致性
15)如何保证缓存和数据库之间的数据一致性
63 1
|
4月前
|
存储 关系型数据库 MySQL
MySQL主从同步如何保证数据一致性?
MySQL主从同步如何保证数据一致性?
277 0
MySQL主从同步如何保证数据一致性?
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之全量和增量同步数据的一致性、不丢失和不重复读取可以通过什么方式保证
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
消息中间件
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
203 0
|
7月前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
228 0
|
7月前
|
SQL 监控 调度
dts数据一致性保证
dts数据一致性保证
180 3
|
7月前
|
消息中间件 Java 数据库
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
面试题:如何保证三个数据库之间的数据一致性,如服务突然宕机
135 0