如果一个人有一个可以查询的点对点系统,人们会愿意
- 减少网络上的查询总数(通过广泛分发“流行”项目并将“相似”项目放在一起)
- 避免每个节点存储过多
- 在遇到客户端停机、硬件故障和用户离开的情况下,即使是中等稀有的元素也能确保良好的可用性(可能为文件管理员/历史学家检测稀有元素)
- 避免在网络分区时查询无法找到匹配项
考虑到这些要求:
- 有任何标准方法吗?如果没有,是否有任何受人尊敬的实验性研究?我熟悉一些分配方案,但我还没有看到任何真正解决学习鲁棒性的问题。
- 我是否遗漏了任何明显的标准?
- 有人有兴趣研究/解决这个问题吗? (如果是这样,我很乐意开源我这个周末组装的一个非常蹩脚的模拟器的一部分,并且通常提供无用的建议)。
@cdv:我现在已经观看了该视频,它非常好,虽然我不认为它完全达到了可插入的分发策略,但它绝对是 90% 的方法。然而,这些问题强调了这种方法的有用差异,解决了我的一些进一步的担忧,并为我提供了一些后续引用。因此,我暂时接受您的回答,尽管我认为这个问题是开放的。
最佳答案
有多个系统可以满足您所寻求的不同方面,并且每个系统都会做出不同的妥协,包括但不限于:
亚马逊的 Dynamo:http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf
凯:http://www.slideshare.net/takemaru/kai-an-open-source-implementation-of-amazons-dynamo-472179
Hadoop:http://hadoop.apache.org/core/docs/current/hdfs_design.html
和弦:http://pdos.csail.mit.edu/chord/
hive :http://www.cs.cornell.edu/People/egs/beehive/
还有很多其他的。按照这些思路构建自定义系统后,我也以开源形式发布了一些构建 block :http://code.google.com/p/distributerl/ (这不是一个完整的系统,而是一些可用于构建系统的库)
关于language-agnostic - 如何在点对点系统中增强但最低限度地分发项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37296/