在 Fly.io 上从 S3 切换到 Tigris

在 Fly.io 上从 S3 切换到 Tigris

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

作者在2024年2月将GiftyWeddings.com项目从Amazon EC2切换到Fly.io。Tigris的某人邀请作者试用他们在Fly.io上构建的与S3兼容的存储服务。作者成功切换文件到Tigris,并描述了Tigris的特性和差异。作者还提到了代码更改和文件复制的过程。作者对Tigris的性能和定价进行了评估,并提到了Tigris的免责声明和耐久性。总体而言,作者对切换过程和Tigris的表现感到满意。

🔎

延伸解读

迁移过程中的自动化与意外行为

在应用目录下运行 fly storage create 会自动设置环境变量并重新部署应用,作者认为这一行为过于“魔法”,可能引发意外停机,建议改为可选项。此外,自动设置的密钥无法直接查看,作者不得不创建新存储桶来获取凭证用于本地测试。这些细节提醒读者,在使用 CLI 工具时需留意其默认行为,并仔细阅读文档。

缓存策略差异与应对

Tigris 默认对文件设置 Cache-Control: max-age=3600,比 S3 的缓存更激进,导致重新上传同名文件后需强制刷新才能看到更新。作者通过为文件名添加内容哈希(如 {registryID}-{contentHash}.jpg)来解决,这符合基于内容的缓存最佳实践。读者若从 S3 迁移,需注意调整上传逻辑,避免缓存问题。

性能与定价的权衡

作者的非科学测试显示,Tigris 的下载速度明显快于 AWS S3,小文件从约 1 秒降至 300 毫秒,中等文件从 1.3 秒降至 600 毫秒,这得益于 Tigris 的全球默认架构和更近的边缘节点。定价方面,Tigris 存储为 $0.02/GB/月,GET 请求 $0.0005/千次,与 S3 相近,且提供 $150 免费额度。对于小型项目,成本差异不大,但性能提升显著。

测试版风险与耐久性考量

Tigris 在早期测试阶段建议避免用于生产工作负载,但作者询问后得知这更多是免责声明,实际按生产平台对待。作者对 Tigris 的耐久性存疑,不确定其能否达到 S3 宣称的 99.999999999% durability,并质疑该数字的实际意义。读者在采用测试版服务时,应评估数据持久性风险,并关注服务正式发布后的 SLA。

❓

Q&A

如何将文件从 Amazon S3 迁移到 Tigris?

使用 aws s3 sync 命令将文件从 S3 同步到本地,再同步到 Tigris 存储桶。例如:aws s3 sync s3://gifty-registry-images . 然后 aws s3 sync . s3://gifty-registry-images --profile gifty-registry-images。

Tigris 的缓存机制和 S3 有什么不同?

Tigris 默认发送 Cache-Control: max-age=3600 响应头,缓存更激进,上传新图片后需要强制刷新才能看到。而 S3 具有强读后写一致性,上传后立即获取新内容。

Tigris 的定价是怎样的?

Tigris 存储价格为每 GB 每月 $0.02,GET 请求每 1000 次 $0.0005。与 S3 类似(S3 存储 $0.023/GB/月,GET $0.0004/1000)。测试版还提供 $150 免费信用额度。

Tigris 的性能比 AWS S3 快吗?

是的,作者测试显示 Tigris 下载速度明显更快:小图片约 300ms(AWS 约 1s),中等图片约 600ms(AWS 约 1.3s)。因为 Tigris 默认全局,可使用最近的 Fly.io 区域(悉尼)。

Tigris 的“影子存储桶”功能是什么?

影子存储桶允许将 Tigris 存储桶指向原始 S3 存储桶,当文件在 Tigris 中缺失时,会自动从 S3 拉取并复制到 Tigris,实现无缝迁移。

使用 Tigris 时如何处理认证?

Tigris 为每个存储桶提供独立的密钥和秘密,需要为每个桶配置不同的凭证。作者为此添加了两个新的环境变量来分别处理图像和备份桶的认证。

Tigris 在测试版期间可以用于生产环境吗?

Tigris 在早期访问测试版中建议避免用于生产工作负载,但作者询问后得知这更多是免责声明,Fly.io 和 Tigris 都将其视为生产平台,风险存在但可接受。

🏷️

标签

➡️

继续阅读