GemFire 分布式事务.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GemFire 分布式事务

GemFire 分布式事务 GemFire 中国社区发起人 — 杨旭钧 分布式系统中的事务 对于分布式Region来说,数据经常跨多个缓存节点分布,但是事务只在一个缓存节点管理,因此可能多个region会参与到一个事务中。 事务操作首先作用在数据主拷贝节点,然后分布到其他成员,而不考虑是哪个成员先开始的缓存操作。 运行事务代码的成员被称为事务初始化器. 管理事务和数据的成员被称为事务数据节点 事务数据节点可能是事务初始化器也可能不是。当事务提交时,事务数据节点发布这份数据到其他节点。 分区区域的事务 如下图所示: M1运行着两个事务,T1和T2。 T1作用在M1的Y数据上, 因此M1既是事务初始化器也是事务数据节点。 T2作用在M2的X和W数据上 ,因此M1是事务初始化器,M2是事务数据节点。 事务在数据节点上管理,包括事务视图、所有操作、 所有本地缓存事件处理,当T2被提交时,M2的缓存 被更新,事务事件跨系统来分布,好像此事务源于M2。 分布式系统中的事务 复制区域的事务 对于复制区域,事务和其操作被应用到本地成员,然后事务的状态被发布到其他成员,而数据如何传播,则根据region的属性设置。 local—非分布式, 在本地处理事务冲突. 与partitioned region不兼容 distributed-no-ack—本地处理事务冲突, 成员之间缺乏协调. distributed-ack—即在本地处理事务冲突,又在成员之间处理事务冲突 事务工作原理 Transaction view 在并发访问缓存的时候,事务之间是隔离的。每一个事务都有自己的私有视图,包括已读取的条目和其变更。当一个数据条目进入事务的时候,将在事务视图上生成一个数据状态的快照,此事务能够保存数据的原有状态,快照的另外一个用处是在提交阶段恢复写冲突。此事务维护着当前条目的视图,用来在事务中做出的变更。 当提交成功时,在事务视图中记录的变更被合并到缓存上。如果提交失败或者事务回滚,所有的变更都将丢弃。 当事务提交时,事务管理系统使用“two-phase commit protocol”: 通过驻留线程, 预留事务中所有的变更条目(对于分区区域,在事务运行的数据节点上做预留) 在受影响的键上检查缓存,确保所有的数据条目都处于相同的状态。 如果有任何冲突,管理器回滚事务 如果没有冲突,管理器则执行如下步骤: 调用TransactionWriter,将事务更新写到本地缓存, 传播更新到其他成员。在更新的缓存上,调用CacheListener, 在事务运行的成员上调用TransactionListener。 3. 在条目上释放事务预留 管理器更新本地缓存,以非原子方式发布更新到其他成员。 如果其他线程读取事务正在修改的键,他们可能是在预处理 或者后处理的状态来查看。 如果是其他线程要修改事务正在修改的键,这个变更可能和事务 更新混合在一起。当事务提交之后,此时事务处理的结果可能和 原有的预期不一致。 distributed-ack scope distributed-ack scope 事务事件 事务处理过程中 当事务在运行时,每一个事务的操作都被传递到CacheWriter,如果操作在事务之外,CacheWriter则丢弃此操作。 CacheWriter的每一次操作都被应用到缓存上的事务视图上,进入到TransactionEvent对象的CacheEvent列表中。 事件合并 缓存事件被合并,如果一个键已经有了一个事件,则此事件被移除,同时当前的操作被添加到列表的末尾。 如下所示: Region.create (A, W); Region.put (A, valX); Region.put (B, valQ); Region.invalidate (A); Region.put (A, valY); 所产生的事件被存储在CacheEvent列表。 事务提交 当事务被提交时,Gemfire传递Transaction Event到Transaction Writer上。 在提交之后: Gemfire传递Transaction Event到Transaction Listener。 遍历Cache Event列表,为每一个操作调用所有的Listener。 分布TransactionEvent到所有感兴趣的缓存。 事务的核心类 com.gemstone.gemfire.cache CacheTransactionManager—管理缓存中事务和的事务应用补丁. TransactionEvent—在事务中所做的操作. TransactionId—全局唯一的事务标识符. TransactionWriter—在提交之前调事务应用. 通常情况下,用于同步后台的数据源. Tra

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档