N17
中文
中文
  • N17 白皮书
    • 项目介绍
    • 平台亮点
  • 交易模式
    • 铸造
    • 发行
    • 交易
    • 生态激励
  • 技术体系
    • N17多链混合架构
      • UTXO 模型与账户模型
      • 抽象账户合约层和虚拟机的集成
      • EVM集成与交易流程
    • API & WebSocket
    • SpringCloud微服务架构
      • Feign(接口调用)
      • Netflix eureka(注册发现)
      • Ribbon(负载均衡)
      • Hystrix(熔断器)
      • Zuul(微服务网关)
      • SpringCloud( 统一配置服务)
      • Sleuth+ZipKin(跟踪服务)
    • 撮合交易引擎
      • 撮合系统
      • 基准价格选取算法
    • Wallet接口与拓展性
    • SpringSecurity+Web3.0签名验证
    • Seata
      • AT模式(与XA模式在编程模型上保持完全一致)
        • 整体机制
        • 写隔离
        • 读隔离
        • 一阶段过程
        • 二阶段-回滚过程
        • 二阶段-提交过程
      • TCC模式
      • SAGA模式
    • Mongodb数据仓库
      • 数据逻辑结构与存储结构
      • MongoDB相比传统开源数据库优势
  • DAO社区
    • N17 DAO的使命
    • N17 DAO的服务体系
    • N17 DAO的治理流程
    • 全球开发者社区
  • 风险提示与免责声明
Powered by GitBook
On this page
  1. 技术体系
  2. Seata
  3. AT模式(与XA模式在编程模型上保持完全一致)

写隔离

Previous整体机制Next读隔离

Last updated 2 years ago

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

两个全局事务tx1和tx2,分别对a表的m字段进行更新操作,m的初始值1000。

tx1先开始,开启本地事务,拿到本地锁,更新操作m=1000-100=900。本地事务提交前,先拿到该记录的全局锁,本地提交释放本地锁。tx2后开始,开启本地事务,拿到本地锁,更新操作m=900-100=800。本地事务提交前,尝试拿该记录的全局锁,tx1全局提交前,该记录的全局锁被tx1持有,tx2需要重试等待全局锁。

tx1二阶段全局提交,释放全局锁。tx2拿到全局锁提交本地事务。

如果tx1的二阶段全局回滚,则tx1需要重新获取该数据的本地锁,进行反向补偿的更新操作,实现分支的回滚。此时,如果tx2仍在等待该数据的全局锁,同时持有本地锁,则tx1的分支回滚会失败。分支的回滚会一直重试,直到tx2的全局锁等锁超时,放弃全局锁并回滚本地事务释放本地锁,tx1的分支回滚