如何组织数以百万计的静态文件在网上进行有效的服务?

我想创build一个服务,以服务数十万个较小的文件(从5kb到500kb,大部分在10-100kb左右)。 把它想象成一种gravatar.com,它可以在https://secure.gravatar.com/avatar/1545f91437e2576b910dbd1023a44756这些URL上提供这些小的头像图片

我想使用没有任何ID或散列的描述性URL,例如http://www.server.com/This-is-my-file.ext ,没有重复的文件名。

什么是最有效的方式来服务和组织的文件没有太多的开销?

只要将所有内容放在一个目录中并让nginx提供这些文件,就会在一定数量的文件(取决于文件系统)后变慢。

一个想法是基于文件名的第一个字符将文件保存在一个简单的目录结构中,所以这个例子将在T / H / This-is-my-file.ext中用nginxconfiguration中的一个简单的重写规则。 这会导致分配到不同目录的分配非常不均匀。 使用来自允许的值说,文件名的MD5哈希将导致良好的分布,但需要更多的计算能力…

我想这听起来像是一个关键的价值存储的完美的用例,但不是只有文件系统和nginx可以保持简单吗?

哈希文件名。

set_md5指令文档

# You can do this: # I didn't test this. location /hashed/([0-9a-f]{2})([0-9a-f]*)/(.*) { try_files /$1/$2/$3; } set_md5 $digest $request_uri; location / { rewrite .* /hashed/$digest/$request_uri; }