分布式事务理论基础

事务问题

在分布式系统下,一个业务跨越多个服务或数据源,每个服务都是一个分支事务,要保证所有分支事务最终状态一致,这样的事务就是分布式事务。
image.png

CAP定理

分布式系统有三个指标:

  • 一致性(Consistency)
  • 可用性(Avaliablity)
  • 分区容错性(Partition tolerance)

Eric Brewer说,分布式系统无法同时满足三个指标,叫CAP定理

一致性:用户访问分布式系统任一节点,得到数据一致
可用性:用户访问任意健康节点,必须得到响应,而不是超时或拒绝
分区容错性

  • 分区:因故障部分节点失去连接,形成独立分区
  • 容错:集群出现分区时,整个系统持续对外提供服务

总结:分布式系统通过网络连接,一定会出现分区问题(P)。出现时,系统的一致性(C)和可用性(A)无法同时满足。

思考:es集群是CP还是AP? CP

BASE理论

是CAP的一种解决思路,包含三个思想:

  • 基本可用(Basically Avaliable)
  • 软状态(Soft State)
  • 最终一致性(Eventually Consistent)

AP模式:各事务分别执行提交,允许结果不一致,采用弥补措施恢复数据,实现最终一致。
CP模式:各子事务互相等待,同时提交,同时回滚,达成强一致。等待过程处于弱可用状态。

初识Seata

架构

Seata事务管理有三个重要角色:

  • 事务协调者(TC):维持全局和分支事务状态
  • 事务管理器(TM):定义全局事务范围
  • 资源管理器(RM):管理分支事务资源

Seata提供四种不同分布式解决方案:

  • XA模式:强一致,牺牲一定可用性,无业务侵入
  • TCC模式:最终一致分阶段事务模式,有业务侵入
  • AT模式:最终一致分阶段事务模式,无业务侵入,默认
  • SAGA模式:长事务模式,有业务侵入

    部署TC服务

    seata的部署和集成.md
    修改seata配置(registry.conf) ```shell registry {

    file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

    type = “nacos”

    nacos { application = “seata-tc-server” serverAddr = “127.0.0.1:8848” group = “DEFAULT_GROUP” namespace = “” cluster = “default” username = “nacos” password = “nacos” } }

config {

file、nacos 、apollo、zk、consul、etcd3

type = “nacos”

nacos { serverAddr = “127.0.0.1:8848” namespace = “” group = “SEATA_GROUP” username = “nacos” password = “nacos” dataId = “seataServer.properties” } }

```

在nacos添加配置
image.png

微服务集成Seata

  1. 添加依赖
  2. 配置yml

    动手实践

高可用