如何在网站上有效地存储和提供大量小图像?

时间:2010-03-09 22:55:08

标签: configuration scalability lamp

在我的网站上,我想为用户提供一个包含大量小图片的页面,有点像Windows中的缩略图。
所有图片的大小从1KB到300KB不等,但通常不超过5KB。

目前所有这些图像都位于Web服务器(linux + apache)的文件夹中,但我不认为这是最佳解决方案,特别是如果我必须扩展到多个Web服务器以及何时我会有成千上万的。

那么,我是否应该将这些文件放在数据库中(我可以)吗?或者有一个单独的文件服务器?其他建议?

2 个答案:

答案 0 :(得分:4)

需要考虑的一些事项:

  • 除非可以将图像保存在内存中,否则不要将图像放在数据库中。普通文件通常是二进制数据的完美解决方案,您仍然会为每个文件发出单独的HTTP请求。
  • 如果您可以镜像多个服务器上的图像并在它们之间取得平衡,那就太棒了。
  • 如果您没有额外的服务器,请尝试使用虚拟子域伪造它以规避并发连接限制。见this article。与此相关:将图像分布在子域中的每个页面上,每个子域上有2个或更多。
  • 不要试图压缩流量。你只会浪费CPU时间。
  • 确保您对静态图像使用正确的缓存(例如,远期的Expires)。如果图像已更新,您随时可以更改地址。
  • 确保您提供来自无Cookie(子)域的所有静态内容。

答案 1 :(得分:1)

您希望尽可能少地占用CPU时间/图片。我建议使用代理服务这些图片(作为静态内容)。我对nginx有很好的经验,它很快可靠。

您的配置可能看起来像这样

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  300;

    server {
        listen       8080;
        server_name  localhost;

        location /static/ {root static/pictures/;}

        location / { proxy_pass http://127.0.0.1:8081; }
    }
}

如果您的服务器位于端口8081上,并且直接从文件夹/ static / pictures中提供图片。 (请注意,所有以'/ static'开头的网址都将从此文件夹中提供。)