优势

1  数据迁移方便,所有数据基于mongodb-grids存储,分布式配置,数据迁移等操作非常方便
2  mongodb 稳定性 可靠性 要比其他分布式文件存储性能更好
3  基于varnishd做缓存,有效解决了 从gridfs读取数据需要查询2次的问题,提高了性能
4  使用方便,代码行数寥寥无几,轻松搞定,各项配置也很简单
5  nginx-gridfs 插件可以基于nginx直接使用,无需再用php从mongodb中读取数据生成图片

=============================================

1编译安装php的mongodb扩展

https://github.com/mongodb/mongo-php-driver/downloads

下载最新版

$ cd mongo-php-driver
$ phpize
$ ./configure --with-php-config=/path/to/php-config
$ make
$ make install

2编译安装nginx &nginx-gridfs

https://github.com/mdirolf/nginx-gridfs

下载最新版

$ ./configure --add-module=/path/to/nginx-gridfs/source/
$ make
$ make install

3 安装varnishd

安装步骤 参见 http://lnmp.in/install-varnish

PHP测试gridfs写入

PHP:

$conn = new Mongo();  
$db = $conn->photo;   
$grid = $db->getGridFS();  


$data = file_get_contents("http://xxx.com/20120303/6f73/6a69/6d64597a/1330782227306.1400.467.467.jpg"); 
$id = $grid->storeBytes($data); 

var_dump($id);

nginx 的配置文件

server
{
    listen       8080;
    server_name  photo.com;
    index index.html index.php index.htm;

    location /photo/
    {
       gridfs photo field=_id type=objectid;
       default_type image/jpeg;
       mongo 127.0.0.1:27017;
    }
}

varnishd 部分配置

backend default {
 .host = "127.0.0.1";
 .port = "8080";
}

sub vcl_recv {
 if (req.http.host ~ "photo.com")
 {
   unset req.http.cookie;
   return (lookup);
 }

}

sub vcl_deliver
{
    set resp.http.Expires = "Sun, 17 Feb 2013 05:00:00 GMT";
    unset resp.http.X-Varnish;
    unset resp.http.Age;
    unset resp.http.Via;
    unset resp.http.Connection;
    set resp.http.Cache-Control = "max-age=2592000";
    set resp.http.Last-Modified = "Sat, 24 Dec 2011 01:24:34 GMT";
    if (obj.hits > 0) 
    {
       set resp.status=304;
    }
 }

启动varnishd

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1G   -a 127.0.0.1:80

本文仅仅是提供了一个示例,全部代码要自己根据情况修改哈~ 首次发文,请大牛拍砖

原文来自我的blog http://lnmp.in

我的微博 http://weibo.com/pojaaer 求粉~~~