如何解决系统的一致性问题

「数据接入篇」数据同步策略和实施总结 大数据数仓开发不能不了解数据接入,本篇就来系统地讲解下业界对数据接入的实践总结分享 阅读详情

1.背景

当前后端开发的工作,时常会遇到一些数据同步的类型工作。这些工作看似简单,无非是数据接受方提供一个数据写入接口,数据发送方通过接口调用实现数据同步。当然大部分场景同步的数据需要进行清理及加工工作,所以一般会有一个专门的数据同步服务负责处理数据的清理,加工,上报。简易的流程图如下。
在这里插入图片描述

方案一:数据对账

对账是解决数据一致性对比的一个比较完善的方案。为什么这么说呢?因为它比较的是最终落库的数据是否一致。如果你想要通过对账的方式来保证数据一致性的话,需要做以下的这些工作。这方案不仅仅怀疑同步失败的时数据时不一致的,也怀疑同步成功时数据是不一致的。

  1. 需要一张表记录同步的记录,这个记录包括同步成功的和同步失败的,可以只记录关键信息,比如说同步会员信息的话,可以只记录会员id。
  2. 需要一个定时任务,执行时间需要避开数据变更的高峰时间,定时任务的执行评率可以根据需要对账的数据量的多少决定。
  3. 数据的发送方和数据接受方需要提供数据查询接口。因为在数据对账的过程中需要分别查询出发送方和接受方的数据进行对比。如果数据相同,表明数据是一致的,可以删除同步记录表中的这条数据。如果不相同,则需要重新进行一次同步动作,如果这次同步成功则删除同步记录表中的这条数据。不成功的话先不删除,下次定时任务执行时,可以重新拉取执行。

方案二:失败重试

与数据对账不一样,失败重试面向的同步失败的记录。这个思想认为如果数据接受方反馈数据接受成功,那么两方的数据就是一致的。数据接受方既然返回了成功的反馈,那么数据接受方就应该自己去保证数据一定会落盘。综上所述,如果数据接受反馈失败,或者调用数据接收方接口报错时,可以认为数据是不一致的,对于这种情况需要不断重试直至成功。
失败重试需要在下面的几个纬度进行衡量:

  • 是立即重试,还是过一段时间进行重试
  • 是否是无限制的重试,还是需要设置一个重试的次数
  • 重试时是重放失败时的请求,还是已回源数据的方式进行重试
  • 失败的场景有哪些:网络异常,服务端异常(业务异常,运行时异常),请求超时
  • 接受方的接口是否具有幂等性

有一问题是需要思考的?什么样的异常重试是有效的?

  • 短时的网络波动,短时间多次重试可以解决
  • 长时间的网络中断,间隔一段时间多次重试可以解决
  • 服务端异常,重试依然可能会异常,需要接收方核实异常原因
  • 请求超时场景,重试可能会成功,如果多次重试还是不行,需要找接收方核实原因,进行接口优化或者接口调用方调大超时间

重试失败时的数据,会产生ABA问题,因为重试时的数据有可能已经是旧数据了。这个时候应该回源DB中的数据进行重试。这个方案无论是消息发送端还是消息消费端都是可行的。
至于重试是手动的好,还是自动的好。手动的方式,不能及时的解决问题,如果可以做成自动的方式是最好的。自动的方式,需要考虑定时任务的执行时间间隔,以及最好限定下每次最多可以处理的消息数量。避免失败消息过多时对下游产生多大的压力。可以控制对下游的压力的情况下,重试任务的时间间隔可以设置的短一点。

具体方案

步骤一:调用数据同步接口时如果失败,立即重试,重试次数不需要太多,3次即可。可以使用spring-retry组件。需要考虑重试时,消息已经是旧消息了。
步骤二:如果步骤一重试成功可以不需要走下面的步骤。如果不成功,可以将失败请求保存进入到失败队列,如果数据量不大的话,失败队列可以使用redis实现。
步骤三:启动一个定时任务,每个小时执行一次即可,每次执行时它会从失败队列中取一定数量失败消息,重新上报。
步骤四:怎么保证重试上报的消息不是旧消息。回源数据的方式依然存在一定概率的以旧数据覆盖新数据问题,也是需要时序控制器来保证顺序性的。所以这里我建议还是使用请求重放的方式,可以减少回源的次数。
步骤五:时序控制器怎么实现呢?
使用redis实现,key值是“业务前缀 + 关键字”, value值是执行同步动作的“时间戳”。如果说会员信息新增场景:key:”USER_INFO_ADD:userId“, value: String timestamp = String.valueOf(System.currentTimeMillis());
重试时,使用请求带的时间戳T与redis中的时间戳t进行比较,如果比t大,则可以重试,重试成功将T写入redis中,失败的话可以继续重试或者放弃重试;如果比t小,则放弃重试。

如何设计一个较为通用的重试框架?
需要的特性:

  • 立即多次重试能力,可以参考Spring-retry框架
  • 异步的,间隔较长时间的重试能力
  • 保证重试请求的时序性,提供一个这样的可选项
  • 支持设定最大的重试次数
  • 多次重试失败的任务可以放到死信队列中, 方便用户查询,不再重试的请求
  • 支持手动重试死信队列中的请求

aop 中的 MethodInterceptor 如何使用

基于 MATLAB 的一致性算法解决电力系统分布式经济调度优化问题 近年来,随着能源危机和环境保护意识的增强,电力系统的分布式经济调度优化问题受到了广泛关注。在本文中,我们将介绍一种基于 MATLAB 的一致性算法,该算法可以有效地解决电力系统分布式经济调度优化问题。该算法基于分布式协商技术,通过多个节点之间的信息交换和共识达成,实现电力系统中各个节点之间的合作与协调。综上所述,基于 MATLAB 的一致性算法是一种有效解决电力系统分布式经济调度优化问题的方法。通过该算法,可以实现电力系统中各个节点之间的协作和协商,提高电力系统的经济性和可靠性。 阅读详情

相关推荐

分布式事务的一致性问题与解决方案

1.背景介绍 在分布式系统中,事务的一致性是非常重要的。当多个节点需要协同工作时,如果事务不一致,可能导致数据不一致、数据丢失或重复等问题。因此,分布式事务的一致性问题是分布式系统中的一个重要问题。 1. 背景介绍 分布式事务是指在多个节点上同时执行的事务。在分布式系统中,事务需要在多个节点上执行

AI天才研究院 1077

事务中调用三方接口,如何尽可能的保证两侧系统数据的一致性

因为调用三方接口 与 数据库操作都不是100%成功的操作。如果一方是可以保证 100% 成功的,那么就可以先执行非 100% 成功的操作,确定执行成功后,在执行 100% 成功的操作,进而达到数据的一致性。比如:事务内调用接口,先调用接口,根据接口的返回状态来提交或回滚事务。看起来这样做一定不会出现问题,但极端情况下,commit 与 rollback 是不一定会执行成功的。可以知道,接口影响的三方系统数据是不可进行回滚的,但系统自身但数据是可控的。所以,可以将接口调用这一步放在事务方法的最后一步。

qq_38074398的博客 3327

Ardupilot姿态控制详解(完结篇)

本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。 按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下: APM姿态旋转理论基础 Ardupilot姿态控制器 PID控制流程(整定后的P控制器) 详解APM的开方控制器sqrt_controller Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot四元数姿态控制

moumde的博客 7023

【第三方接口数据一致性】本地保存数据调用第三方接口保证数据一致性

项目场景: 项目场景:本地项目需要保存一份数据同时需要向第三方接口也发送一份数据,并且要保证本地和第三方接口数据一致性。 问题描述 如何保证两个数据一致性呢? 1.先操作接口在操作本地数据库; 2.先操作本地数据库在操作第三方接口; 问题分析: 两种方法其实都能实现,但是想要100%保证还是很困难,只能是最大努力保证两者数据一致性。 方法1:借助RabbitMQ实现,先操作本地数据库然后发送一条消息到MQ中,通过ack机制保证消息准确到达,然后消费者消费消息发送数据到第三方接口 解决方案: 提示:这

qq_37243341的博客 4887

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 456

多智能体强化学习论文——SEAC(NIPS 2020)

存在的问题&研究动机&研究思路 在稀疏奖励的环境下,多智能体的exploration存在效率不足等问题。 在IAC的基础上尝试加入重要性采样,使得每次更新智能体iii的参数时,不再仅仅使用智能体iii的数据,而是使用所有智能体的数据进行智能体iii数据的更新。 对于原始的IAC算法是on-policy的,而SEAC则是off-poligy的。 创新点 在每个智能体iii的actoriactor_iactori​和criticicritic_icritici​的更新过程中,都加入了重要性

我的AI笔记 1206

跨系统数据一致性问题解决方案汇总

hello,大家好,我是张张,「架构精进之路」公号作者。目前随着微服务化建设的普及,存在越来越多的跨系统数据交互情况,跨系统数据一致性问题越发凸显,那如何有效保证跨系统数据的一致性呢?本文旨在总结沉淀工作中问题的解决经验,整理解决跨系统数据不一致问题的经验方法。提到数据一致性,我们很容易想到的就是数据库中的事务操作。事务的原子性和持久性可以确保在一个事务内,操作多条数据,要么都成功,要么都失败。这样在一个系统内部,我们可以很自然地使用数据库事务来保证数据一致性。但是在微服务的今天,一项操作会涉及到跨多个系统

架构精进之路 7909

恒玄BES调试笔记-BES2500如何OTA升级ANC和通透参数

前期量产软件anc参数主要是通过anc工具写入flash中,或者anc total gain通过美格信设备校准写入,对于量产后如果想要更新anc参数,如通透模式参数,则无法更新。 这个时候需要通过OTA升级软件,把相关anc参数内置到软件中,从flash中读取total gain。 1、更新强弱降噪和通透参数,由于涉及到个人参数就不列出来了,主要是改动以下相关参数。 extern struct_anc_cfg * anc_coef_list_50p7k[ANC_COEF_...

leezs的博客 2224

解决分布式系统的一致性问题

1、一致性概念: 指分布式服务系统之间的弱一致性,包括应用系统的一致性和数据的一致性 数据量大,高并发要求高,强计算能力,响应速度要求快,等的互联网要求场景下,服务节点开始池化,开始出现容器应用和数据拆分,分而治之的思想和逻辑 水平拆分和垂直拆分 2、解决一致性问题的模式和思路 (1)酸碱平衡理论 ①ACID(酸) 原子性,一致性,隔离性,持久性。 关系型数据库事务处理保证强一致性通常是通过多版本...

qq_38105384的博客 625

Pixhawk2.4.8接口及引脚定义

pixhawk2.4.8接口定义图解

加斯顿工程师的博客 8744

AutosarMCAL开发——基于TC3x系列时钟系统浅析

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 888

分布式系统的一致性问题解决方案

随着互联网的发展,对于后端服务的架构也需要随之进行改变。从传统的单体架构到服务化架构再到微服务架构,架构在不断的演变,在解决问题的同同时也带来了新的问题。在微服务架构下,服务之间的调用通过网络带宽进行数据的交流,在这个背景下由于网络的不稳定加上微服务间是自行管理自己的数据,所以会出现不一致的问题。本文针对分布式系统下微服务间的不一致性进行分析,并提供解决方案。该内容是阅读《分布式服务架构--原理、设计与实战》的读后总结笔记。

weixin_41998947的博客 1854

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

解决分布式系统的一致性问题,我们需要了解哪些理论?

一致性是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义。在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的特点,互联网时代信息量巨大、需要计算能力巨大,不但对用户响应速度要求快,而且吞吐量指标也要向外扩展(既:水平伸缩)。

kangbin825的专栏 7147

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

分布式系统的一致性问题分析和解决办法

谈到分布式都会讨论CAP问题的解决办法,分布式的CAP原理,CAP即一致性、可用性和分区容错性。 百度百科解释:CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。 在我们的应用中一致性出了问题,或者说之...

730

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java分布式系统开发的核心是**用Java技术栈解决分布式环境下的一致性、可用性、容错性问题**

从底层逻辑到落地应用,非常有深度。Java分布式系统开发的核心是**用Java技术栈解决分布式环境下的一致性、可用性、容错性问题**,并通过具体框架将理论落地到业务场景中。

[Blog][Domain] programb.blog.youkuaiyun.com 1087

分布式系统的一致性与共识算法

参考文献(文章内容几乎全部来自下面的参考文献,强烈建议看看原文)分布式系统的一致性与共识算法-基础理论分布式系统的一致性与共识算法-Paxos 定义:一致性为在分布式系统领域中对于多个服务节点,给定一系列操作,在约定协议的保障下,使得它们对处理结果达成某种程度的协同。 分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会响应慢、被杀死或者重启

qq_45721740的博客 658

分布式系统一致性问题解决实战

分布式系统一致性问题解决实战

asdfgh0077的博客 104

Linux fsck 命令详解:是 Linux 系统中用于检查和修复文件系统的一致性的命令

(File System Consistency Check)是 Linux 系统中用于检查和修复文件系统的一致性的命令。它可以扫描磁盘分区或文件系统,检测文件系统中的错误,并尝试自动修复这些错误。是维护 Linux 系统稳定性的重要工具,定期使用它可以有效地预防和修复文件系统问题,确保系统健康运行。是一个重要的工具,尤其在系统崩溃、非正常关机或硬盘损坏等情况下,用于恢复文件系统的完整性。

yangchuang111213的博客 3307

分布式系统(微服务架构)的一致性和幂等性问题相关概念解析

分布式系统(微服务架构)的一致性和幂等性问题相关概念解析 目录 前言 1. 分布式系统的数据一致性 1.1 分布式存储系统中的一致性问题 1.2 微服务应用的分布式一致性问题 1.3 对于一致性的正确理解 2.分布式一致性模型 3. 追求强一致性的约束——CAP定理 3.1 如何理解CAP三要素不可兼得 3.2 如何正确理解CAP定理 4. 一致性的妥协——最终...

Orbita_wangtao 527

4.1 分布式系统的一致性

所谓一致性,就是指数据要完整、要同步。比如,我们在网上下了个订单,付了款,商城系统会记录下这些数据,之后无论我 们在哪里访问自己的订单,都能看到同样的结果,即便商城系统出了故障,那一般也会返回一个错误提示而不是给我们一个不一样的结果。再比如银行,我们存了一 笔钱进去,无论到哪里,我们查询银行账户的时候金额也不会变。也就是说,在这些系统中,数据的结果总是一致而同步的,即便这些系统的服务器不止...

测试 789
上一篇: es-聚合性能优化
下一篇: es-RestHighLevelClient实践
带着托托写代码
博客等级 码龄10年 113粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值