分布式事务(一)CAP

1998年,计算机科学家Eric Brewer(埃里克-布鲁尔)提出,分布式系统的三个特性:

  • Consistency,一致性
  • Availability,可用性
  • Partition tolerance,分区容错性
    Eric Brewer给出CAP定义:
    三特性同时只能满足两个
    就像三个圆互相两两相交,但是没有共同相交的区域。
    在这里插入图片描述
    如图,可以选择CA,CP,AP,但是不能选择CAP

Partition tolerance 分区容错性

一个学术的概念,一个多个节点组成的分布式系统中,如果某一节点因为网络异常,网络波动,断电,崩溃,宕机等原因出现不能通信,称为发生分区。

在分布式系统的定义中,如果发生这种分区,分布式系统的其他节点要可以继续提供服务,而不是整个分布式系统挂掉,否则不能称作是分布式系统。

所以分区容错性是分布式系统必需要满足的特性。

而满足CA系统的,大多数是关系型的数据库RDBMS,或者基于RDBMS的单节点应用。
在这里插入图片描述
如图,G1、G2两个节点和client客户端组成一个分布式系统,G1、G2之间通过网络通信。
分区:G1、G2不能通信时,叫产生分区。
分区容错:G1、G2产生分区,继续提供服务
分区不容错:G1、G2产生分区,不再提供服务

需要注意的是,分区必然发生,单不是总是发生,当没有发生分区时,分布式系统是可以同时满足CA的。

  • 分布式系统,一组独立的计算机,作为整体提供服务,如果一个计算机一样
  • 分布式系统,构建在网络之上,必然包含分区容错性。否则不能再称为为分布式系统,所以P通常必选。
  • 实践中,分布式系统通常CP或AP

Consistency 一致性

在这里插入图片描述
G1,G1两个节点和client组成一个简易的分布式系统,G1,G2的某一个数据初始值是vo,写在要写为v1

  1. client向G1写入v1,G1值改变为v1
  2. G1通过网络向G2同步v1
  3. client从G1节点读取数据,读到v1
  4. client从G2节点读取数据获取到v1

一致性:写数据之后,从任意节点读到写入数据。

Availability 可用性

在这里插入图片描述
某一时刻,任意节点,只要收到请求,就要响应
A,C互相矛盾,发生分区时,保证A就要放弃C,保证C就要放弃A

AP之Eureka

eureka服务注册服务发现组件使用AP模式
在这里插入图片描述
如图四个应用application1 applicaiton2 applicaiton3 applicaiton4四个应用,通过eureka client和包括三个节点的eureka集群进行服务注册服务发现活动,服务之间通过rpc远程调用。

eureka之间通过replicate进行数据复制

  • Register:服务注册,自己的IP和端口注册给eureka
  • Renew:发送心跳
  • Cancel:服务下线
  • Get Registry:获取注册信息
  • Replicate:Eureka集群数据同步
  • RPC:远程调用

当eureka集群中的某一个节点发生分区时,eureka节点各自提供服务注册服务发现功能,此时eureka节点之间的数据可能不一致,服务发现会出现异常。

CP之zookeeper

zookeeper的设计,在发生分区时,保证一致性。
下图描述,三个zk节点组成的Zookeeper集群中,有三个客户端在读写数据,在一次写数据的过程中zk如何保持一致性。
在这里插入图片描述

  1. 客户端发起写数据请求
  2. 客户端请求到Follower节点时,转发请求到Leader节点
  3. Leader节点发起修改数据提议
  4. Follower节点针对提议给出确认
  5. Leader节点发起commit操作
  6. 返回状态到客户端
    特殊名词
  • proposal,提议,Leader将请求头,事务体,zxid和请求本身序列化到proposal对象中,作为对zk状态变更的一次提议。
  • ack,Acknowledge character,确认字符
  • commit,zk确认提议可以提交,发送commit消息,指示follower提交变更

对于2n+1个节点的zk集群,发生分区时:

  • 如果有超过n+1个节点正常,则正常写数据,客户端连接到分区节点,读不到最新数据,弱一致性
  • 如果有超过n+1个节点分区,则集群不可用
  • Leader发生分区则重新选举,集群不可用

AP&CP之nacos

如图一个三个nacos节点的nacos集群,nacos控制台,三个应用applcation1两个,application2,applicaiton3共四个节点,application1一个节点作为临时实例注册到nacos,一个applcaiton1作为永久实例注册到nacos,application2和application3作为临时实例注册到nacos。

在这里插入图片描述
服务注册方面,临时实例通过AP的方式注册到nacos集群,nacos集群通过异步的方式同步数据,发生分区时,分区nacos独立提供服务注册服务发现功能。

配置方面,上图描述了发布配置的过程,在nacos多个节点保持同步

  1. 控制台发起发布配置请求
  2. 请求到Follower节点时,转发到Leader节点
  3. Leader节点提交raftlog到Follower节点
  4. Follower节点返回同意raftlog修改请求
  5. Leader,Follower各个节点apply写数据
  6. Leader节点返回响应到收到请求的Follower节点
  7. 返回响应大控制台

Nacos1.0.0开始支持AP、CP和Mixed混合模式
根据功能:

  • 配置管理,元数据管理基于CP模式
  • 服务管理,永久实例基于CP模式
  • 服务管理临时实例,基于AP模式
  • CP模式下Leader分区重新选举,Follower节点分区超过半数不可用,集群不可用

需要指出的是,nacos不是同时支持CAP三要素,而是部分功能支持CP,部分功能支持AP

nacos临时实例和永久实例

临时实例,通过心跳保活,不会持久化实例信息,当没有心跳时剔除。如果又上报心跳,则又注册实例。
永久实例,实例信息持久化到nacos服务端,即时实例不存在,也不会删除,只是修改健康状态。
临时实例,分区发生时,也可以进行注册,下线,获取注册服务信息等活动

raft
raft是一种分布式系统的共识算法,多个服务器节点之间通过投票,选举,达到共识的算法。

常见的AP CP系统

发生分区时满足AP

  • Cassandra
  • Kafka(通过配置满足AP)
  • FastDFS
  • Eureka
  • CouchDB
    发生分区时满足CP
  • HBase
  • Redis
  • MongoDB
  • Zookeeper
  • Consul
  • Kafka(通过配置满足CP)
  • ElasticSearch
  • HDFS

(完^_^)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 课程介绍 介绍该课程的内容、学习成果、实例,还有学习所需的前提知识。 1-1 导学-分布式事务实践 第2章 事务原则与实现 介绍了事务的四大原则,并通过实例介绍数据库实现事务的方法,以及使用JDBC实现事务的方法。 2-1 事务原则与实现:事务 2-2 事务原则与实现:SQL事务 2-3 事务原则与实现:JDBC事务(上) 2-4 事务原则与实现:JDBC事务(下) 第3章 使用Docker搭建环境 介绍了Docker的使用,通过Docker将课程环境搭建起来,方便那些不了解这些技术的同学之后的学习。 3-1 docker简介与mysql安装-1 3-2 docker简介与mysql安装-2 3-3 SpringBoot基础 第4章 Spring事务机制 介绍了Spring的事务机制、事物抽象、内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource、JPA、JMS、JTA都通过实例进行说明。还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4-6 Jms-spring事务实例 4-7 外部事务与JTA 4-8 JTA单数据源事务实例 4-9 JTA多数据源事务实例 第5章 分布式系统 介绍了分布式系统的定义、实现原则和几种形式,详细介绍了微服务架构的分布式系统,并使用Spring Cloud框架演示了一个完整的微服务系统的实现过程。 5-1 CAP原则和BASE理论简介 5-2 分布式系统综述 5-3 SpringCloud微服务架构 5-4 实现registry 5-5 实现proxy 5-6 user服务 5-7 order服务 5-8 添加hystrix 5-9 使用feign 5-10 优化服务间调用 第6章 分布式事务实现,模式和技术 介绍分布式事务的定义、原则和实现原则,介绍使用Spring框架实现分布式事务的几种方式,包括使用JTA、Spring事务同步、链式事务等,并通过实战介绍其实现。除此以外还介绍了一些分布式事务相关的技术,如幂等性、全局一致性ID、分布式对象等。... 6-1 分布式事务介绍 6-2 spring分布式事务实现_使用JTA 6-3 spring分布式事务实现_不使用JTA 6-4 实例1-DB-DB 6-5 实例1-DB-DB.链式事务管理器 6-6 实例2-JPA-DB.链式事务管理器 6-7 实例3-JMS-DB.最大努力一次提交 6-8 分布式事务实现模式与技术 6-9 全局一致性ID和分布式对象_ 第7章 分布式事务实现:消息驱动模式 详细介绍3种分布式事务实现的模式中的消息驱动模式并通过完整实例演示了消息驱动模式下,实现微服务系统的分布式事务的完整过程。 7-1 分布式事务实现:消息驱动模式 7-2 消息驱动模式实例:设计 7-3 消息驱动模式实例:创建ticket服务 7-4 消息驱动模式实例:实现基本ticket功能 7-5 消息驱动模式实例:锁票1 7-6 消息驱动模式实例:锁票2 7-7 按消息流程实现业务 7-8 支付过程 7-9 票转移 7-10 错误处理:锁票失败 7-11 错误处理:扣费失败 7-12 并发时的错误处理 第8章 分布式事务实现:Event Sourcing模式 详细介绍了分布式事务实现的模式中的Event Sourcing模式,并通过完整实例演示了Event Sourcing模式下,实现微服务系统的分布式事务的完整过程。 8-1 事件溯源模式介绍 8-2 事件溯源模式与Axon框架-1 8-3 事件溯源模式与Axon框架-2 8-4 使用Axon框架的设计过程介绍 8-5 Axon框架-实例(上) 8-6 Axon框架-实例(下) 8-7 Saga模式和Axon Saga 8-8 聚合命令事件(上) 8-9 聚合命令事件(下) 8-10 实现saga 8-11 实现query 8-12 处理超时 8-13 并发测试 8-14 cloud-axon实例:分布式处理介绍 8-15 事件设计 8-16 事件与队列设计 8-17 实现User服务 8-18 实现Ticket服务 8-19 实现Order服务 8-20 实现读写分离 8-21 测试与并发 8-22 事件溯源模式与Axon框架总结 第9章 TCC模式和微服务架构的设计模式 本章介绍TCC模式,也对微服务系统的几种设计模式,以及这些模式下分布式事务的实现模式进行了介绍。 9-1 TCC模式介绍 9-2 微服务架构的设计模式 第10章 课程总

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值