我需要一个分布式文件系统,必须扩展到非常大的尺寸(最大约100TB)。文件大小大多在10-1500KB范围内,但有些文件可能达到250MB左右。
我非常喜欢像GFS这样的系统,它具有内置的备份冗余,这在统计上会使文件丢失成为过去。
我有几个要求:
我认真看待MogileFS,因为它确实满足了大部分要求。它没有任何托管客户端,但它应该是直接做Java客户端的端口。但是,没有内置版本控制。没有版本控制,除了MogileFS中内置的文件复制之外,我将不得不进行正常备份。
基本上我需要保护免受编程错误的影响,该错误会突然清除它不应该拥有的大量文件。虽然MogileFS确实保护我免受磁盘和通过在X个设备上复制我的文件导致机器错误,如果我进行无理删除,则不会保存我。
我希望能够指定删除操作直到Y天之后才真正生效。删除将在逻辑上发生,但我可以恢复文件状态Y天,直到它实际删除。此外,MogileFS无法在写入期间检查磁盘损坏 - 尽管如此,这可能会被添加。
由于我们是微软商店(Windows,.NET,MSSQL),我最喜欢在Windows上运行的核心部件,以便于维护,而存储节点由于许可而运行* nix(或组合)
在我考虑自己动手之前,你对我有什么建议吗?我还检查了HadoopFS,OpenAFS,Lustre& GFS - 但似乎都不符合我的要求。
答案 0 :(得分:1)
您是否绝对需要在自己的服务器上托管?您需要的大部分内容都可以由Amazon S3提供。延迟删除功能可以通过记录删除到SimpleDB表并定期运行垃圾收集传递以在必要时清除文件来实现。
如果您依赖单个互联网连接,仍然只有一个故障点。当然,你可以认为亚马逊自己是一个失败点,但失败率总是因为规模而低得多。
希望您意识到其他好处,即扩展到任何容量的能力。无需IT人员更换故障磁盘或系统。随着磁盘容量和带宽变得更便宜(当您购买的磁盘价值贬值),使用成本将不断下降。
还可以采用混合方法并将S3用作安全后端存档并在本地缓存“热”数据,并找到最适合您的使用模式的缓存策略。这可以大大减少带宽使用并改善I / O,尤其是在数据不经常更改的情况下。
缺点:
版本控制也是一种自定义解决方案,但可以使用SimpleDB和S3实现,以跟踪文件的修订集。总的来说,这确实取决于你的用例,如果这是一个很好的选择。
答案 1 :(得分:0)
您可以尝试在可靠的文件系统之上运行源代码管理系统。然后问题变成如何在超时后删除旧的检查。您可以使用DAV_SVN设置Apache服务器,它将提交通过DAV接口进行的每个更改。我不确定这会与你描述的大文件大小有多大关系。
答案 2 :(得分:0)
@tweakt
我也广泛地考虑了S3,但从长远来看,我认为它不会令我们满意。我们有很多文件必须安全存储 - 不是通过文件ACL,而是通过我们的应用层。虽然这也可以通过S3完成,但我们对文件存储的控制要少一点。此外,当我们执行文件操作时,延迟形式也会有一个主要的缺点 - 初始保存(虽然可以异步完成),但是当我们稍后读取文件并且必须对它们执行操作时。
至于SPOF,这不是一个真正的问题。我们确实拥有与数据中心的冗余连接,虽然我不需要任何SPOF,但S3可以接受的停机时间很短。
无限的可扩展性和无需维护绝对是一个优势。
关于混合方法。如果我们要直接从S3托管 - 除非我们想要在本地存储所有内容(并且只使用S3作为备份),否则当我们添加S3 + CloudFront时,带宽价格会非常陡峭(CloudFront将是必要的我们有来自各地的客户)。目前我们在欧洲的数据中心托管所有产品,我们在美国拥有自己的反向鱿鱼设置,以实现低预算的CDN功能。
虽然它非常依赖于域名,但对于我们来说,可交换性不是问题。我们可能会替换文件(即密钥X获取新内容),但我们永远不会对文件进行微小的修改。我们所有的文件都是blob。