首页 > 其他分享 >分布式事务-CAP 和 BASE 理论以及几种方案

分布式事务-CAP 和 BASE 理论以及几种方案

时间:2023-06-07 22:00:36浏览次数:35  
标签:事务 CAP Try BASE 提交 一致性 分布式

一、为什么会有分布式事务#

分布式系统经常出现的异常,如机器宕机、网络异常、消息丢失、数据错误、不可靠的TCP、存储数据丢失等等。

二、分布式事务

分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于分布式系统的不同节点之上,通常一个分布式事物中会涉及到对多个数据源或业务系统的操作。

典型的分布式事务场景:跨银行转操作就涉及调用两个异地银行服务

三、分布式理论

1、CAP理论

CAP理论:一个分布式系统不可能同时满足一致性,可用性和分区容错性这个三个基本需求,最多只能同时满足其中两项

一致性(Consistency):数据在多个副本之间是否能够保持一致的特性。

可用性(Avaliability):是指系统提供的服务必须一致处于可用状态,对于每一个用户的请求总是在有限的时间内返回结果,超过时间就认为系统是不可用的

分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非整个网络环境都发生故障。

  • CAP定理的应用 放弃P(CA):如果希望能够避免系统出现分区容错性问题,一种较为简单的做法就是将所有的数据(或者是与事物先相关的数据)都放在一个分布式节点上(属于本地都放一个系统),这样虽然无法保证100%系统不会出错,但至少不会碰到由于网络分区带来的负面影响

放弃A(CP):其做法是一旦系统遇到网络分区或其他故障时,那受到影响的服务需要等待一定的时间,应用等待期间系统无法对外提供正常的服务,即不可用

放弃C(AP):这里说的放弃一致性,并不是完全不需要数据一致性,是指放弃数据的强一致性,保留数据的最终一致性。

分布式系统中实现一致性的 raft 算法: 任何一个节点都有三种状态:随从,候选者,领导 https://www.jianshu.com/p/8e4bbe7e276c

CP面临的问题: 对于多数大型互联网应用的场景,主机众多,部署分散,而且现在集群的规模越来越大,所以,节点故障、网络故障是常态,而且要保证服务可用性达到 99.999999%(N个9),即保证P和A,舍弃C。

2、BASE理论

BASE是基本可用,软状态,最终一致性。是对CAP中一致性和可用性权限的结果,是基于CAP定理演化而来的,核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特定,采用适当的方式来使系统达到最终一致性

强一致性、弱一致性、最终一致性: 对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这就是强一致性。 如果能容忍后续的部分或者全部访问不到,则是弱一致性,如果经过一段时间能访问到更新后的数据,则是最终一致性。

三、分布式事务几种方案

1、2PC提交(刚性事务)

二阶段提交协议是将事务的提交过程分成提交事务请求和执行事务提交两个阶段进行处理。

2、3PC提交(刚性事务)

三阶段提,也叫三阶段提交协议,是二阶段提交(2PC)的改进版本。 与两阶段提交不同的是,三阶段提交有两个改动点。引入超时机制。同时在协调者和参与者中都引入超时机制。在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。 三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

3、柔性事务-TCC事务补偿型方案

刚性事务:遵循 ACID 原则,强一致性。 柔性事务:遵循 BASE 理论,最终一致性。 与刚性事务不同,柔性事务允许一定时间内,不同节点的数据不一致,但要求最终一致。 TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel,3个方法均由业务编码实现 TCC要求每个分支事务实现三个操作:预处理Try,确认Confirm,撤销Cancel。 Try操作做业务检查及资源预留, Confirm做业务确认操作 Cancel实现一个与Try相反的操作即回滚操作。 TM首先发起所有的分支事务Try操作,任何一个分支事务的Try操作执行失败,TM将会发起所有分支事务的Cancel操作,若Try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若执行失败,TM会进行重试。

4、柔性事务-最大努力通知型方案

最大努力通知,发起通知方尽最大的努力将业务处理结果通知为接收通知方,但是消息可能接收不到,此时需要接收通知方主动调用发起通知方的接口查询业务,通知可靠性关键在于接收通知方。

5、柔性事务-可靠消息+最终一致性方案(异步确保型)

实现:业务处理服务在业务事务提交之前,向实时消息服务请求发送消息,实时消息服务只记录消息数据,而不是真正的发送。业务处理服务在业务事务提交之后,向实时消息服务确认发送,只有在得到确认发送指令后,实时消息服务才会真正发送。 最终会使用4、5方案来解决分布式事务。

标签:事务,CAP,Try,BASE,提交,一致性,分布式
From: https://blog.51cto.com/u_15993308/6435721

相关文章

  • Hadoop的完全分布式搭建
    Hadoop分布式安装集群规划主机名Hadoop10Hadoop11Hadoop12网络192.168.10.10192.168.10.11192.168.10.12用户hadooproothadooproothadooprootHDFSNameNodeDateNodeDateNodeSecondaryNameNodeDataNodeYARNNodeManagerNodeManagerResourceManager......
  • Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!
       6日早间,央视财经频道(CCTV-2)对“币安及其首席执行官被美证交会(SEC)起诉”进行了报道。   值得一提的是,央视并不常播报加密货币相关新闻,上一次是关于香港监管框架,赵长鹏(CZ)对此还十分看好,此次却是币安挨告的新闻,不知CZ现在心情如何。   不过CZ并不孤独,在币安被起诉后的不到......
  • vCenter下标准交换机迁移到分布式交换机
    一、在vCenter上创建分布式交换机可以创建默认端口组,或者后面手动创建 二、添加主机分配上行链路,选择未使用的物理适配器,建议每台分配两个冗余的物理网卡管理VMkernel适配器,这里先不迁移迁移虚拟机网络,这也先不迁移,点完成即可; 三,迁移标准交换机端口组到分布式交换......
  • Exploiting Positional Information for Session-based Recommendation
    目录概符号说明Forward/Backward-awarenessDualPositionalEncodingQiuR.,HuangZ.,ChenT.andYinH.Exploitingpositionalinformationforsession-basedrecommendation.ACMTransactionsonInformationSystems,2021.概本文讨论了一些常用positionalencodi......
  • 人工智能创新挑战赛:海洋气象预测Baseline[4]完整版(TensorFlow、torch版本)含数据转化
    人工智能创新挑战赛:海洋气象预测Baseline[4]完整版(TensorFlow、torch版本)含数据转化、模型构建、MLP、TCNN+RNN、LSTM模型训练以及预测1.赛题简介项目链接以及码源见文末2021“AIEarth”人工智能创新挑战赛,以“AI助力精准气象和海洋预测”为主题,旨在探索人工智能技术在气......
  • 人工智能创新挑战赛:海洋气象预测Baseline[4]完整版(TensorFlow、torch版本)含数据转化、
    人工智能创新挑战赛:海洋气象预测Baseline[4]完整版(TensorFlow、torch版本)含数据转化、模型构建、MLP、TCNN+RNN、LSTM模型训练以及预测1.赛题简介项目链接以及码源见文末2021“AIEarth”人工智能创新挑战赛,以“AI助力精准气象和海洋预测”为主题,旨在探索人工智能技术在气......
  • hbase创建表提示已经存在,实际是不存在
    原因是以前创建过这个表,但是hbase暴力删除了这个表后,zookeeper还保留了这个表的信息。在linux下用hbasezkcli命令进入ls/hbase/table可以查看存在的表信息然后用命令rmr/hbase/table/表名 进入hbaseshell后就可以创建刚刚删除的表了。 ......
  • CentOS配置Hbase成系统应用,并随系统自启动
    1、在/etc/init.d/目录创建hbase文件#!/bin/bash#chkconfig:3456337#exportJAVA_HOME=/usr/local/jdk1.8.0_191HBASE_HOME=/usr/local/hbase-1.2.12case"$1"instart)$HBASE_HOME/bin/start-hbase.sh;;stop)$HBASE_HOME......
  • Lattice-Based Group Signatures With Time-Bound Keys via
    ......
  • docker: Error response from daemon: could not select device driver "" with capab
    docker19之后的版本1.nanonvidia.shsudocurl-s-Lhttps://nvidia.github.io/nvidia-container-runtime/gpgkey|\ sudoapt-keyadd-distribution=$(./etc/os-release;echo$ID$VERSION_ID)sudocurl-s-Lhttps://nvidia.github.io/nvidia-container-runtime/$dist......