是否有任何商业 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 的效果更好。