如何在 postgresql 中一致地跟踪 BackBlaze 预签名文件上传引用

问题描述 投票:0回答:1

我在使用预签名 URL 将文件存储到 BackBlaze 并在 PostgreSQL 中跟踪上传的文件引用时遇到了问题。我面临的主要问题是 BackBlaze 在预签名上传完成时没有像 S3 或 minio 这样的事件。如何在 PostgreSQL 中查明文件是否已成功上传并将其标记为已上传。请问有人能给我一个高层次的想法来实现这个吗?另外,我提前使用了 Backblaze 的 s3 兼容性 API

提前感谢您的帮助。

现有系统依赖于客户端发送上传完成确认。在某些情况下,这会失败并在 BackBlaze 中留下悬空文件,在 PostgreSQL 中留下孤立记录。

amazon-s3 file-upload architecture synchronization backblaze
1个回答
0
投票

这是一个非常常见的最终一致性问题,最好通过事后清理流程来解决。

这里有两个不同的问题:

  1. BackBlaze 中的悬空文件:这可能最容易通过清理孤立文件的协调过程来解决。根据紧急程度,您可以让它随时运行,清理数据库中没有相应记录的文件。
  2. PostgreSQL 中的孤立记录:您可以在此处采用两阶段提交方法。您可能会陷入基于客户端的回调来确认文件,但是通过对服务器进行两次回调,一旦客户端完成上传,您就可以拥有第二个“确认”字段,您将在其中更新行以确认上传。这样您就可以轻松删除在清理过程中从未确认的行。如果您在回调时遇到问题,您可以随时让进程检查目标并查看文件是否在删除行之前结束在那里。

如果您需要真正的事务一致性,您将需要一个更昂贵的过程,您需要为数据库服务器端打开一个事务并等待文件上传完成。棘手的部分是重新连接到该事务,这肯定是第二个客户端调用。如果您无法使用上述清理过程来实现最终一致性,我建议您放弃预签名 URL 并在服务器端上传文件,以便可以在数据库事务内上传文件。尝试将两个不同的请求连接到同一连接/事务是可能,但相当困难。

© www.soinside.com 2019 - 2024. All rights reserved.