分布式事务-为什么我们将记录保存到文件系统?

下雪的

所有事务管理器(Atomikos,Bitronix,IBM WebSphere TM等)都将一些“事务日志”保存到“ tranlogs”文件夹中到文件系统。

当发生可怕的事情并且服务器崩溃时,记录有时会中断。他们需要一些手动恢复过程。

有人告诉我,仅通过清除损坏的tranlogs文件夹,我就有参与事务的资源状态不一致的风险。

作为一个“愚蠢的”开发人员,我对简单的概念感到更自在。想认为分布式事务管理应该类似于常规事务管理:

  1. 如果任何一方出了问题(网络,应用程序错误,超时),我希望整个多资源事务都不会在其中的任何部分提交。所有剩菜应早晚自动清理。
  2. 如果事务管理器失败(文件系统故障,电源故障)-我希望该TM下的所有事务都将回滚(显然在数据库超时级别)。
  3. 如果我不想进行任何自动TX恢复(无论意味着什么),则记录文件的存储是可选的。

问题

我为什么不能这样想?2PC有何复杂之处?

清除破损的记录时,确切的风险是什么?

如果我错了,我真的需要2PC文件系统状态的所有混乱。您是否对TX管理器实际上可以轻松轻松地破坏存储状态感到不舒服?

圭多·莱德斯

当我在1994年第一次面对现实中的两阶段提交(最初是在较大的Oracle7环境中)时,我有类似的初始反应。简直是不可能做到的,这真是令人毛骨悚然。但是回顾一下大学的算法书籍,很明显,对于2PC没有通用的解决方案。

例如查看如何在分布式环境中达成共识

当然,在许多特定情况下,可以更轻松地完成对事务的2PC提交的解析,从而更易于完成或完全回滚,并且影响较小。但是总的问题仍然存在,无法解决。

在这种情况下,交易经理必须在某个时候决定要做什么。交易不能永远保持开放。因此,作为最终解决方案,他们将始终需要返回到自己的交易日志,因为一个或多个其他方可能无法在当前和不久的将来可靠地传达状态。一些事务管理器可能更高级,并且知道如何更轻松地解决某些案件,但是最终回退的需求仍然存在。

我为你感到抱歉。修复它似乎通常与二进制逻辑中的“虚假意味着任何东西”相同。

总结

开启Why can't I think like this?What's so complicated about 2PC:参见上文。这个算法问题无法普遍解决。

On What are the exact risks when I clear broken tranlogs?:事务管理器具有一些支持它的数据库。在一般的关系数据库软件中,删除Translog是相同的问题。您会丢失有关正在进行的交易的信息。某些数据库平台仍然可以包含一些或大部分为整数的文件。有关背景知识和一些数据库理论,请参阅Wikipedia

关于Don't you feel sick about the fact that TX manager can actually break storage state in an easy and ugly manner?:是的,有时候当我不得不由团队来完成很多工作时,我真的很讨厌它。但是,这使我可以继续工作:-)

附加:是否为2PC

从您的加入中,我了解到您正在考虑是否在项目中包含2PC。

我认为您的里程可能会有所不同。我们公司将2PC作为政策:尽可能避免使用。但是,在某些环境中,尤其是在遗留系统和复杂环境中,例如在银行业中发现的这种情况无法解决。客户需要它,他们可能不愿意让您对其他基础设施组件进行重大更改。

当您必须做2PC时:做好。我喜欢软件和基础结构的干净架构,而且它是如此简单,以至于即使从现在起5年,它的工作原理都非常清楚。

对于所有其他情况,我们远离两阶段提交。从客户端到应用程序服务器再到数据库后端,我们都有自己的框架(Invantive Producer)。在此框架中,我们选择了在分布式环境中正常工作时牺牲ACID元素。应用程序开发人员必须照顾好例如原子性。通常,只需很少的努力就可以实现,甚至不需要考虑。例如,所有软件都必须安全才能重新启动。即使具有事务的原子性,这也需要一些思考才能在大规模多用户环境中很好地完成(例如锁定问题)。

通常,这种愚蠢的方法非常易于理解和维护。在需要执行两阶段提交的情况下,我们能够只替换框架上的一些插件并对客户端代码进行一些更改。

所以我的建议是:

  • 尽量避免使用2PC。
  • 但是很好地封装您的事务逻辑。
  • 无需完全重建即可执行2PC,而仅在需要的地方进行更改。

我希望这可以帮助你。如果您可以告诉我更多有关您的典型环境的信息(#tables中的大小,GB持久性数据中的大小,#concurrent用户中的大小,典型事务管理软件和平台),我可以做出一些补充或改进。

另外:2PC中的电子邮件和避免消息丢失

关于是否建议将DB与JMS结合:不,将DB与JMS结合通常没有多大用处;它本身将已经有一些数据库,因此事务日志中的原始问题。

关于您的业务案例:我了解每个事件都会从模板发送一封电子邮件,而传出邮件会作为事件注册在数据库中。

这是很难破解的。我一直喜欢进行安全审核,最容易评估的安全问题之一就是检查电子邮件的使用情况。

电子邮件-除了在大多数情况下(例如明信片)不保密和防篡改之外-没有其他措施也无法保证传递和/或阅读。例如,即使直接在您的邮件传输代理和收件人之间传递电子邮件,也可能在没有通知事务监控器的情况下发生数据丢失。当涉及多跳时,情况甚至更糟。例如,每个MTA都有其自己的排队机制,在该机制上可以放入“炸弹”,从而导致数据丢失。但是您也可以考虑垃圾邮件措施,错误的配置,邮件循环,意外按下删除文件等。即使使用2PC可以注册电子邮件的发送而不会丢失任何交易信息时,这也绝对不能说明电子邮件将完全到达甚至跨越第一跳。

我工作的公司为项目驱动型企业销售大型软件包。此程序包具有集成的排队机制,该机制还处理电子邮件事件。通常在当今大多数实施中都与Exchange结合在一起。几个月来,我们遇到了一个很好的问题:事务开始,打开了邮件通道,以MTA形式发送到Exchange的邮件,注册已处理该邮件...由于Oracle表空间已满,事务中止了。在下一次运行中,邮件再次传递到Exchange,再次中止,等等。现在,算法得到了增强,但是从这个简单的示例中,您可以看到,即使在某些端点上,也需要所有端点在2PC中进行协作在接收和显示您的电子邮件的组织中距离很远。

如果您需要采取措施来确保已发送或阅读电子邮件,则需要采取其他措施来补充它。请从文献中选择应用程序控件,用户控件和过程控件之一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分布式事务-为什么我们将记录保存到文件系统?

来自分类Dev

Hadoop分布式文件系统与分布式缓存

来自分类Dev

通过分布式应用程序系统端到端地跟踪事务

来自分类Dev

什么是分布式缓存?

来自分类Dev

什么是分布式缓存?

来自分类Dev

如何创建分布式文件系统

来自分类Dev

锁定分布式系统中的文件

来自分类Dev

带分布式系统的CAP

来自分类Dev

同步分布式系统中的动作

来自分类Dev

分布式系统中的投票协议

来自分类Dev

在分布式系统上编译并运行

来自分类Dev

Berkeley算法-分布式系统

来自分类Dev

同步分布式系统中的动作

来自分类Dev

分布式系统中的IP地址

来自分类Dev

分布式存储大量文件

来自分类Dev

Hadoop中的分布式文件处理?

来自分类Dev

如果我们对C + A分布式系统进行分区怎么办?

来自分类Dev

Apache Drill嵌入式和分布式系统

来自分类Dev

Apache Drill嵌入式和分布式系统

来自分类Dev

实体框架强制分布式事务

来自分类Dev

分布式事务的最佳实践(java)

来自分类Dev

分布式系统中的CRDT是什么?

来自分类Dev

分布式系统中的大使概念是什么?

来自分类Dev

分布式系统中的大使概念是什么?

来自分类Dev

适用于Linux的分布式文件系统

来自分类Dev

OpenBSD中是否有任何分布式文件系统?

来自分类Dev

Dropbox是否被视为分布式文件系统?

来自分类Dev

Opensolaris是否提供分布式ZFS文件系统

来自分类Dev

如何将scikit-learn仿真器结果留在分布式分布式系统中?