当前位置: 首页 > 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.zhongyajixie.com/news/55949.html

相关文章:

  • 调用其他网站文章列表培训心得体会总结
  • 济南疫情最新新增病例百度seo关键词报价
  • 厦门免费自助建站模板seo外包公司优化
  • 网站设计开题报告范文百度投诉中心人工电话号码
  • wordpress 轮播图自适应百度优化培训
  • 贸易公司如何做英文网站兰州疫情最新情况
  • 如何做网站客户案例百度总部电话
  • 网站的类型网址浏览大全
  • 策划公司网站建设google下载安装
  • 域名备案和网站备案有什么区别百度广告商
  • wordpress 4.0 bug公司以优化为理由裁员合法吗
  • 访问wap网站优化排名 生客seo
  • 空调维修技术支持深圳网站建设郑州seo优化顾问阿亮
  • 网站开发保密协议范本seo关键词挖掘工具
  • 自己做的网站如何让外网访问高端网站建设哪个好
  • 做网站建设公司怎么样营销策略都有哪些
  • 中国第四冶金建设有限公司官方网站百度推广优化中心
  • 自己做的网站用国外的空间怎么样北京竞价托管代运营
  • 网站前端包括哪些建立一个企业网站需要多少钱
  • 大连网站推广工具搜索引擎优化的要点
  • 网站里弹窗怎么做百度助手下载安装
  • 婚庆网站开发背景百度关键词排名工具
  • 怎么用php自己做网站吗杭州seo网络推广
  • asp网站自动识别手机黑科技引流推广神器免费
  • 织梦cms做网站互联网广告行业
  • html5 电商网站模板国内免费顶级域名注册
  • 制作网页的网站哪个好用推广运营
  • 四川企业网站开发成都seo公司排名
  • 模拟网站平台怎么做今日要闻
  • 景区网站建设方案免费网站分析seo报告是坑吗