![IaaS 对象存储(S3/Azure Blobs)上的重复数据删除和成本节省](https://linux22.com/image/695699/IaaS%20%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%EF%BC%88S3%2FAzure%20Blobs%EF%BC%89%E4%B8%8A%E7%9A%84%E9%87%8D%E5%A4%8D%E6%95%B0%E6%8D%AE%E5%88%A0%E9%99%A4%E5%92%8C%E6%88%90%E6%9C%AC%E8%8A%82%E7%9C%81.png)
是否有任何商业 IaaS 对象存储(S3、Azure Blob 等)可以避免因存储重复数据(相同文件或文件的部分内容)而多次收费?例如,我们有一个 15 TB 的推文数据集,我们团队中的一个人想要复制一份,然后对数据进行一些修改。我们会为 30 TB 的存储付费吗?
有没有好的方法可以在这些大型对象存储中找到重复的块,或者就地压缩大型数据集?我们可以用某种符号链接替换重复的文件吗?
答案1
存储提供商(至少是 AWS、Google 和 Microsoft)不对 blob 对象进行重复数据删除和/或压缩。这会导致不可预测的延迟、抖动增加和 RAM 消耗增加。并不是说在这种情况下不可能实施良好的计费策略,而且跨多个服务器/可用区域删除重复对象是一个巨大的技术挑战。
您可以在自己的终端上实现压缩。重复数据删除比较困难,因为您需要维护带有哈希表等的中间件。
另一种方法可能是使用虚拟文件系统在您的 EC2 实例上,而不是 S3 上。您可以附加 EBS 卷并将其挂载为 ZFS 卷,ZFS 具有内置的压缩和重复数据删除功能。如果您需要在多个 EC2 实例上使用这些文件/对象,您可以随时将 ZFS 导出和导入为 NFS 共享。再一次,重复数据删除需要额外的 RAM。
答案2
您可以使用现场重复数据删除,这可以通过一些备份解决方案来执行,Veeam例如https://www.veeam.com/hyper-v-vmware-backup-deduplication-compression.html并将重复数据删除后的数据推送到云端,从而节省网络带宽。当及时恢复至关重要时,此功能非常有用。
目前,我们的生产环境中运行着大量 VM,并且使用了 Veeam 和 Starwind,所以我认为情况类似。还测试了其他解决方案,例如 MS DPM 和 Backup Exec,但 Veeam 的效果更好。