我正在考虑构建一个使用类似算法的raid(磁盘)的程序。如果一台电脑死机。下一个将介入。在它的位置。它需要从 1 到 1000 台计算机进行扩展。
我需要一些建议。
我需要学习的算法的名称是什么?
在某一时刻,我认为可以在 git 之上构建它。
我正在考虑构建一个使用类似算法的raid(磁盘)的程序。如果一台电脑死机。下一个将介入。在它的位置。它需要从 1 到 1000 台计算机进行扩展。
我需要一些建议。
我需要学习的算法的名称是什么?
在某一时刻,我认为可以在 git 之上构建它。
您可能想阅读有关 Google 文件系统的这篇论文。从摘要:
我们设计并实现了 Google 文件系统,这是一个可扩展的分布式文件系统,适用于大型分布式数据密集型应用程序。它在廉价商品硬件上运行时提供容错能力,并为大量客户端提供高聚合性能。
试试Hazelcast。它具有 Set、List 等的分布式实现。Hazelcast 是队列、主题、映射、集合、列表、锁定和执行器服务的开源事务性、分布式/分区实现。使用起来超级容易;只需将 hazelcast.jar 添加到您的类路径中并开始编码。几乎不需要任何配置。
Hazelcast 是在 Apache 许可下发布的,并且还提供企业级支持。代码托管在Google Code上。
我已经看到提到过 Hadoop 和 Google 文件系统,但没有人特别提到HDFS - Hadoop 附带的分布式文件系统。您可以设置所需的冗余级别,并在不丢失数据的情况下丢失偶尔的节点。
一个警告:您需要确保拥有“namenode”(HDFS 集群中的主机和单点故障)的一台机器是可靠的——RAID 镜像、备份、工作。你失去了namenode,你失去了集群。
分布式哈希表突然出现在我的脑海中......
1)您可以使用分布式锁/互斥锁,如:
一种用于分散系统中互斥的 sqrt(N) 算法,作者 Maekawa:http ://portal.acm.org/citation.cfm?id=214445
Lubowich 和 Taubenfeld 关于基于锁的分布式同步的性能:http ://portal.acm.org/citation.cfm?id=1946155
2)或者您可以使用无锁链表,如下所示:
Fomitchev 和 Rupert 的无锁链接列表和跳过列表:http ://www.cse.yorku.ca/~ruppert/papers/lfll.pdf
Valois 使用比较和交换的无锁链表: http://portal.acm.org/citation.cfm?id= 224988
您可能想查看Appistry EAF。它是一个分布式执行平台。它为您处理所有任务的故障转移,因此您不必将其构建到您的代码中。如果一个节点发生故障,另一个节点会自动接管。与 Grid 不同,没有集中式控制器,您可以消除这些类型的解决方案的单点故障/瓶颈。
最多可免费下载 5 台机器。
比特流?:)
您可以构建类似memcached的东西。每个散列条目可以是一个文件块(例如块到内容的 SHA 散列)。