事务异常场景
事务异常场景A Critique of ANSI SQL Isolation Levels 论文里的异常图// TODO image P0 Dirty Write:脏写 P1 Dirty Read:脏读 P4C Cursor Lost Update:游标丢失更新 P4 Lost Update:丢失更新 P2 Fuzzy Read:不可重复读 P3 Phantom:幻读 A5A Read Skew:读偏序 A5B Write Skew:写偏序 脏读读到另一个事务尚未提交的数据。 不可重复读同一个事务内多次读,读到的数据不同,也就是当前事务读到了其他事务提交的数据。 幻读事务内多次查询一个范围的记录,返回的记录数不同。 脏写当前事务回滚了其他事务提交的数据。T1更新;T2更新;T1回滚,回滚掉了T2的更新...
常用的 Zookeeper 命令
常用的 Zookeeper 命令当 zk 出现问题时,可以进入 zookeeper 所在 bin目录,启动zk命令行工具进行相关运维操作。 12# 启动 zkCli, 连接 zk./sh zkCli.sh 新增1234# 1.增# 创建节点:create [-s] [-e] path data aclcreate /zk-node 123 删除1234567# 2.删# 删除节点:delete path [version]delete /zk-node# 级联删除节点deleteall path 修改1234# 3.改# 更新节点里的数据set path data [version] set /zk-node 333 查询1234567891011121314151617181920212223242526272829# 4.查# 4.1.查看指定路径ls path [watch]ls /ls /governance_ds_tablels /governance_ds_table/metadata# 级联查看路径ls -R path#...
分布式一致性模型
分布式一致性模型分布式一致性探讨的问题:由于分布式环境 CAP 理论的存在,当用户对数据发生读写操作时可能产生的结果。 线性一致性所有操作被记录在一条时间线上,任意两个事件都可以比较先后顺序.任何客户端一定读取到最新写入的数据(包括从其他客户端写入的)。 实现:依赖全局时钟实现,保证所有操作记录在一条时间线上。 顺序一致性多个写操作全局有序,单个客户端看到的写操作的顺序相同。但是不保证各个客户端一定读取到最新值,只能保证一个客户端读取到写入的新值后,不会再读取到旧值即可。 实现: Zookeeper 因果一致性所有过程必须以相同的顺序看到因果相关的操作。没有因果关系的并发写入可以被不同的进程以不同的顺序观察到。也就是说有因果关系的操作按照因果顺序读取到结果,没有关系的操作之间可能会乱序。 实现:依赖逻辑时钟实现。 参考jepsen
Ubuntu Destktop 22.04 禁用自动更新
Ubuntu Desktop 22.04 禁用自动更新Ubuntu 的自动更新并不稳定,之前的一次推送更新了内核版本,稳定性影响比较大,禁用自动更新的方法如下:1.在设置里禁用软件更新 2.关闭 unattended-upgrades如果只禁用上面的更新,unattended-upgrades 还是会在后台更新软件包,也需要禁止。 12345# unattended-upgrades 更新的内容可以在 /var/log/apt/history.log 里查看sudo systemctl status unattended-upgrades# 禁用自动更新sudo systemctl disable unattended-upgrades 禁用后查看结果如下,后续再查看 /var/log/apt/history.log 就不会有软件自动更新的日志了。 1234➜ ~ systemctl status unattended-upgrades○ unattended-upgrades.service Loaded: masked...
Narayana 事务回滚流程
Narayana 事务回滚流程当用户手动调用 connection.rollback() 回滚当前全局事务时,会走如下流程。 总体流程1234遍历每个 resource 执行 xa end; 执行 xa rollback;清理缓存 使用1234567TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启事务transactionManager.begin();// 执行 sql 语句// ...//...
Ubuntu Destktop 22.04 设置 ssh 超时时间
Ubuntu Destktop 22.04 设置 ssh 超时时间Ubuntu Destktop 22.04 使用 ssh 连接服务器时,发现一段时间不操作就会自动断开连接,解决方法如下: 打开 /etc/ssh/ssh_config 文件: 1sudo vim /etc/ssh/ssh_config 在文件最后添加: 1234# ssh 客户端会每隔 30 秒发送一个 KeepAlive 请求,保证终端不会因为超时空闲而断开连接ServerAliveInterval 30# ssh 客户端发送请求后,没有收到响应的次数达到指定次数后,才会自动断开连接ServerAliveCountMax 18
Narayana 事务恢复流程
Narayana 事务恢复流程总体流程123456789101112131415恢复线程轮询1.判断是否有任务要处理2.若有任务要处理,则处理 1.获取所有配置的 recovery modules 2.遍历recovery modules,执行一阶段处理 XARecoveryModule: 执行 XA recovery 命令从 RM 中获取 prepare 状态的 XID 数组并缓存 AtomicActionRecoveryModule: 从事务日志中,获取需要恢复的 XID 数组并缓存 3.遍历recovery modules,执行二阶段处理 AtomicActionRecoveryModule: 1.根据状态判断是否需要执行二阶段的 commit 或 rollback 2.清理事务 recovery 日志 XARecoveryModule: ...
Narayana 事务 Commit 流程
Narayana commit 流程整体流程123456789101112131415161718192021222324事务提交 判断是否能进行一阶段提交优化 若能一阶段提交 执行一阶段提交 否则 二阶段提交 prepare阶段 执行 xa end 执行 xa prepare xaResourceRecord 插入到 preparedList BasicAction#insertRecord 更新状态 ActionStatus.COMMITTING 保存状态,打包状态到 outputBuffer 里 XAResourceRecord#save_state...
Narayana 事务 begin 流程
Narayana 事务 begin 流程整体流程12345检查事务状态获取超时时间创建事务对象 事务对象设置到 ThreadLocal 中,和当前线程绑定 插入事务测超时时间监控 使用 API123TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启全局事务transactionManager.begin(); 调用链路123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869internal.jta.transaction.arjunacore.BaseTransaction#begin开启事务 ...
Narayana 事务资源注册流程
Narayana enlistResource流程XA 事务内每个物理连接执行第一条物理 sql 之前,需要执行 xa start 操作开启每个RM分支上的 xa 事务,并将 xaResource 注册到 TransactionManager 里。 整体流程12345678910transaction.enlistResource(xaResource) 执行 XA start xid 遍历 resource 判断当前是 isNewRM 创建 xid createRecord theTransaction.add(abstractRecord) record 添加到 BasicAction.RecordList 里 执行 xa start 语句,若失败重试 MysqlXAConnection#start 把 XAResource 缓存到 map 使用1234567// 获取 XADataSourceXADataSource xaDatasource =...