精华内容
下载资源
问答
  • 一致性检验(kappa一致性分析)
    千次阅读
    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重要这样的矛盾情况出现

    更多相关内容
  • 上一篇:单业务的一致性(CAP中的C【Consistency】)-02CAP介绍 1.使用Seata做强一致性分布式事务 还是我们开头提出的问题:如何保证1.1、1.2、1.3要么同时成功,要么同时失败,本小节,使用alibaba seata作为...

    上一篇:单业务的一致性(CAP中的C【Consistency】)-02CAP介绍

    1.使用Seata做强一致性分布式事务

    在这里插入图片描述
    还是我们开头提出的问题:如何保证1.1、1.2、1.3要么同时成功,要么同时失败,本小节,使用alibaba seata作为分布式事务的解决方案,达到这个目的。

    2.Seata的AT模型介绍

    seata中文官网:http://seata.io/zh-cn/docs/user/quickstart.html
    可以直接官网查看,这里作为搬运工。

    2.1Seata 是什么?

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
    

    此处仅讨论其AT模式,AT模式本质上也是2PC模式。

    2.2使用前提?

    1.基于支持本地 ACID 事务的关系型数据库。
    2.Java 应用,通过 JDBC 访问数据库。
    

    2.3整体机制?

    两阶段提交协议的演变:
    一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
    
    二阶段:
    提交异步化,非常快速地完成。
    回滚通过一阶段的回滚日志进行反向补偿。使用第一阶段的事务日志。undo.log
    

    2.4写隔离

    2.4.1正常提交

    一阶段本地事务提交前,需要确保先拿到全局锁 。拿不到全局锁 ,不能提交本地事务。
    拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
    

    下面的实例特别好:
    两个全局事务 tx1 和 tx2,分别对 A 表的 m 字段进行更新操作,m 的初始值 1000。

    • tx1 先开始,开启本地事务,拿到本地锁,更新操作 m = 1000 - 100 = 900。本地事务提交前,先拿到该记录的全局锁 ,本地提交,释放本地锁。
    • tx2 后开始,开启本地事务,拿到本地锁,更新操作 m = 900 - 100 = 800。本地事务提交前,尝试拿该记录的全局锁 ,tx1全局提交前,该记录的全局锁被 tx1 持有,tx2 需要重试等待全局锁 。
      如下图:
      在这里插入图片描述
    • tx1 二阶段全局提交,释放全局锁 。tx2 拿到 全局锁 提交本地事务。

    2.4.2回滚提交

    在这里插入图片描述

    • 如果 tx1 的二阶段全局回滚,则 tx1 需要重新获取该数据的本地锁,进行反向补偿的更新操作,实现分支的回滚。
    • 此时,如果 tx2 仍在等待该数据的 全局锁,同时持有本地锁,则 tx1 的分支回滚会失败。分支的回滚会一直重试,直到 tx2 的 全局锁 等锁超时,放弃 全局锁 并回滚本地事务释放本地锁,tx1 的分支回滚最终成功。
    • 因为整个过程 全局锁 在 tx1 结束前一直是被 tx1 持有的,所以不会发生 脏写 的问题。

    2.4写隔离?

    在更新的同时进行查询的过程:

    • 在数据库本地事务隔离级别 读已提交(Read Committed) 或以上的基础上,Seata(AT 模式)的默认全局隔离级别是 读未提交(Read Uncommitted) 。
    • 如果应用在特定场景下,必需要求全局的 读已提交 ,目前 Seata 的方式是通过 SELECT FOR UPDATE 语句的代理。
      在这里插入图片描述
    • SELECT FOR UPDATE 语句的执行会申请 全局锁 ,如果 全局锁 被其他事务持有,则释放本地锁(回滚 SELECT FOR UPDATE 语句的本地执行)并重试。这个过程中,查询是被 block 住的,直到 全局锁 拿到,即读取的相关数据是 已提交 的,才返回。
    • 出于总体性能上的考虑,Seata 目前的方案并没有对所有 SELECT 语句都进行代理,仅针对 FOR UPDATE 的 SELECT 语句。

    2.5工作机制实例说明AT模式

    业务表:product

    FieldTypeKey
    idbigint(20)PRI
    namevarchar(100)
    sincevarchar(100)

    AT 分支事务的业务逻辑:

    update product set name = 'GTS' where name = 'TXC';
    

    2.5.1一阶段

    过程:

    1.解析 SQL:得到 SQL 的类型(UPDATE),表(product),条件(where name = ‘TXC’)等相关的信息。
    2.查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。

    select id, name, since from product where name = 'TXC';
    

    得到前镜像:

    idnamesince
    1TXC2014

    3.执行业务 SQL:更新这条记录的 name 为 ‘GTS’。
    4.查询后镜像:根据前镜像的结果,通过主键定位数据。

    select id, name, since from product where id = 1;
    

    5.插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 UNDO_LOG 表中。

    {
    	"branchId": 641789253,
    	"undoItems": [{
    		"afterImage": {
    			"rows": [{
    				"fields": [{
    					"name": "id",
    					"type": 4,
    					"value": 1
    				}, {
    					"name": "name",
    					"type": 12,
    					"value": "GTS"
    				}, {
    					"name": "since",
    					"type": 12,
    					"value": "2014"
    				}]
    			}],
    			"tableName": "product"
    		},
    		"beforeImage": {
    			"rows": [{
    				"fields": [{
    					"name": "id",
    					"type": 4,
    					"value": 1
    				}, {
    					"name": "name",
    					"type": 12,
    					"value": "TXC"
    				}, {
    					"name": "since",
    					"type": 12,
    					"value": "2014"
    				}]
    			}],
    			"tableName": "product"
    		},
    		"sqlType": "UPDATE"
    	}],
    	"xid": "xid:xxx"
    }
    

    6.提交前,向 TC 注册分支:申请 product 表中,主键值等于 1 的记录的 全局锁 。(注册时获得锁,锁后的后才会提交本地事务。)
    7.本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交
    8.将本地事务提交的结果上报给 TC

    2.5.2二阶段-回滚

    1.收到 TC 的分支回滚请求,开启一个本地事务,执行如下操作。
    通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。
    2.数据校验:拿 UNDO LOG 中的后镜与当前数据进行比较,如果有不同,说明数据被当前全局事务之外的动作做了修改。这种情况,需要根据配置策略来做处理,详细的说明在另外的文档中介绍。(可以直接覆盖)
    3.根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:

    update product set name = 'TXC' where id = 1;
    

    4.提交本地事务。并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC

    2.5.3二阶段-提交

    1.收到 TC 的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC
    2.异步任务阶段的分支提交请求将异步和批量地删除相应 UNDO LOG 记录。

    2.5.4回滚日志表

    以 MySQL 为例:

    FieldField
    Fieldbigint
    xidvarchar(100)
    contextvarchar(128)
    rollback_infolongblob
    log_statustinyint
    log_createddatetime
    log_modifieddatetime

    sql:

    -- 注意此处0.7.0+ 增加字段 context
    CREATE TABLE `undo_log` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `branch_id` bigint(20) NOT NULL,
      `xid` varchar(100) NOT NULL,
      `context` varchar(128) NOT NULL,
      `rollback_info` longblob NOT NULL,
      `log_status` int(11) NOT NULL,
      `log_created` datetime NOT NULL,
      `log_modified` datetime NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    2.Seata的TCC 模式

    回顾总览中的描述:一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:

    • 一阶段 prepare 行为
    • 二阶段 commit 或 rollback 行为
      在这里插入图片描述
      根据两阶段行为模式的不同,我们将分支事务划分为 Automatic (Branch) Transaction Mode (自动事务模型)和 Manual (Branch) Transaction Mode(手动事务模型).

    AT 模式(参考链接 TBD)基于 支持本地 ACID 事务 的 关系型数据库:

    • 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。

    • 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。

    • 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。
      相应的,TCC 模式,不依赖于底层数据资源的事务支持:

    • 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。

    • 二阶段 commit 行为:调用 自定义 的 commit 逻辑。

    • 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。
      所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。
      总结一句话:和AT一模一样,只是自己实现。

    3.Saga 模式

    Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
    在这里插入图片描述
    理论基础:Hector & Kenneth 发表论⽂ Sagas (1987)
    适用场景:
    业务流程长、业务流程多
    参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口
    优势:
    一阶段提交本地事务,无锁,高性能
    事件驱动架构,参与者可异步执行,高吞吐
    补偿服务易于实现
    缺点:
    不保证隔离性

    4.官方实例架构

    在这里插入图片描述
    用例
    用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:

    仓储服务:对给定的商品扣除仓储数量。
    订单服务:根据采购需求创建订单。
    帐户服务:从用户帐户中扣除余额。

    5.官方实例架构SEATA 的分布式交易解决方案

    在这里插入图片描述
    我们只需要使用一个 @GlobalTransactional 注解在业务方法上:

    @GlobalTransactional
        public void purchase(String userId, String commodityCode, int orderCount) {
            ......
        }
    

    6.在订单业务的一致性中使用seata的AT保证分布式事务一致性

    1.每个需要用到的微服务(此处三个)创建undo_log
    这里涉及到三个微服务:订单服务、库存服务、积分服务,这三个数据库中分别创建undo_log表。
    2.安装事务协调器TC,seata-server,即seata软件
    3.整合项目

    • 导入依赖
    
    <!-- common pom.xml中添加,其他引用了common微服务的用到的就不需要再次添加了。
            Seata场景启动器 - 解决分布式事务 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
                <version>2.1.0.RELEASE</version>
            </dependency>
    
    • 加压启动seata-server
      在这里插入图片描述

    • 所有想要用到分布式事务的服务使用seata DataSourceProxy代理自己的数据源

    package com.atguigu.gulimall.order.config;
    
    import com.zaxxer.hikari.HikariDataSource;
    import io.seata.rm.datasource.DataSourceProxy;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.util.StringUtils;
    
    import javax.sql.DataSource;
    
    /**
     * @Description SeaTa分布式事务管理的配置bean类,主要是对数据源的配置。
     **/
    @Configuration
    public class MySeataConfig {
    
        @Autowired
        DataSourceProperties dataSourceProperties;
    
    
        /**
         * 这里抄的是源码中的配置数据源的方式。
         * 参考源码书写。主要是为了使用
         * @param dataSourceProperties
         * @return
         */
       @Bean
        public DataSource dataSource(DataSourceProperties dataSourceProperties) {
    
            HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
            if (StringUtils.hasText(dataSourceProperties.getName())) {
                dataSource.setPoolName(dataSourceProperties.getName());
            }
    
            return new DataSourceProxy(dataSource);
        }
    
    
    }
    
    

    特别注意,此处的数据源代理使用的是seata的代理,这样事务就交由seata管理了。:

    import io.seata.rm.datasource.DataSourceProxy;
    
    • 每个微服务均需要导入registry.conf和file.conf
      在这里插入图片描述

    • 在我们的业务方法上添加@GlobalTransactional可解决分布式事务问题。

    	//点击提交订单按钮的时候,问题来了
    	@GlobalTransactionall //seata事务 TM
      	@Transactional //本地事务 RM
        @Override
        public SubmitOrderRespVo submitOrder(OrderSubmitVo orderSubmitVo) {
    
            
                if (checkValidity() ) {//校验合法性,如果一切合法,则开始提交代码
    	                // 1.1把订单保存在订单表中
    	                saveOrder(order);
    	                
    	                // 1.2调用库存服务吧库存减去2
    	                R r = wareFeignService.orderLocKStock(orderSubmitVo);
    	
    					// 1.3调用用积分服务给张三添加800万积分
    	               	R r = pointsFeignService.upPoint(orderSubmitVo);
    	               	return submitOrderRespVo;
    	               	
                   }
                } 
            }
        }
    
    
    1. file.conf 的 service.vgroup_mapping 配置必须和spring.application.name一致在 org.springframework.cloud:spring-cloud-starter-alibaba-seata的org.springframework.cloud.alibaba.seata.GlobalTransactionAutoConfiguration类中,默认会使用 ${spring.application.name}-fescar-service-group作为服务名注册到 Seata Server上,如果和file.conf中的配置不一致,会提示 no available server to connect错误
    2. 也可以通过配置 spring.cloud.alibaba.seata.tx-service-group修改后缀,但是必须和file.conf中的配置保持一致
      在这里插入图片描述

    7总结

    1.前面说了那么多其实就是一个注解的事。
    2.seata的这种方案在一般场景中会使用到,例如金融it行业,但是在电商中不会使用,因为其中均需要获得锁local Lock 或者GlobleLock,性能低下,下篇介绍更为高效的解决方案:柔性事务-可靠消息+最终一致性。
    下一篇地址:订单业务的一致性(CAP中的C【Consistency】)-04使用柔性事务-可靠消息+最终一致性方案

    展开全文
  • 数据一致性解决方案

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

    数据一致性解决方案

    CAP理论

    C:一致性、A:可用性、P:分区容错性
    CAP只能满足两个
    CA:两阶段提交的严格选举协议
    CP弱A:RAFT协议等多数派选举协议
    AP:GOSSIP等冲突解决协议

    数据一致性

    时间一致性:所有相关数据副本任意时刻数据一致
    事务一致性:事务之行前后数据一致
    应用一致性:分布式事务一致

    BASE理论

    基本可用:允许偶尔失败
    软状态:数据状态要求任意时刻一致
    最终一致性:弱一致性

    数据一致性解决方案

    多副本数据一致性:
    一般用于容灾和高可用:副本之间通过同步复制或者异步复制的方式达到数据一致。
    分布式事务数据一致性:
    本地事务是指数据库的单机事务处理,有点是严格的ACID特性,高效、可靠、状态可以只在资源管理器中维护、应用编程模型简单。缺点:不具备分布式事务处理能力,隔离的最小单位受限于资源管理器。
    分布式事务:事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点上。

    强一致性解决方案:

    一次请求对多个数据源的数据进行完整性以及一致性的操作,满足事务的特性,要么全部成功,要么全部失败,保证原子性以及可见性。
    强一致性通过锁定资源的方式,但是会牺牲性能,使用之前需要谨慎评估。

    XA分布式事务

    XA协议:
    是X/OPEN组织提出的分布式事务规范,该规范主要定义了全局事务管理器(TM)和本地资源管理器(RM)之间的接口,本地资源管理器往往由数据库实现。
    主流的数据库产品都提供了XA接口,XA接口是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁。
    之所以需要XA,是因为在分布式系统中从理论上讲,两台机器是无法达到一致性状态的,因此引入了一个单节点进行协调。
    有全局事务管理器管理的机器可以跨多个资源和进程,负责各个本地资源的提交和回滚,全局事务管理器一般使用XA二阶段提交协议与数据库进行交互。

    二阶段提交(2PC)

    在这里插入图片描述

    准备阶段:
    事务协调者向所有事务参与者发送事务内容,询问是否可以提交事务,并等待参与者回复。
    提交阶段:
    如果协调者收到了参与者的失败信息或者超时信息,直接给所有参与者发送回滚信息进行事务回滚;否则发送提交信息。
    2PC方案实现起来比较简单,但是实际项目中使用比较少
    缺陷:

    • 性能问题:所有参与者在事务提交阶段处于同步阻塞状态,容易造成性能问题;
    • 可靠性问题:如果协调者存在单点故障问题,一旦协调者出现故障,参与者一直处于锁定状态;
    • 数据一致性问题:第二阶段如果发生局部网络问题,一部分收到提交消息,一部分没有收到,会导致数据不一致。

    三阶段提交(3PC)

    在这里插入图片描述

    三阶段提交是在二阶段提交的基础上的改进版本,主要是加入了超时机制,同时在协调者和参与者中都引用了超时机制。
    三阶段是将二阶段里面的准备阶段拆分为两个阶段,插入了一个预提交阶段,这样原先二阶段准备之后,参与者发生崩溃或者错误所引起的问题。
    第一阶段:
    事务协调者向所有事务参与者发送事务内容,询问是否可以提交事务(canCommit),并等待参与者回复。参与者收到请求之后,检查是否可以提交,如果认为可以执行事务操作,返回Yes,并进入预备状态(参与者不执行事务操作),否则返回No。
    第二阶段:
    协调者根据第一阶段中参与者的相应情况来决定是否可以进行基于事务的预提交操作:
    任何一个参与者反馈abord,即中断事务,协调者向所有参与者发送abord,abord或者超时都会中断事务。
    第三阶段:
    第二阶段中所有参与者均返回yes,会向所有参与者发送doCommit请求,参与者收到doCommit请求之后会正式执行事务提交,并释放整个事务期间的占用资源,各参与者向协调者返回完成的消息,协调者收到所有参与者的反馈的ack完成的消息后,完成事务的提交。
    注意:
    在进入第三阶段之后,无论是协调者出现问题,还是协调者与参与者的网络出现问题,都会导致参与者无法收到协调者的请求,此时参与者都会在等待超时之后继续执行事务提交(因为异常的情况毕竟是少数)

    弱一致性解决方案

    弱一致性:复制是异步的,最终一致性是弱一致性的特例,保证用户最终能够读取到某操作对系统特定的数据更新。
    弱一致性为了提高系统的吞吐量,允许一定程度上的数据脏读。

    最终一致性解决方案

    强一致性的技术实现成本很高,运行性能低,很难满足真实业务场景下的高并发需求,在实际的生产环境中,通常采用最终一致性的解决方案。
    最终一致性:不追求任意时刻系统都能满足数据完整且一致的要求,通过一段业务上可接受时间之后,系统能达到数据完整且一致的目标。

    消息队列

    在这里插入图片描述

    建立两个消息topic,一个用来处理正常的业务提交,一个用来处理异常冲正消息。请求服务向正常的topic提交业务请求,如果全部正常,则数据一致;如果出现任何异常,向异常的topic提交业务请求,负责回滚。

    事务消息方案

    在这里插入图片描述

    核心: 消息队列必须支持半事务消息(如RocketMQ),半事务消息提供类似于X/OPEN XA二阶段提交的分布式事务功能,这样能够确保请求服务执行本地事务和发送消息在一个全局事务中,只有本地事务成功执行之后,消息才会被投递。消息一旦被投递,默认设计业务执行必须成功(通过重试机制)。如果因为某些异常导致业务最终执行失败,系统无法自愈。只能通过告警的方式等待人工干预。

    数据订阅方案

    在这里插入图片描述

    核心: 监听数据库的更新日志,并转换成消息流供消费端进行订阅处理。业务订阅是异步的,会存在一定的消息延迟。

    TCC事务补偿

    在这里插入图片描述

    TCC是服务化的二阶段编程模型,尝试(try)、确认(confirm)、取消(cancel)均由业务编码实现。
    try阶段: 尝试执行业务,完成所有业务的检查,实现一致性;预留必须的业务资源,实现准隔离型。
    confirm阶段: 真正执行业务,不做任何检查,仅适用于try阶段预留的业务资源,同时要满足幂等性。
    cancel阶段: 取消执行业务,释放try阶段预留的业务资源,操作要满足幂等性。

    相比于二阶段提交:
    TCC位于业务层服务,二阶段提交位于资源层
    **性能提升: **业务来实现控制资源锁的粒度大小,不会锁定整个资源
    数据最终一致性: 基于confirm和concel的幂等性,保证最终事务完成确认或者取消。
    可靠性: 解决了XA协议的协调者单点故障的问题,由主业务方发起并控制整个业务活动,业务管理器也变成多点,引入集群。
    缺点:
    都要有具体业务实现,业务耦合度较高,提高开发成本。

    saga事务模式

    在这里插入图片描述

    核心思想: 将长事务拆成多个本地短事务,由saga事务协调器进行协调,如果正常结束,则正常完成;如果某个步骤失败,根据相反顺序依次调用补偿操作,达到事务的最终一致性。
    基本协议:

    • saga事务由许多幂等的有序的小事务组成;
    • 每个小事务都有对应的补偿,用于撤销执行后的结果;
      和TCC相比,没有预留动作,直接提交。
      有些场景不适合补偿,比如发送短信,发了之后如果撤销,就得再给用户发送说明撤销,体验较差。
    展开全文
  • 一致性成本vs非一致性成本,原文链接:https://www.ffeeii.com/1882.html 质量成本: 质量成本(cost of quality)包括在产品生命周期中为预防不符合要求,为评估产品或服务是否符合要求,以及因未达到要求(返工...

    一致性成本vs非一致性成本,原文链接:https://www.ffeeii.com/1882.html

    质量成本:

    质量成本(cost of quality)包括在产品生命周期中为预防不符合要求,为评估产品或服务是否符合要求,以及因未达到要求(返工),而发生的所有成本。

    一致性成本:

    一致性成本(cost of conformance),该成本是预防性的,在缺陷发生之前付出的,用于质量与要求或规范一致而付出的成本。

    非一致性成本:

    非一致性成本(cost of non-conformance),是由于质量与要求或者规范不一致而造成的成本。

    一致性成本和非一致性成本对比:

    一致性成本和非一致性成本对比

    举例:

    1、为了确保满足质量标准,项目经理聘请外部资源来检查可交付成果的质量。这种检查的成本可以分为哪些成本类别?

    • A:预防成本
    • B:评估成本
    • C:外部成本
    • D:失败成本

    答案:B。检查属于评估成本

    2、下面是非一致成本的例子,除了:

    • A:返工
    • B:培训
    • C:报废
    • D:保修

    答案:B。解析:培训是为了提高团队成员的能力或统一对项目的质量的认识,是为了预防缺陷的产生,是一致性成本。

    展开全文
  • 分布式系统的一致性问题(汇总)

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

    千次阅读 2019-02-20 21:11:31
    Automotive SPICE PAM V3.1中对双向追踪性和一致性要求主要在系统系统工程过程组、软件工程过程组、变更管理过程以及相关管理过程中。 双向追踪性和一致性整体要求如下: 系统工程和软件工程过程中,双向追踪性...
  • 点击上方“朱小厮的博客”,选择“设为星标”后台回复”加群“获取公众号专属群聊入口随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护差、架构...
  • 移动端UI一致性解决方案

    万次阅读 多人点赞 2020-11-26 20:00:21
    总第424篇2020年 第48篇外卖UI一致性项目是外卖UI设计团队与研发团队共建的项目,目的是改善用户端体验的一致性,提升多技术方案间组件的通用性和复用率,降低整体视觉改版带来的研发成...
  • 1. 什么是强/弱一致性? ​对于分布式系统而言,一致性是探讨当前系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果。在数据库领域,“一致性”与事务密切相关,又进一步细化到...
  • 在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的...
  • 一致性维度与数据仓库

    千次阅读 2018-10-11 15:20:22
    一致性维度与数据仓库    1、一致性维度概念   维度建模的数据仓库中,有一个概念叫Conformed Dimension,中文一般翻译为“一致性维度”。一致性维度是Kimball的多维体系结构(MD)中的三个关键性概念之一,...
  • 分布式强一致性事务

    千次阅读 2018-09-24 22:40:59
     事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比如有一条SQL语句没有...
  • 细说分布式下的数据一致性

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

    千次阅读 热门讨论 2018-05-18 08:47:19
    在此期间我听到2种不同的关于一致性的说法。一种说法是Zookeeper是最终一致性,因为由于多副本、以及保证大多数成功的Zab协议,当一个客户端进程写入一个新值,另外一个客户端进程不能保证马上就能读到这个值,但是...
  • 最终一致性 如果确实是消费者宕机了,或者代码出现了BUG导致无法正常消费,在我们尝试多次重发以后,消息最终也没有得到处理,怎么办? 例如存款的场景,客户的钱已经被吞了,但是余额没有增加,这个时候银行出现了...
  • 分布式事务之rabbitMQ最终一致性

    万次阅读 2019-05-26 22:56:56
    //本地消息服务一般抽离出来做成一个本地消息服务系统,因为其他服务也会用到,也要进行实现最终一致性进行存储本地消息 LocalMessageEntity localMessage = new LocalMessageEntity().setContext(context) ...
  • 分布式系统如何保证数据的一致性

    万次阅读 2018-08-06 21:58:56
    作者:buguge ...來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得...当然目前有很多开源的分布式事务产品,例如java JTA,但是这种解决方案的成本是非常高的,而且实现起来非常复杂,效率也比较低...
  • 一致性: 1.强一致性 这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大 2.弱一致性 这种一致性级别约束了系统在写入成功后,不承诺立即...
  • 一致性测试--总结_2

    千次阅读 2014-05-13 10:24:46
    一致性测试只是一个标准框架,不能代替实际的工程测试,如FAT,SAT。 一致性测试表示 DUT按DL/T860标准规定方法与其他IED互连运行的能力。 其实一个设备不使用IEC61850规范也可以跑起来,现在就是为了确立一个统一...
  • CAP, BASE, 最终一致性和五分钟原则

    万次阅读 2017-02-16 16:30:34
    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储的理论依据。这个是一切的源头。 CAP     C: Consistency 一致性A: Availability 可用性(指的是快速获取数据)...
  • 一致性、弱一致性、最终一致性 从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是 强一致性 ...
  •  在上面三个例子中,相信读者一定已经看出来了,我们的终端用户在使用不同的计算机产品时对于数据一致性的需求是不一样的:  有些系统,既要快速地响应用户,同时还要保证系统的数据对于任意客户端都是真实可靠...
  • 多处理机Cache一致性问题及解决办法

    万次阅读 2016-07-17 15:25:30
    由于多数SMP(对称多处理机)结构是采用总线互连的,侦听一致性协议是基于侦听总线事务来保持Cache一致性的协议,所以多数产品采用侦听协议。基于总线互连的SMP是通过高速共享总线将若干个商用的微处理器
  • Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要...于是,人们就归纳出事务的第一个特性:原子(Atomicity)。我靠,一点都不神秘嘛。 特别是在数据库领域,事务是一个
  • 在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的...
  • 由于互联网目前越来越强调分布式架构,...对于极端的情况:例如发布,故障的时候都是没有办法保证强一致性的。首先,在目前的互联网应用中,我们通过一个比较常见的例子,让大家更深入的了解一下分布式系统设计中...
  • 可靠消息最终一致性就是保证消息从生产方经过消息中间件传递到消费方的一致性, RocketMQ作为 消息中间件, RocketMQ主要解决了两个功能: 本地事务与消息发送的原子性问题。 事务参与方接收消息的可靠性。可靠消息...
  • 分布式一致性问题。

    千次阅读 2017-11-22 17:20:09
    博文中的内容来源《从Paxos到Zookeeper 分布式一致性原理与实践》这一本书,感激不尽。
  • 在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的...
  • 关于分布式系统的数据一致性问题

    千次阅读 2016-10-11 08:30:43
    现在的问题是,假设成都上海各自的数据中心有记录变更,需要先同步到主数据中心,主数据中心更新完成之后,在把最新的数据分发到上海,成都的地方数据中心A,地方数据中心更新数据,保持和主数据中心一致性(数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 222,348
精华内容 88,939
关键字:

产品一致性如何控制