- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 百蕊草半寄生机制的研究.pdf VIP
- 百蕊草种子适宜萌发条件的研究.PDF VIP
- 风险识别的方法培训.ppt
- 中国燕麦草项目经营分析报告.docx
- 常用DOS命令大全电脑资料PPT.pptx VIP
- 20J333 建筑防腐蚀构造(高清带书签).pdf VIP
- 腾讯音效设计师岗面试题库参考答案和答题要点.docx VIP
- GRB2在EEF1A2促胰腺癌发生、发展中的关键作用与机制研究.docx
- 统编版道德与法治一年级上册第14课《人人爱护公物》教学设计.docx VIP
- GZ-2022062 健康与社会照护赛项正式赛卷完整版包括附件-2022年全国职业院校技能大赛赛项正式赛卷.docx VIP
原创力文档


文档评论(0)