精华内容
下载资源
问答
  • 产品一致性检查是指
    千次阅读
    2021-01-17 02:32:48

    但不知道质量一致性检验是什么意思,以及他和型式检验的区别。

    通常,产品生产时在工艺不变,原材料基本一致的情况下,有些质量指标是基本不变的。因此,在产品生产质量控制中,可以对其中有些指标不做监控。型式检验一般是对.

    层次分析法中一致性检验指标ci不可以小于0,cr小于0.1判断矩阵才满足一致性检验,有时候可以等于0,但不能为负。若为负的话,说明数值错了。

    请把原因解释的尽量详细一些,谢谢~~~

    首先要知道,判断矩阵是各层次各因素之间进行两两比较相对重要性而得来的。那么. 但要求判断矩阵具有大体的一致性,所以需要进行一致性检验。这是我的理解~

    带有一致性检查的同步(也可以简称为一致性检查)是 DPM 用来检查和更正受保护数据源及其副本之间的不一致性的过程。作为同步过程的一部分,一致性检查执行逐个.

    甲从50个样品中用自己的方法检验出10个合格品,乙从同样这50个样品中用.

    一致性检验是为了检验各元素重要度之间的协调性,避免出现A比B重要,B比C重要,而C又比A重要这样的矛盾情况出现。1、一致性是指事务的基本特征或特性相同,其.

    判断矩阵通常的是不一致的,但是为了能用它的对应于最大特征根的特征向量作为被比较因素权向量,其不一致程度应在容许的范围内.

    层次分析法是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础. 必须对判断矩阵是否可接受进行鉴别,这就是一致性检验的内涵。

    %以下是一致性检验CI=(t-n)/(n-1); CI=(t-n)/(n-1); RI=[0 0 0.52 0.89 1.12 1.26 。

    一致性检验能不能通过和RI矩阵有关系的,你这个检验要求更严格一些所以通zd过不了。我这有推荐的RI矩阵,你可以用我的这个函数试试,应该没问题。或者你自己更回.

    kappa运行参数是什么数据类型

    在诊断试验中,研究者希望考察不同诊断方法在诊断结果上是否具有一致性,比如:不同医务工作者对同一组病人的诊断结果是否一致、不同的诊断方法对同一个样本或研.

    检验一致性:(1)计算一致性指标C.I.=(最大特征值-n)/n-1 ; (2)找出相应的平均随机一致性指标R.I.; (3)计算一致性比例C.R.=C.I./R.I.;当C.R.

    期待看到有用的回答!

    我印象中好像是要用卡方的同质性还是一致性检验,但是又记得那是a*b列联。

    你的目的是比较两组被试的性别、受教育程度、年龄是否一来致吧,那就用普通的卡方分析就可以了,也自就是比较两组的性别、受教育程度、年龄是否存在差异,如果不.

    我不太清楚为什么要做一致性检验,请大大们解释一下,谢谢。

    意义:一致性检验是为了检验各元素重要度之间的协调性,避免出现A比B重要,B比C重要,而C又比A重要,这样的矛盾情况出现。在确定各层次各因素之间的权重时,.

    有多项检测检验点合格率最小的,如有3项检验点合格率分别为90%,80%,70%,其:逐项检验点合格率即满足大于70%的条件,且不合格点不集中。如有1项合格率小于70.

    确实是应该使用Kappa一致性检验评价结果的一致性。任何版本的SPSS都可以做Kappa一致性检验(被包含在卡方检验程序中),步骤跟做卡方检验基本相同,只需在卡.

    AHP模型有四层的时候,怎样进行总排序一致性检验?谢谢各位大虾

    无论多少层,都是从上到下,一层一层进行层次总排序和检验。您可以登录www.ahptool.net查看关于AHP的说明。

    认为判断矩阵中的不一致是由强矛盾判百断、弱矛盾判断、标度离散性、标度有限性共同作用的结果度.论文关于判断矩阵不一致性原因的分析及对一致性调整的解知决方案.

    请问一下矩阵一致性检验具体的计算步骤方法是什么?题目如图 对于计算步骤。

    如果是用spssau分析的话,结果会直接得到一致性检验的结果。具体可以查看spssau帮助手册:层次分析法-SPSSAU

    可以换一种标度方法,不一定要用1-9,可以用e的0/5次方到e的8/5次方标度方法。这个标度方法的一致性检验容易通过。可以下载yaahp自动计算。

    一致性检验是为了检验各元素重要度之间的协调性,避免出现A比B重要,B比C重要,而C又比A重要这样的矛盾情况出现

    更多相关内容
  • 一致性检查(consistency check)

    千次阅读 2019-04-08 21:47:12
    最近看论文看到深度传播方面的知识,随后想起之前做过视差一致性检查方面的工作,所以就小结一下,一致性检查方面的知识。 彩色一致性检查 原理:彩色一致性是对于一幅图片,如果空间相邻区域像素亮度值相似的话...

    最近看论文看到深度传播方面的知识,随后想起之前做过视差一致性检查方面的工作,所以就小结一下,一致性检查方面的知识。

    彩色一致性检查

    • 原理:彩色一致性是指对于一幅图片,如果空间相邻区域像素亮度值相似的话,它们的颜色也是类似的。随后建立约束模型,约束为当前像素的颜色与邻域像素的颜色的误差

    深度一致性检查 —— 深度传播

    • 原理:如果一幅图片的空间相邻区域亮度值类似的话,那么它的深度值也是类似的。根据这一原理,将深度估计问题进行优化建模,通过求解这个优化问题来获得整个图像的深度图,这就是基于深度一致性的深度传播算法的基本原理。
    • 优化模型:计算下面的代价函数:
      min ⁡ D J ( D n o n − k e y ) = ∑ r ( D n o n − k e y ( r ) − ∑ s ∈ N ( r ) w r s D n o n − k e y ( s ) ) 2 s u b . t o D n o n − k e y ( r i ) = D k e y ( r i ′ ) \begin{array}{c}{\min _{D} J\left(D^{n o n-k e y}\right)=\sum_{r}\left(D^{n o n-k e y}(r)-\sum_{s \in N(r)} w_{r s} D^{n o n-k e y}(s)\right)^{2}} \\ {\quad s u b . t o D^{n o n-k e y}\left(r_{i}\right)=D^{k e y}\left(r_{i}^{\prime}\right)}\end{array} minDJ(Dnonkey)=r(Dnonkey(r)sN(r)wrsDnonkey(s))2sub.toDnonkey(ri)=Dkey(ri)
    • N ( r ) N(r) N(r)是像素 r r r的一个邻域窗口, w r s w_{rs} wrs是邻域窗口的加权函数。
    • 上面公式中, D n o n − k e y ( r i ) = D k e y ( r i ′ ) D^{non-key}(r_i) = D^{key}(r_i^\prime) Dnonkey(ri)=Dkey(ri)是代表通过特征点匹配,将关键帧的深度值赋予给非关键帧中对应的像素点。
    • 代价函数计算的是非关键帧中当前元素深度和邻域元素深度的关系。
      深度传播框架
    展开全文
  • Flink状态一致性检查

    千次阅读 2022-03-04 21:04:12
    Flink状态一致性检查一致性检查点:是在某一个时刻所有算子将同一个任务都完成的情况下进行的一个快照(方便后续计算出错时,提供一个数据恢复的快照)

    Flink状态一致性检查点


    一致性检查点:是指在某一个时刻所有算子将同一个任务都完成的情况下进行的一个快照(方便后续计算出错时,提供一个数据恢复的快照)。Flink有状态的流处理,内部每个算子任务都可以有自己的状态,对于流处理器内部来说,所谓的状态一致性,其实就是我们所说的计算结果要保证准确。


    1、Spark & Flink 的CheckPoint

    Spark 的CheckPoint也容错机制,对RDD的状态进行保存切断血缘关系,而Spark在map->reduce过程中宽窄依赖划分出的stage会又临时中间结果,所以我们可以拿此中间结果进行CP,这样就实现了Spark的容错机制,即便后面计算出现错误也可以通过CP重新计算。
    Flink的CheckPoint也是容错机制(是状态一致性检查点),因为Flink的算子大部分都是有状态的,所以在某个时刻所有算子都完成了同一个任务时,进行一个快照,此时则是一个CheckPoint,其中涉及到了一个barrier(栅栏)的概念来实现快照时数据的混乱以及系统的暂停。

    一个完整的快照包含=Source状态+算子状态+Sink事务/两次提交机制


    2、单数据源快照流程

    流程:
    — 图1:首先由图看出数据源此时状态是数据4,此时由JobManager发送栅栏到数据中,随数据流动(特殊的一条数据),当栅栏到达source时则保存source的状态到存储系统中(HDFS、DB等)。
    — 图2:栅栏经过Source之后准备进入SUM_even和SUM_odd两个算子,此处栅栏到达到算子,则对算子保存当前状态到存储器中。
    — 图3:算子状态保存完毕,栅栏则返回给JobManager,此时JobManager形成映射图,并保存CheckPoint ID (栅栏ID)
    Sink对外输出数据,也需要控制其发送的情况,保证状态一致性,其中包含两个策略:① 事务输入 ② 两次提交策略

    在这里插入图片描述


    3、并行数据源快照 流程

    由图可知两个数据源并行发送数据
    流程:
    – 图一 、也是JM发送我们的栅栏,当栅栏到达我们的Source时,对状态进行保存,也就是状态4,3.
    – 图二、我们的栅栏跟随数据流向算子,算子SUM_even需要接收到Source1的栅栏和Source2的栅栏都接受到后,才能对自己本身状态进行一个保存,如图二,算子状态分别为8,8。
    – 图三、表现得是一种特殊情况,就是当我们的Source1的栅栏已经到达算子,但我们的Source2的栅栏处理慢,此时Source1发出数据5,导致数据5到Source2的栅栏前面,一旦算子5处理后在进行保存状态,会导致算子的状态不一致,故此会将数据5放入缓存区中,等我们的算子接收到Source2的栅栏保存完状态后在进行处理数据。(算子与算子之间保存状态不需要等待,在多个数据源的情况下,算子需要等待每个数据源的快照到达,才能对状态保存)

    在这里插入图片描述


    展开全文
  • Redis 与 MySQL 数据一致性问题

    万次阅读 2022-06-24 14:40:06
    Redis 与 MySQL 数据一致性问题

    Redis 拥有高性能的数据读写功能,被我们广泛用在缓存场景,一是能提高业务系统的性能,二是为数据库抵挡了高并发的流量请求。

    把 Redis 作为缓存组件,需要防止出现以下问题,否则可能会造成生产事故。

    • Redis 缓存满了

    • 缓存穿透、缓存击穿、缓存雪崩

    • Redis 数据过期了

    • Redis 突然变慢了

    • Redis 与 MySQL 数据一致性问题

    在本文正式开始之前,需要大家先取得以下两点共识: 

    • 缓存必须要有过期时间;

    • 保证数据库跟缓存的最终一致性即可,不必追求强一致性

    1. 什么是数据库与缓存一致性? 

    数据一致性指的是:

    • 缓存中存有数据,缓存的数据值 = 数据库中的值;

    • 缓存中没有该数据,数据库中的值 = 最新值。

    反推缓存与数据库不一致:

    • 缓存的数据值 ≠ 数据库中的值;

    • 缓存或者数据库存在旧的数据,导致线程读取到旧数据。

    为何会出现数据一致性问题呢?

    把 Redis 作为缓存的时候,当数据发生改变我们需要双写来保证缓存与数据库的数据一致性。

    数据库跟缓存毕竟是两套系统,如果要保证强一致性,势必要引入 2PC 或 Paxos 等分布式一致性协议,或者分布式锁等等。这个在实现上是有难度的,而且一定会对性能有影响。

    如果真的对数据的一致性要求这么高,那引入缓存是否真的有必要呢?

    2. 缓存的使用策略

    在使用缓存时,通常有以下几种缓存使用策略用于提升系统性能:

    • Cache-Aside 模式(旁路缓存,业务系统常用)

    • Read-Through 模式(直读)

    • Write-Through 模式(同步直写)

    • Write-Behind 模式

    2.1 Cache-Aside (旁路缓存)

    所谓「旁路缓存」,就是读取缓存、读取数据库和更新缓存的操作都在应用系统来完成,业务系统最常用的缓存策略。

    2.1.1 读取数据

    读取数据逻辑如下:

    1. 当应用程序需要从数据库读取数据时,先检查缓存数据是否命中;

    2. 如果缓存未命中,则查询数据库获取数据。同时将数据写到缓存中,以便后续读取相同数据会命中缓存。最后再把数据返回给调用者;

    3. 如果缓存命中,直接返回。

    时序图如下:

     

     

    优点

    • 缓存中仅包含应用程序实际请求的数据,有助于保持缓存大小的成本效益;

    • 实现简单,并且能获得性能提升。

    实现的伪代码如下:

    
    String cacheKey = "码哥字节";
    String cacheValue = redisCache.get(cacheKey);
    //缓存命中
    if (cacheValue != null) {
      return cacheValue;
    } else {
      //缓存缺失, 从数据库获取数据
      cacheValue = getDataFromDB();
      // 将数据写到缓存中
      redisCache.put(cacheValue)
    }

    缺点

    由于数据仅在缓存未命中后才加载到缓存中,因此初次调用的数据请求响应时间会增加一些开销,因为需要额外的缓存填充和数据库查询耗时。

     2.1.2 更新数据

    使用 cache-aside 模式写数据时,如下流程。

    1. 写数据到数据库;

    2. 将缓存中的数据失效或者更新缓存数据。

    使用 cache-aside 时,最常见的写入策略是直接将数据写入数据库,但是缓存可能会与数据库不一致。

    我们应该给缓存设置一个过期时间,这个是保证最终一致性的解决方案。

    如果过期时间太短,应用程序会不断地从数据库中查询数据。同样,如果过期时间过长,并且更新时没有使缓存失效,缓存的数据很可能是脏数据。

    最常用的方式是删除缓存使缓存数据失效。

    为啥不是更新缓存呢?

    性能问题

    当缓存的更新成本很高需要访问多张表联合计算时,建议直接删除缓存,而不是更新缓存数据来保证一致性。

    安全问题

    在高并发场景下,可能会造成查询查到的数据是旧值,具体原因稍后分析。

    2.2 Read-Through 模式(直读)

    当缓存未命中,也是从数据库加载数据,同时写到缓存中并返回给应用系统。

    虽然 read-through 和 cache-aside 非常相似,在 cache-aside 中应用系统负责从数据库获取数据和填充缓存。

    而 Read-Through 将获取数据存储中的值的责任转移到了缓存提供者身上。

    Read-Through 实现了关注点分离原则。代码只与缓存交互,由缓存组件来管理自身与数据库之间的数据同步。

    2.3 Write-Through 模式(同步直写) 

    与 Read-Through 类似,发生写请求时,Write-Through 将写入责任转移到缓存系统,由缓存抽象层来完成缓存数据和数据库数据的更新,时序流程图如下:

    Write-Through 的主要好处是应用系统的不需要考虑故障处理和重试逻辑,交给缓存抽象层来管理实现。

    优缺点

    单独直接使用该策略是没啥意义的,因为该策略要先写缓存,再写数据库,对写入操作带来了额外延迟。

    当 Write-Through 与 Read-Through 配合使用,就能充分发挥 Read-Through 的优势,同时还能保证数据一致性,不需要考虑如何将缓存设置失效。

    这个策略颠倒了 Cache-Aside 填充缓存的顺序,并不是在缓存未命中后延迟加载到缓存,而是在数据先写缓存,接着由缓存组件将数据写到数据库。

    优点

    • 缓存与数据库数据总是最新的;

    • 查询性能最佳,因为要查询的数据有可能已经被写到缓存中了。

    缺点

    不经常请求的数据也会写入缓存,从而导致缓存更大、成本更高。

    2.4 Write-Behind 模式

    这个图一眼看去似乎与 Write-Through 一样,其实不是。区别在于最后一个箭头的箭头:它从实心变为线。

    这意味着缓存系统将异步更新数据库数据,应用系统只与缓存系统交互。

    应用程序不必等待数据库更新完成,从而提高应用程序性能,因为对数据库的更新是最慢的操作。

    这种策略下,缓存与数据库的一致性不强,对一致性高的系统不建议使用。

    3. 旁路缓存下的一致性问题分析

    业务场景用的最多的就是 Cache-Aside (旁路缓存) 策略,在该策略下,客户端对数据的读取流程是先读取缓存,如果命中则返回;未命中,则从数据库读取并把数据写到缓存中,所以读操作不会导致缓存与数据库的不一致。

    重点是写操作,数据库和缓存都需要修改,而两者就会存在一个先后顺序,可能会导致数据不再一致。针对写,我们需要考虑两个问题:

    • 先更新缓存还是更新数据库?

    • 当数据发生变化时,选择修改缓存(update),还是删除缓存(delete)?

    将这两个问题排列组合,会出现四种方案:

    • 先更新缓存,再更新数据库;

    • 先更新数据库,再更新缓存;

    • 先删除缓存,再更新数据库;

    • 先更新数据库,再删除缓存。

    接下来的分析大家不必死记硬背,关键在于在推演的过程中大家只需要考虑以下两个场景会不会带来严重问题即可:

    • 其中第一个操作成功,第二个失败会导致什么问题?

    • 在高并发情况下会不会造成读取数据不一致?

    为啥不考虑第一个失败,第二个成功的情况呀?

    既然第一个都失败了,第二个就不用执行了,直接在第一步返回 50x 等异常信息即可,不会出现不一致问题。

    只有第一个成功,第二个失败才让人头痛,想要保证他们的原子性,就涉及到分布式事务的范畴了。

    3.1 先更新缓存,再更新数据库

     

    如果先更新缓存成功,写数据库失败,就会导致缓存是最新数据,数据库是旧数据,那缓存就是脏数据了。

    之后,其他查询立马请求进来的时候就会获取这个数据,而这个数据数据库中却不存在。

    数据库都不存在的数据,缓存并返回客户端就毫无意义了。

    该方案直接 Pass。

    3.2 先更新数据库,再更新缓存

    一切正常的情况如下:

    1. 先写数据库,成功;

    2. 再 update 缓存,成功。

    更新缓存失败

    这时候我们来推断下,假如这两个操作的原子性被破坏:第一步成功,第二步失败会导致什么问题?

    会导致数据库是最新数据,缓存是旧数据,出现一致性问题。

    该图与上一个图类似,把 Redis 和 MySQL 的位置对调即可。

    高并发场景

    谢霸歌经常 996,腰酸脖子疼,bug 越写越多,想去按摩推拿放提升下编程技巧。

    疫情影响,单子来之不易,高端会所的技师都争先恐后想接这一单,高并发啊兄弟们。

    在进店以后,前台会将顾客信息录入系统,执行 set xx的服务技师 = 待定的初始值表示目前无人接待保存到数据库和缓存中,之后再安排技师按摩服务。

    如下图所示:

    1. 98 号技师先下手为强,向系统发送 set 谢霸歌的服务技师 = 98 的指令写入数据库,这时候系统的网络出现波动,卡顿了,数据还没来得及写到缓存;

    2. 接下来,520 号技师也向系统发送 set 谢霸哥的服务技师 = 520写到数据库中,并且也把这个数据写到缓存中了;

    3. 这时候之前的 98 号技师的写缓存请求开始执行,顺利将数据 set 谢霸歌的服务技师 = 98 写到缓存中。

    最后发现,数据库的值 = set 谢霸哥的服务技师 = 520,而缓存的值= set 谢霸歌的服务技师 = 98。

    520 号技师在缓存中的最新数据被 98 号技师的旧数据覆盖了。

    所以,在高并发的场景中,多线程同时写数据再写缓存,就会出现缓存是旧值,数据库是最新值的不一致情况。

    该方案直接 pass。

    如果第一步就失败,直接返回 50x 异常,并不会出现数据不一致。

    3.3 先删缓存,再更新数据库

    按照「码哥」前面说的套路,假设第一个操作成功,第二个操作失败推断下会发生什么?高并发场景下又会发生什么?

    第二步写数据库失败

    假设现在有两个请求:写请求 A,读请求 B。

    写请求 A 第一步先删除缓存成功,写数据到数据库失败,就会导致该次写数据丢失,数据库保存的是旧值。

    接着另一个读请 B 求进来,发现缓存不存在,从数据库读取旧数据并写到缓存中。

    高并发下的问题

    1. 还是 98 号技师先下手为强,系统接收请求把缓存数据删除,当系统准备将 set 肖菜鸡的服务技师 = 98写到数据库的时候发生卡顿,来不及写入;

    2. 这时候,大堂经理向系统执行读请求,查下肖菜鸡有没有技师接待,方便安排技师服务,系统发现缓存中没数据,于是乎就从数据库读取到旧数据 set 肖菜鸡的服务技师 = 待定,并写到缓存中;

    3. 这时候,原先卡顿的 98 号技师写数据 set 肖菜鸡的服务技师 = 98到数据库的操作完成。

    这样子会出现缓存的是旧数据,在缓存过期之前无法读取到最数据。肖菜鸡本就被 98 号技师接单了,但是大堂经理却以为没人接待。

    该方案 pass,因为第一步成功,第二步失败,会造成数据库是旧数据,缓存中没数据继续从数据库读取旧值写入缓存,造成数据不一致,还会多一次 cahche。

    不论是异常情况还是高并发场景,会导致数据不一致。miss。

     3.4 先更新数据库,再删缓存

    经过前面的三个方案,全都被 pass 了,分析下最后的方案到底行不行。

    按照「套路」,分别判断异常和高并发会造成什么问题。

    该策略可以知道,在写数据库阶段失败的话就直返返回客户端异常,不需要执行缓存操作了。

    所以第一步失败不会出现数据不一致的情况。

    删缓存失败

    重点在于第一步写最新数据到数据库成功,删除缓存失败怎么办?

    可以把这两个操作放在一个事务中,当缓存删除失败,那就把写数据库回滚。

    高并发场景下不合适,容易出现大事务,造成死锁问题。

    如果不回滚,那就出现数据库是新数据,缓存还是旧数据,数据不一致了,咋办?

    所以,我们要想办法让缓存删除成功,不然只能等到有效期失效那可不行。

    使用重试机制。

    比如重试三次,三次都失败则记录日志到数据库,使用分布式调度组件 xxl-job 等实现后续的处理。

    在高并发的场景下,重试最好使用异步方式,比如发送消息到 mq 中间件,实现异步解耦。

    亦或是利用 Canal 框架订阅 MySQL binlog 日志,监听对应的更新请求,执行删除对应缓存操作。

    高并发场景

    再来分析下高并发读写会有什么问题。

     

    1. 98 号技师先下手为强,接下肖菜鸡的这笔生意,数据库执行 set 肖菜鸡的服务技师 = 98;还是网络卡顿了下,没来得及执行删除缓存操作;

    2. 主管 Candy 向系统执行读请求,查下肖菜鸡有没有技师接待,发现缓存中有数据 肖菜鸡的服务技师 = 待定,直接返回信息给客户端,主管以为没人接待;

    3. 原先 98 号技师接单,由于卡顿没删除缓存的操作现在执行删除成功;

    4. 读请求可能出现少量读取旧数据的情况,但是很快旧数据就会被删除,之后的请求都能获取最新数据,问题不大。

    还有一种比较极端的情况,缓存自动失效的时候又遇到了高并发读写的情况。假设这会有两个请求,一个线程 A 做查询操作,一个线程 B 做更新操作,那么会有如下情形产生:

    1. 缓存的过期时间到期,缓存失效;

    2. 线程 A 读请求读取缓存,没命中,则查询数据库得到一个旧的值(因为 B 会写新值,相对而言就是旧的值了),准备把数据写到缓存时发送网络问题卡顿了;

    3. 线程 B 执行写操作,将新值写数据库;

    4. 线程 B 执行删除缓存;

    5. 线程 A 继续,从卡顿中醒来,把查询到的旧值写到入缓存。

    这还是出现了不一致的情况啊。

    不要慌,发生这个情况的概率微乎其微,发生上述情况的必要条件是:

    • 步骤 3 写数据库操作要比步骤 2 读操作耗时短速度快,才可能使得步骤 4 先于步骤 5;

    • 缓存刚好到达过期时限。

    通常 MySQL 单机的 QPS 大概 5K 左右,而 TPS 大概 1K 左右,(ps:Tomcat 的 QPS 4K 左右,TPS = 1K 左右)。

    数据库读操作是远快于写操作的(正是因为如此,才做读写分离),所以步骤(3)要比步骤(2)更快这个情景很难出现,同时还要配合缓存刚好失效。

    所以,在用旁路缓存策略的时候,对于写操作推荐使用:先更新数据库,再删除缓存。

     4. 一致性解决方案有哪些?

    最后,针对 Cache-Aside (旁路缓存) 策略,写操作使用先更新数据库,再删除缓存的情况下,我们来分析下数据一致性解决方案都有哪些?

    4.1 缓存延时双删

    如果采用先删除缓存,再更新数据库如何避免出现脏数据?

    采用延时双删策略:

    1. 先删除缓存;

    2. 写数据库;

    3. 休眠 500 毫秒,再删除缓存。

    这样子最多只会出现 500 毫秒的脏数据读取时间。关键是这个休眠时间怎么确定呢?

    延迟时间的目的就是确保读请求结束,写请求可以删除读请求造成的缓存脏数据。

    所以我们需要自行评估项目的读数据业务逻辑的耗时,在读耗时的基础上加几百毫秒作为延迟时间即可。

    4.2 删除缓存重试机制

    缓存删除失败怎么办?比如延迟双删的第二次删除失败,那岂不是无法删除脏数据。

    使用重试机制,保证删除缓存成功。

    比如重试三次,三次都失败则记录日志到数据库并发送警告让人工介入。

    在高并发的场景下,重试最好使用异步方式,比如发送消息到 mq 中间件,实现异步解耦。

    第 5 步如果删除失败且未达到重试最大次数则将消息重新入队,直到删除成功,否则就记录到数据库,人工介入。

    该方案有个缺点,就是对业务代码中造成侵入,于是就有了下一个方案。启动一个专门订阅 数据库 binlog 的服务读取需要删除的数据进行缓存删除操作。

     4.3 读取 binlog 异步删除

     

    1. 更新数据库;

    2. 数据库会把操作信息记录在 binlog 日志中;

    3. 使用 canal 订阅 binlog 日志获取目标数据和 key;

    4. 缓存删除系统获取 canal 的数据,解析目标 key,尝试删除缓存。

    5. 如果删除失败则将消息发送到消息队列;

    6. 缓存删除系统重新从消息队列获取数据,再次执行删除操作。

    总结

    缓存策略的最佳实践是 Cache Aside 模式。分别分为读缓存最佳实践和写缓存最佳实践。

    读缓存最佳实践

    先读缓存,命中则返回;

    • 未命中则查询数据库,再写到缓存中。

    写缓存最佳实践

    • 先写数据库,再操作缓存;

    • 直接删除缓存,而不是修改。

    当缓存的更新成本很高需要访问多张表联合计算时,建议直接删除缓存,而不是更新。另外,删除缓存操作简单,副作用只是增加了一次 chache miss,建议大家使用该策略。

    在以上最佳实践下,为了尽可能保证缓存与数据库的一致性,我们可以采用延迟双删。

    防止删除失败,我们采用异步重试机制保证能正确删除。异步机制我们可以发送删除消息到 MQ 消息中间件,或者利用 Canal 订阅 MySQL binlog 日志监听写请求删除对应缓存。

    那么,如果我非要保证绝对一致性怎么办?

    先给出结论:

    没有办法做到绝对的一致性,这是由 CAP 理论决定的。缓存系统适用的场景就是非强一致性的场景,所以它属于 CAP 中的 AP。

    所以,我们得委曲求全,可以去做到 BASE 理论中说的最终一致性。

    其实一旦在方案中使用了缓存,那往往也就意味着我们放弃了数据的强一致性,但这也意味着我们的系统在性能上能够得到一些提升。

    所谓 tradeoff 正是如此。

    展开全文
  • 临床上的一致性检验的在诊断试验中,研究者希望考察不同的研究方法在诊断结果上是否具有一致性。分为两种情况:一是评价待评价的诊断试验方法与金标准的一致性;二是评价两种化验方法对同一样本的化验结果的一致性...
  • 分布式数据库的数据一致性管理是其最重要的内核技术之一,也是保证分布式数据库满足数据库最基本的ACID特性中的 “一致性”(Consistency)的保障。在分布式技术发展下,数据一致性的解决方法和技术也在不断的演进,...
  • 数据一致性解决方案

    千次阅读 2022-03-12 21:21:17
    数据一致性解决方案 CAP理论 C:一致性、A:可用性、P:分区容错性 CAP只能满足两个 CA:两阶段提交的严格选举协议 CP弱A:RAFT协议等多数派选举协议 AP:GOSSIP等冲突解决协议 数据一致性 时间一致性:所有相关数据...
  • 分布式系统的一致性问题(汇总)

    万次阅读 多人点赞 2019-09-02 15:32:19
    保证分布式系统数据一致性的6种方案 问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要...
  • 微服务系统中的数据一致性,你都会了吗

    万次阅读 多人点赞 2021-09-17 23:11:34
    你好,我是看山。 从单体架构到分布式架构,从巨石架构到微服务...需要注意一下,本文所设计的数据一致性,不是多数据副本之间保持数据一致性,而是系统之间的业务数据保持一致性。 本地事务 在早期的系统中,我们可.
  • 数据库怎么保证(分布式)事务一致性

    万次阅读 多人点赞 2019-03-15 10:15:43
    浅谈事务与一致性问题 原文地址 https://www.jianshu.com/p/f0a1b00a6002 在高并发场景下,分布式储存和处理已经是常用手段。但分布式的结构势必会带来“不一致”的麻烦问题,而事务正是解决这一问题而引入的一种...
  • 如何保证微服务下的数据一致性?

    万次阅读 2020-09-15 10:50:35
    3、实现微服务下数据一致性的方式 3.1 可靠事件通知模式 3.1.1 同步事件 3.1.2 异步事件 3.1.2.1 本地事件服务 3.1.2.2 外部事件服务 3.1.2.3 可靠事件通知模式的注意事项 3.2 最大努力通知模式 3.3 业务补偿模式 ...
  • ElasticSearch教程——数据一致性

    千次阅读 2018-09-28 16:53:51
    在分布式环境下,一致性指的是多个数据副本是否能保持一致的特性。 在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态。 对系统的一个数据更新成功之后,如果所有用户都能够读取...
  • 在传统的IT时代,一致性通常一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的...
  • 在系统服务化的过程中,我们不得不面临的一个问题是多个子系统间业务数据的一致性如何保证,解决这个问题有多种方式。XA可能很多人首先会想到XA规范中定义的分布式事务,下图是XA规范中定义的DTP(Distributed ...
  • 数据分布方式:哈希与一致性哈希

    万次阅读 2021-12-26 14:22:14
    数据分布方式:哈希与一致性哈希前言数据分布设计原则数据分布方法哈希一致性哈希带有限负载的一致性哈希带虚拟节点的一致性哈希四种数据分布方法对比知识扩展:数据分片和数据分区,有何区别?总结 前言 分布式...
  • 数据库一致性、完整性

    万次阅读 2016-11-20 13:09:44
    来源: http://www.zybang.com/question/e23cf724ee5a0d00d2cba4f9ccb2d23b.html ... ...数据完整(data integrity)是 ... 数据的精确(accuracy) 和可靠(reliability)。它是应防
  • Elasticsearch集群中保持数据一致性的过程中,涉及到内部之间的通讯,先简单介绍一下es中各模块的作用和功能 1)cluster cluster模块是主节点执行集群管理和封装的实现,管理集群状态,维护集群层面的配置信息。...
  • 为了保证数据的一致性,HDFS采用了数据校验和(checkSum)机制。创建文件时,HDFS会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验数据和一同传输,应用收到数据后可以...
  • ZooKeeper数据一致性

    千次阅读 2017-11-30 10:42:04
    ZooKeeper为存储的数据提供了一致性保证,不管应用从哪个服务端获取数据,都能获取到一致的数据。ZooKeeper内部使用原子广播协议(Zab)作为其一致性复制的核心,并通过对服务端请求的排序达到数据一致性的保障要求...
  • 但事实上,ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeperAtomic Broadcast (ZAB, ZooKeeper 原子消息广播协议)的协议作为其数据一致性的核心算法。 ZAB协议是为分布式协调服务ZooKeeper专门设计的一...
  • mq实现分布式事务-补偿事务一致性CAP原则Rocket mq实现思路Rabbit mq实现思路需要考虑的问题后记 严格的来说,消息中间件并不能实现分布式事务,而是通过事后补偿机制,达到和分布式事务一样的数据一致性。这里主要...
  • 何谓端到端的数据校验?是应用层在写入数据时,在经过每个数据模块时,都计算并增加一个校验和信息,并将这些校验和信息和...同样在数据读取时,应用层在获取数据块和从磁盘读取到校验信息后,也需要再次校验一致性
  • Raft 一致性算法论文

    万次阅读 2019-05-17 09:52:13
    本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为《In search of an Understandable Consensus Algorithm (Extended Version)》(寻找一种易于理解的一致性算法)。 Raft 是一种用来管理日志复制的一致性...
  • 如果更新支付表成功,远程调用添加选课成功(选课数据库commit成功),最后更新支付表commit失败,此时出现操作不一致。 上边的问题涉及到分布式事务控制。 1、什么是分布式系统? 部署在不同结点上的系统通过网络...
  • 一致性检查的具体含义是什么

    千次阅读 2006-07-07 09:27:00
    一致性检查的具体含义是什么? 环境 产品:Lotus Domino Server平台:无关软件版本:所有
  • 一致性定义:逻辑层面,一致性(consistency)是一個形式系統中不蕴含矛盾(wiki)。在计算机系统的范畴之内,一致性其实是一种人们对于系统的综合需求,人们往往需要计算机的运行结果或状态是确定的、正确的且与...
  • 细说分布式下的数据一致性

    万次阅读 2018-08-29 11:21:47
    细说分布式下的数据一致性 名词解释 强一致性 最终一致性 XA事物 JDBC事物、JTA事物 TCC 产生场景 单一数据库、单一系统无法支撑业务和数据的增长而出现拆分化的演进,数据存储于不同的事物管理单元但又要...
  • 多处理机Cache一致性问题及解决办法

    万次阅读 2016-07-17 15:25:30
    由于多数SMP(对称多处理机)结构是采用总线互连的,侦听一致性协议是基于侦听总线事务来保持Cache一致性的协议,所以多数产品采用侦听协议。基于总线互连的SMP是通过高速共享总线将若干个商用的微处理器
  • 一致性算法分析

    万次阅读 2018-01-18 14:25:47
    目的 :一致性算法的出现是为了解决一致性问题,一致性问题是对于一组服务器(集群),给定一组操作,需要使用一种协议使得它们的结果最终达成一致,看起来好像是一台服务器一样。 作用 :一致性算法在构建可信赖...
  • Flink学习之容错机制和状态一致性

    千次阅读 2022-03-08 08:45:05
    ☀️在前天的学习中,我们学习了flink中的几个重要概念:时间、水位线和状态,今天我们继续学习flink中的两个重要机制:容错机制和状态一致性保证。对往期内容感兴趣的同学可以参考: 链接: Flink学习中之time、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 265,707
精华内容 106,282
热门标签
关键字:

产品一致性检查是指