一、概述:

在日常的工作场景,经常遇到数据一致性相关的问题,各路大神在应对各类问题时,也开发出了各种优秀的技术组件,接下来汇总一下,希望对大家学习有帮助.

二、单机环境下,多线程并发:

在单机多线程并发情况下,如何保障对共享数据的安全访问?相信有经验的开发人员,应该都能回答出来,多线程并发涉及的知识点Synchronized,ReentrantLock,CAS操作通过获取对象锁修饰代码块或者方法,来确保对共享变量的安全访问,来保障逻辑上的一致性。

三、数据库事务:

以mysql为例,MySQL XA 是基于Open Group 的<<Distributed Transaction Processing:The XA Specification>> 标准实现的,支持分布式事务,允许多个数据库实例参与一个全局的事务。MySQl XA 从MySQL 5.0 开始引入,众多的存储引擎当中,仅innodb存储引擎支持MySQL XA事务。
1、事务的特征ACID
      A 原子性
      C 一致性
      I 隔离性
      D 持久化
2、事务的隔离级别
    Read Uncommitted(读取未提交内容)
    Read Committed(读取提交内容)
    Repeatable Read(可重读)
    Serializable(可串行化)
3、事务的传播特性
    七种事务的传播特性

四、CAP理论:

C表示一致性,各个副本节点上,数据需要保持一致性;
A可用性;
P分区容错性,分布式环境下,当有网络,环境等等问题,必须得让系统持续对外提供服务保障;

五、BASE理论:

BA  表示基本可用
    S   表示Soft  status  ,可以容忍中间状态的存在;
    E   表示最终一致性;
    相对传统的事务强调强一致性,互联网分布式事务,更多的采用柔性事务,例如电商下单,同时发放优惠券,发放优惠券的动作,可以采用异步的方式,例如存放工单表,后台定时任务扫描工单表,负责处理发放优惠劵的动作。

再例如Zookeeper  主从节点数据同步,采用超过一半确认,就可以提交的方式,也是采用柔性事务,只要达成事务最终一致性就OK。

六、分布式锁:

分布式锁,相对单例模式下并发线程的锁,当需要控制多个实例上面的线程操作某个共享变量时,分布式锁显得尤为重要,当获取锁,才可以业务操作,否则等待。可以采用curator、redis等相关中间件,实现分布式锁。

七、分布式事务:

当事务控制多个数据库实例时,需要有个事务管理器TM管理多个资源管理器RM,通过XID标识同一个事务,分布式事务的实现方案有以下两种:

1、2PC:

两阶段提交又称2PC(two-phase commit protocol),2pc是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)N个参与者节点(partcipant)

2、3PC,

三阶段提交(Three-phase commit),也叫三阶段提交协议(Three-phase commit protocol),是二阶段提交(2PC)的改进版本。

与两阶段提交不同的是,三阶段提交有两个改动点。

  1. 引入超时机制。同时在协调者和参与者中都引入超时机制。
  2. 在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

也就是说,除了引入超时机制之外,3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

2PC与3PC的区别

相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的消息后,会默认执行commit操作,而不会一直让事务处于阻塞状态。但是也有可能会造成数据不一致。例如:当一部分机器收不到协调者信息,这时候协调者发送的abort信息,这样的话,一部分机器commit,一部分rollback,就会导致数据不一致。

3、TCC

TCC分别对应Try,Confirm和Cancel三种操作,三个操作业务含义如下:

Try:预留业务资源

Confirm:确认执行业务操作

Canal:取消执行业务操作

与关系型数据库事务的三个操作作对比:DML、Commit,Rollback

操作 TCC 关系型数据库事务
Try/DML 预留业务资源 锁定数据库记录行
Confirm/Commit 确认后,使用预留资源 对锁定记录航进行操作
Cancel/Rollback 没有全部成功就回滚 没有全部成功就回滚

TCC和两阶段分布式事务处理的区别

当讨论2PC时,我们只专注事务处理阶段,因而只讨论prepare和commit,所以,可能很多人都忘了,使用2PC事务管理机制也是有业务逻辑阶段的。正是因为业务逻辑的执行,发起了全局事务,这才有其后的事务处理阶段。所以,实际上,使用2PC机制时,以提交为例:

一个完整的事务周期:

begin–>业务逻辑–>prepare–>commit。

再看TCC,也不外如是:要发起全局事务,同样也必须通过业务逻辑来实现。该业务逻辑一来通过执行触发TCC全局事务的创建;二来也需要执行部分数据写操作;此外还要通过执行想TCC全局事务注册自己,以便后续TCC全局事务commit/rollback时回调其相应的confirm/canal业务逻辑。所以,使用TCC机制时,以提交为例:

一个完整的生命周期:

begin–>业务逻辑(Try业务)–>commit(confirm业务)。

综上所述:将两个机制做对应:

1、2PC机制的业务阶段 === TCC机制的try业务阶段

2、2PC机制的提交阶段(prepare & commit) ==== TCC机制的提交阶段(confirm)

3、2PC机制的回滚阶段(rollback) === TCC机制的回滚阶段(cancel)

八、幂等:

所谓幂等,就是当客户端发起功能重试时,N次操作,都跟第一次操作结果相同,例如查询就是天生的幂等;下单,如果客人重复提交下单,这时系统不能生成很多重复的订单,这就需要幂等的判断处理。

可以根据请求的入参组装起来求取hashcode ,如果值跟现有库中数据相同,表示已经有相同的请求,系统则自动返回,不会再重复生成一条订单。

如何保障-数据一致性相关推荐

  1. 当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性

    摘要:当前MySQL所有版本不支持分布式事务的崩溃恢复安全,这严重影响了分布式事务的高可用保障. 华为云数据库内核高级技术专家,拥有十多年MySQL内核研发经验,目前在华为云数据库团队研发华为云数据库 ...

  2. Spring Cloud Alibaba 一致性挑战:微服务架构下的数据一致性解决方案

    本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内容: CAP 原则与 BASE 定理: TCC 一致性解决方案: Seata TCC 模式. 首先咱们了解什么 ...

  3. 分布式数据库数据一致性的原理、与技术实现方案

    http://youzhixueyuan.com/the-principle-and-technology-realization-of-distributed-data-consistency.ht ...

  4. 实现全球同服,保障业务出海——腾讯云跨域加速解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 业务出海难在哪? 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者: 方坤丁 传统的出海方案 以游戏业务为例,国内 ...

  5. mysql集群保证数据一致性

    mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redi ...

  6. 分布式数据一致性(数据多份副本一致性)

    前言 分布式数据库的数据一致性管理是其最重要的内核技术之一,也是保证分布式数据库满足数据库最基本的ACID特性中的 "一致性"(Consistency)的保障.在分布式技术发展下, ...

  7. 数据库和区块链的异同

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 前几日有好友询问我关于数据库和区块链的异同,我觉得这个问题非常好,今天刚好有空把当时的聊天情况回忆了一下,可能很多人都有 ...

  8. 美团即时物流的分布式系统架构设计

    背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...

  9. 支付宝的架构到底有多牛逼!还没看完我就跪了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:uee.me/cFgQC 自 2008 年双 11 以来,在 ...

  10. 美团外卖分布式系统架构设计

    背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...

最新文章

  1. 格式资料python sqlalchemy 查询结果转化为 Json格式
  2. tmux的使用方法和个性化配置
  3. 绅士计算机乐谱之谦,绅士(简单钢琴独奏版)
  4. aes子密钥生成c语言_HBase配置AES加密
  5. Python pip使用国内镜像
  6. 安装MySQL之后,在cmd中MySQL命令不能识别
  7. css垂直水平居中的整理
  8. matlab 识别调试,有关matlab的人脸识别程序,但调试是不成功
  9. dist文件夹、src文件夹、dest文件夹作用
  10. 上周热点回顾(2.19-2.25)
  11. fiddler安装安全证书
  12. 我的新书《C++服务器开发精髓》终于出版啦
  13. pyqt 取鼠标处文字_侧裙可拆按键随心装,黑爵GTi模块化游戏鼠标评测
  14. java基础扫盲_Java学习:扫盲
  15. 云栖大会开源重磅升级!PolarDB-X v2.2: 企业级和国产化适配
  16. MySQL高级篇知识点——MySQL 事务日志
  17. P2608 [ZJOI2010]任务安排
  18. win10打印机安装提示无法连接到打印机
  19. 波形发生器的工作原理
  20. python绘制动态模拟图

热门文章

  1. 项目沟通管理和干系人管理
  2. 苹果暗黑模式_DNF手游来了!时间已定;苹果商店首次加入暗黑模式;以上为本期内容...
  3. mysql跨库查询语句mybatis_mybatis实现跨库多表查询
  4. mysql跨库查询解决方案
  5. Excel如何将xlsx后缀格式的文件转为xls格式?
  6. 人脸关键点检测之PFLD
  7. Git查看本地配置信息
  8. c语言中obj的错误,C语言中的obj
  9. python计算加权平均分
  10. 最新!中国内地高校ESI排名出炉:342所大学上榜!