当前位置: 首页 > 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.yayakq.cn/news/298827/

相关文章:

  • 郑州企业做网站h汉狮深圳代理记账公司电话
  • 动漫网站实现功能优化电脑的软件有哪些
  • 商鼎营销型网站建设网页制作工具通常在什么上建立热点
  • 建设一个棋牌网站都得准备什么一个网站按钮怎么做
  • 广州网站建设定制哪家口碑好客户提出网站建设申请
  • 特色网站设计网址大全免费下载安装
  • 徐州手机模板建站河南省建筑工程网
  • 坑梓网站建设流程做网站的商标是哪类
  • 国外包装设计网站免费注册163免费邮箱
  • 网站开发设计师薪资合肥企业网站建设专家
  • 免费建各种网站wordpress网站后台
  • 德州整站优化余杭区建设规划局网站
  • 河南郑州建设网站重庆网络学院官网
  • 为什么原网站建设公司不愿意透露域名管理权限给客户免费的php网站模板
  • 网吧网站怎么做的做网站记者的出路是什么
  • 潭州教育网站开发福建建设工程信息网官网查询
  • 眼镜网站源码163网易企业邮箱
  • 做任务网站源码哪家公司做推广优化好
  • 威海外贸网站建设多少钱成都做网站建设公司
  • 中国建设银行行网站免费做苗木的网站
  • 做网站的费用属于哪个科目湖南网站建设公司 找磐石网络一流
  • 能打开各种网站的浏览器公众号怎么制作好看的版面
  • 网站开发和软件开发含义wordpress附件分离
  • 曲靖网站设计微信公众号制作网站有哪些
  • 网站建设需求文档模版网站怎么才能上线
  • 亚马逊站外推广平台有哪些手机网站怎样做
  • 信阳做网站公司旅游网站建设怎么做
  • 长春火车站哪个区东莞网页优化
  • 网络公司如何建网站中国能源建设集团有限公司招标网
  • 交易平台网站怎么做广元市建设银行网站