分布式一致性模型
发表于|更新于|Transaction
|浏览量:
分布式一致性模型
分布式一致性探讨的问题:由于分布式环境 CAP 理论的存在,当用户对数据发生读写操作时可能产生的结果。
线性一致性
所有操作被记录在一条时间线上,任意两个事件都可以比较先后顺序.
任何客户端一定读取到最新写入的数据(包括从其他客户端写入的)。
实现:
依赖全局时钟实现,保证所有操作记录在一条时间线上。
顺序一致性
多个写操作全局有序,单个客户端看到的写操作的顺序相同。
但是不保证各个客户端一定读取到最新值,只能保证一个客户端读取到写入的新值后,不会再读取到旧值即可。
实现: Zookeeper
因果一致性
所有过程必须以相同的顺序看到因果相关的操作。没有因果关系的并发写入可以被不同的进程以不同的顺序观察到。
也就是说有因果关系的操作按照因果顺序读取到结果,没有关系的操作之间可能会乱序。
实现:
依赖逻辑时钟实现。
参考
文章作者: flyingzc
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 flyingzc's blog!
相关推荐
2023-12-06
Narayana 事务管理器初始化流程
事务管理器初始化流程总体流程12345678910创建 TransactionManagerImple 创建事务管理器对象读取 narayana 的 xml 配置,进行属性赋值获取 recovery 模块 加载恢复模块事务恢复日志的初始化初始化事务日志存储服务 JDBC方式存储 建表 文件方式存储 创建 TransactionManager 流程Narayana 会通过 BeanPopulator 反射创建对应的 TransactionManager 实例,并读取用户自定义的 xml 属性反射赋值到 TransactionManager 实例里。 1TransactionManager transactionManager =...
2023-12-07
Narayana启动-注册恢复模块流程
Narayana启动-注册恢复模块流程使用代码12// narayana 在启动阶段使用如下 api 加载恢复模块XARecoveryModulexaRecoveryModule = XARecoveryModule.getRegisteredXARecoveryModule(); 总体流程1234567891011121314151617注册恢复模块 反射创建 RecoveryEnvironmentBean 配置信息实例 加载 RecoveryActivators 启动 RecoveryActivators 初始化 PeriodicRecovery 设置恢复状态 INACTIVE 设置恢复mode ENABLED 加载恢复模块,module包括: 1.com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule ...
2023-12-08
Narayana 事务 begin 流程
Narayana 事务 begin 流程整体流程12345检查事务状态获取超时时间创建事务对象 事务对象设置到 ThreadLocal 中,和当前线程绑定 插入事务测超时时间监控 使用 API123TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启全局事务transactionManager.begin(); 调用链路123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869internal.jta.transaction.arjunacore.BaseTransaction#begin开启事务 ...
2023-12-08
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 =...
2023-12-11
Narayana 事务 Commit 流程
Narayana commit 流程整体流程123456789101112131415161718192021222324事务提交 判断是否能进行一阶段提交优化 若能一阶段提交 执行一阶段提交 否则 二阶段提交 prepare阶段 执行 xa end 执行 xa prepare xaResourceRecord 插入到 preparedList BasicAction#insertRecord 更新状态 ActionStatus.COMMITTING 保存状态,打包状态到 outputBuffer 里 XAResourceRecord#save_state...
2023-12-12
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: ...