分布式一致性模型
发表于|更新于|Transaction
|浏览量:
分布式一致性模型
分布式一致性探讨的问题:由于分布式环境 CAP 理论的存在,当用户对数据发生读写操作时可能产生的结果。
线性一致性
所有操作被记录在一条时间线上,任意两个事件都可以比较先后顺序.
任何客户端一定读取到最新写入的数据(包括从其他客户端写入的)。
实现:
依赖全局时钟实现,保证所有操作记录在一条时间线上。
顺序一致性
多个写操作全局有序,单个客户端看到的写操作的顺序相同。
但是不保证各个客户端一定读取到最新值,只能保证一个客户端读取到写入的新值后,不会再读取到旧值即可。
实现: Zookeeper
因果一致性
所有过程必须以相同的顺序看到因果相关的操作。没有因果关系的并发写入可以被不同的进程以不同的顺序观察到。
也就是说有因果关系的操作按照因果顺序读取到结果,没有关系的操作之间可能会乱序。
实现:
依赖逻辑时钟实现。
参考
文章作者: flyingzc
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 flyingzc's blog!
相关推荐
2025-09-11
Apache Ignite IDEA 环境搭建
Apache Ignite IDEA 源码 DEBUG 环境搭建Apache Ignite是一个高性能、集成化和分布式的内存计算平台,本文将介绍如何在 IDEA 中搭建 Ignite 源码调试环境。 Idea 代码编译Ignite 项目构建比较简单。使用 JDK 11,执行如下命令编译即可。 1mvn clean install -DskipITs -DskipTests --settings ~/.m2/settings.xml 参数说明: -DskipITs:跳过集成测试 -DskipTests:跳过单元测试 --settings ~/.m2/settings.xml:指定 Maven 配置文件路径 启动类Ignite提供了多种启动方式,可以通过以下主要启动类进行调试: org.apache.ignite.startup.cmdline.CommandLineStartup:命令行启动 运行事务测试要运行 Ignite 的事务测试示例,需要进行以下配置: 修改 ignite-examples/config/example-default.xml...
2025-09-18
Apache Ignite 分布式事务原理
Apache Ignite 分布式事务原理Apache Ignite 是一个高性能、集成化和分布式的内存计算平台,支持在大数据量场景下进行 SQL 查询、计算和事务处理。在本文中,我们将深入探讨 Apache Ignite 中分布式事务的实现原理。 使用示例首先,让我们通过一个简单的示例来了解如何在 Ignite 中使用事务: 12345678910111213141516171819202122// 启动 ignitetry (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { // 配置 CacheConfiguration<Integer, Account> cfg = new CacheConfiguration<>(CACHE_NAME); cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); // 创建缓存 try...
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 =...