当前位置: 首页 > news >正文

网站测试目的株洲网站设计

网站测试目的,株洲网站设计,做网站需要交接什么,网站建设套餐是什么意思Seata的Undo Log(回滚日志) 是其AT(Auto Transaction)模式实现分布式事务回滚的核心机制,通过记录数据变更前的快照(before image)和变更后的状态(after image)&#xff…

Seata的Undo Log(回滚日志) 是其AT(Auto Transaction)模式实现分布式事务回滚的核心机制,通过记录数据变更前的快照(before image)和变更后的状态(after image),支持分支事务的回滚操作。以下是其存储机制的详细解析:


Undo Log的核心设计

1. 存储位置
  • 与业务数据同库:每个分支事务的Undo Log存储在业务数据库的单独表中(默认表名为undo_log),与业务数据共用同一个本地事务,确保原子性。
  • 隔离性保障:通过业务SQL和Undo Log在同一个本地事务中写入,实现"业务操作+日志记录"的原子提交。
2. 表结构设计

undo_log表包含关键字段:

CREATE TABLE undo_log (id            BIGINT(20)   AUTO_INCREMENT PRIMARY KEY,branch_id     BIGINT(20)   NOT NULL,      -- 分支事务IDxid           VARCHAR(100) NOT NULL,      -- 全局事务IDcontext       VARCHAR(128) NOT NULL,      -- 上下文信息(如序列化格式)rollback_info LONGBLOB     NOT NULL,      -- 回滚信息(压缩后的二进制数据)log_status    INT(11)      NOT NULL,      -- 日志状态(0-正常,1-已删除)log_created   DATETIME     NOT NULL,      -- 创建时间log_modified  DATETIME     NOT NULL,      -- 修改时间UNIQUE KEY ux_undo_log (xid, branch_id)   -- 唯一索引
);
3. 日志内容(rollback_info)

采用自定义二进制格式存储,包含:

  • Before Image:SQL更新前的数据快照(用于回滚恢复)。
  • After Image:SQL更新后的数据状态(用于脏写校验)。
  • SQL类型(INSERT/UPDATE/DELETE)。
  • 表元数据(表名、列信息)。

示例:更新操作UPDATE product SET stock=90 WHERE id=1的Undo Log

  • Before Image: {id:1, stock:100}
  • After Image: {id:1, stock:90}

Undo Log的生命周期

1. 写入阶段(事务开启)
业务应用 Seata RM 业务数据库 执行UPDATE product SET stock=90 1. 查询当前值(Before Image: stock=100) 2. 执行业务UPDATE 3. 查询更新后值(After Image: stock=90) 4. 写入Undo Log到undo_log表 本地事务提交(业务数据+Undo Log原子写入) 业务应用 Seata RM 业务数据库
2. 回滚阶段(全局事务失败)
Seata TC Seata RM 业务数据库 通知分支回滚(xid=xxx) 1. 查询Undo Log(根据xid+branch_id) 2. 校验脏写(对比当前DB值与After Image) 3. 生成逆向SQL(用Before Image恢复数据) 4. 执行回滚SQL 5. 删除Undo Log记录 本地事务提交(数据恢复+日志删除) Seata TC Seata RM 业务数据库
3. 清理阶段(全局事务提交后)
  • 异步删除:TC通知提交成功后,RM异步删除对应的Undo Log。
  • 定时清理:内置线程定期扫描删除状态为log_status=1(已删除)的过期日志。

关键技术细节

1. 数据序列化
  • 支持多种序列化协议:默认使用Kryo,可选FSTHessian等。
  • 压缩存储:对rollback_info字段使用ZIP压缩,减少磁盘占用。
2. 脏写检测(关键安全机制)

在回滚前执行:

SELECT stock FROM product WHERE id=1; -- 当前数据库值
  • 正常情况:当前值 = After Image(stock=90)→ 执行回滚。
  • 脏写发生:当前值 ≠ After Image(如其他事务修改为stock=80)→ 中止回滚并告警。
3. 逆向SQL生成逻辑
原SQL类型逆向SQL生成规则示例
INSERT生成DELETE语句DELETE FROM product WHERE id=1
DELETE生成INSERT语句(用Before Image)INSERT INTO product(id,stock) VALUES(1,100)
UPDATE生成UPDATE回退到Before ImageUPDATE product SET stock=100 WHERE id=1

设计优势与挑战

优势
  1. 原子性保证:业务数据与Undo Log同库同事务写入,避免单点故障。
  2. 高效回滚:直接解析Undo Log生成逆向SQL,无需扫描全量日志。
  3. 轻量无侵入:对业务代码透明,仅需代理DataSource。
挑战与规避
问题解决方案
日志膨胀异步删除 + 定期清理机制
主键冲突(INSERT回滚)使用Before Image中的完整数据生成INSERT
高并发写入竞争分支事务串行化(TC全局锁协调)
跨数据库兼容性抽象SQL模板(不同数据库方言动态适配)

生产实践建议

  1. 表结构优化
    • undo_log表分区(按log_created时间)提升查询效率。
    • 使用SSD存储降低日志读写延迟。
  2. 参数调优
    # 调整日志批量删除大小(默认1000)
    client.undo.log.batch.delete.size=2000
    # 缩短日志保留时间(默认7天)
    client.log.exception.retry.period=259200000 # 3天
    
  3. 监控重点
    • Undo Log表大小增长趋势。
    • 回滚操作耗时(检测脏写频率)。
    • 异步删除线程堆积情况。

总结:Undo Log的核心价值

Seata通过Undo Log实现了分布式事务的回滚能力,其设计精髓在于:

  1. 与业务数据同库存储 → 利用本地事务保证日志与业务的原子性。
  2. 前后镜像完整记录 → 支持精确逆向数据恢复。
  3. 异步清理机制 → 平衡性能与存储开销。

这一机制虽牺牲了部分存储空间,但换来了分布式事务的高可用性数据最终一致性,是AT模式能在生产环境广泛应用的关键基石。

http://www.wangmingla.cn/news/57426.html

相关文章:

  • 深圳免费网站制作哪个好站长工具精华
  • 库存网站建设定制百度打车客服电话
  • 做响应式网站的河南网站seo费用
  • 摩托车专业网站百度投放广告联系谁
  • ui培训机构哪家好天津百度网站排名优化
  • 网站托管seo优化在哪里学
  • ubuntu本地安装wordpress北京搜索优化推广公司
  • 查询网站建设时间营销到底是干嘛的
  • 用php做电子商务网站搜索引擎技术优化
  • 哪个网站有适合小学生做的题目银川seo
  • 黄冈网站建设报价表衡水seo优化
  • 网销都是在那些网站做推广如何联系百度客服
  • dw做的网站有域名么锦绣大地seo官网
  • 杭州 网站建设公司网站制作流程和方法
  • 外贸公司网站制作价格搜索引擎推广方案案例
  • 商标转让查询官网入口百度排名优化工具
  • 保定网站建设价格网络营销推广培训机构
  • 青岛网站建设工作室搜索引擎营销的主要方式有哪些?
  • 如何将微信和企业网站同步备案域名
  • wordpress支持建多个站点吗什么是搜索引擎竞价推广
  • 做旅行网站好关键词权重查询
  • 能在线做英语题目的网站渠道策略的四种方式
  • 徐州做网站的公司百度问问首页登录
  • 商城网站建设新闻windows10优化软件
  • 做淘宝招牌软件网站企业网站模板
  • 网站没有做适配 怎么办北京网站优化培训
  • 电子商务网站策划方案网络引流怎么做啊?
  • 为什么一个网站做中英文双语版网络营销和传统营销的关系
  • 手机网站微信支付接口开发教程品牌营销策划网站
  • 国外可以做非法网站吗移动端关键词排名优化