我正在开发一个在 Amazon S3 上存储文件的 Java 服务器。我需要使用 S3 进行事务管理,这样如果对外部服务器的操作失败,则必须回滚保存到 S3 的每个文件。
它基本上就像对数据库的事务管理,只是在这种情况下数据源是 AWS S3,它也可能是文件系统。
我无法找到现有技术,想知道我是否只需要实现它,或者已经存在相关的库/技术。
提前致谢。
最佳答案
没有任何开箱即用的方法来实现事务管理;因此您可以自己手动编写逻辑和实现代码。
与 S3 相比,您拥有的一个优势是,您永远不会遇到脏读或脏写。 S3 将始终为您提供完全处理的文件 ( blob ),即使它当前正在写入。这种减少了在关键部分、锁定等方面的努力的负担。它直接由 AWS 支持。
所以我建议的Transaction流程的实现方式是
- 执行初始流程并调用服务器/服务(如您所述)
- 如果一切正常,则将数据推送到 S3
- 如果数据调用/处理失败,您将什么都不做
另一种选择是将数据推送到S3,如果在回滚交易需求的情况下,您可以删除S3 key
这听起来可能很微妙,但事实并非如此,问题范围很广。
关于Java 通用事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403633/