任何build议如何我可以从1台服务器分配数以百万计的文件到X数量的其他服务器? 我正在寻找更多的关于如何决定哪个服务器发送文件的algorithm。
要求:
也许看看像GlusterFS这样的分布式文件系统。 这听起来像是会满足你所有的要求,而且可能比你自己破解的东西更可靠。
尽pipe你的要求不可行,但根据我为Github做的这些经验,我将会为将来不会受到束缚的其他人写下我的想法。
基于哈希分布在多个位置(分区,机器,数据中心)的数据是一项危险的工作,原因有二:
另一方面,查找所有文件的表格会导致这些问题消失。 当你说“没有数据库”,我打赌你在“数据库”之前插入一个隐含的“SQL”。 但是,还有一个与SQL无关的其他数据库世界,对于这种情况来说是非常完美的。 他们被称为“关键价值商店”,如果你不愿意继续打造自己的boondoggle,那么我强烈build议使用一个(我有Redis的经验,但他们都看起来很漂亮合理)。
但是,最终,如果你继续使用“所有的哈希,所有的时间”系统,然后解决它所固有的问题(有解决scheme,而不是真正的真棒),所有你最终将会这一天是GlusterFS的一个半分类,非结构化,非function完整的版本。 如果你需要大量的存储空间,随着时间的推移,分布在多个物理机器上,在一个单一的命名空间,我真的会推荐它,你可以build立自己的任何东西。
如果你仍然想破解它,请在每个文件上执行md5sum,然后将输出散列到X框中。
如果你有两个框:
0 * -7 *去框一个8 * -f *去框二…
或者如果你有256个盒子:00 * -0f *去盒子一个10 * -1f *去两个盒子..等等..
(2,4,4,6,…)
请记住,洗牌的事情都很好,但是如果你还需要检索这个信息,你会希望保留一个索引。
(我把foo.txt放在哪里?
一个平面文件泡菜(在Python中)可以工作,但不会像大数据量的数据库那样扩展。
其他服务器也可以发送文件吗? 你在“安全”的环境?
Rocks集群的安装过程必须填充机架后的计算节点,每个安装在一个初始映像上。 做到线性或通过一台服务器将是一个瓶颈。 Rocks使用了一个名为Avalanche的小系统,在这个系统中,安装映像是使用p2p来提供的; 随着节点的出现,它们也成为将用于安装新节点的服务器。 结果是一个服务器树,安装图像很快地通过机架级联。 整体延迟是节点数量的对数,乘以安装一个节点的时间(对数的基数取决于可以从已经安装的节点中提供多less个其他节点,基准日志20不会令人吃惊…)。
你可以想象一个类似的策略来复制你的文件,但只有当目标服务器愿意信任其他服务器的副本。