我们公司有500万用户。我们存储用户的代码文件。用户可以编辑和添加他们的文件,就像web IDE一样,web IDE列出用户的文件。我们使用PHP函数来实现这些操作,例如readdir、file_get_contents和file_put_contents。我们使用MooseFS,但当我们读取程序中的文件时,特别是加载速度慢。
所以,我们需要更换文件系统,我希望有人能给我一些建议,我们有大量的小文件,应该使用分布式文件系统。
500万个条目对于一个关系数据库来说是很小的。我想知道为什么你觉得有必要将这些存储在文件系统中。
是否每个用户都要求在启动时加载所有文件?如果是的话,我想知道这个系统的设计。无论你如何设计,这个操作都是O(N)
如果将这500万个小文件放入一个关系数据库或NoSQL数据库,然后让每个用户连接到该数据库并查询他们想要的特定文件,那么就不需要在启动时重复加载它们。问题解决了。
在任何分布式文件系统中,当我们考虑对小文件进行操作时,最关键的方面之一是网络延迟——这种分布式文件系统组件之间的网络延迟应该尽可能小(比如0.1ms(。实现这一点的最佳方法是使用可靠的交换机,并将所有机器连接到同一个交换机。
此外,在分布式文件系统中(尤其是在MooseFS中(,最好的是可扩展性——这意味着,您拥有的节点越多(并且您的计算分布得越多,即在多个装载上同时完成(,集群就越快。
如果您使用MooseFS,请查看MooseFS3.0,因为自3.0版本以来,对小文件的操作有所改进。目前,这是一种简单的方法,因为您不必进行"革命"(在升级之前,请记住备份主服务器上的/var/lib/mfs,即元数据(。MooseFS可以很好地处理小文件,所以可能在配置方面有问题?
此外,在MooseFS中(仍在考虑小文件操作(,最重要的事情之一是具有高CPU时钟(如3.7 GHz(,具有少量CPU内核,并在BIOS中禁用主服务器的节能选项(因为主服务器是一个单线程进程(。Chunkserver和Clients的情况不同——它们是多线程的,所以在使用多核CPU时会得到更好的结果。
此外,如MooseFS最佳实践第4段所述。"虚拟机和MooseFS":
[…]我们不建议在虚拟机上运行MooseFS组件(尤其是主服务器(。
因此,如果您在虚拟机上运行MFS,实际上可能会产生较差的结果。