Re: 关于beandb中存放图片的一点疑惑

151 lượt xem
Chuyển tới thư đầu tiên chưa đọc

Davies Liu

chưa đọc,
11:22:40 2 thg 5, 20112/5/11
đến beafuture, bea...@googlegroups.com
你好!

用 beansdb + nginx memcache module 的搭配是不错的, 我们目前也是这样使用的.

nginx 中可以用 add_header 模块来添加别的信息, 比如我们的配置如下:

    location ~ ^/(img|icon|[sbmlote]pic|rda)/ {
        default_type   image/jpeg;
       
        expires 1y;
        add_header Last-Modified "Wed, 21 Jan 2004 19:51:30 GMT";
        if ($http_if_modified_since) {
           return 304;
        }

        if ($request_uri ~ /download/ ){
            add_header Content-Disposition "attachment;";
        }

        set $memcached_key $uri;
        if ($uri ~ /img(/.*) ){
            set $memcached_key $1;
        }

        memcached_pass beansdb;
        memcached_next_upstream error timeout invalid_response;
        memcached_connect_timeout 300ms;
        memcached_read_timeout 3s;
        memcached_send_timeout 1s;
    }

beansdb 并没有处理热点数据问题, 只能依赖操作系统的缓存. 因此建议在nginx 之前, 
再加一层squid/varnish/nginx(proxy_store 或者 proxy_cache) 来处理热点数据的访问.

目前同时使用两套系统是非常明智的, 可以调整一下写入策略, 同时写入beandb和集中存储, 
nginx 中从 beansdb读取失败后再尝试集中存储. 同时可以在后台不断地向beansdb中导入数据.

如果部署一层缓存后能够解决大部分访问的IO问题, 那目前的容量可以部署两到三个对等的
beansdb来存储所有数据. 之后根据数据或者访问压力的增长再增加节点.

当一个节点中只存储了部分区间的数据时, 最好部署几个Proxy来简化访问. 
目前开源的版本中包含一个python实现的Proxy, 如果访问压力比较高, 
我可以把我们目前使用的Go实现的版本给你们试用.

希望beansdb 能解决你们的问题:)

Davies

2011/5/2 beafuture <beaf...@126.com>
刘先生你好!
      非常感谢douban能够开原beansdb。
      我们现在也有几百G的图片还在集中存储,访问压力比较大,经过再三考虑,最终想用beansdb + nginx memcache module的方式将图片缓存到beansdb集群中,用户请求时先查找beansdb,没有则去后端存储中查找并放入beansdb中,以此来减小后端集中存储的访问压力,之所以不充用集中存储,是因为我们的技术能力有限,害怕beansdb出了状况驾驭不了。但这种方案存在一个问题,想和您沟通一下,诺把图片存入beansdb,用nginx memcache (或php)可以取出,不过图片存入beansdb后时间属性丢失了,nginx将图片返回浏览器时,date 头是当前时间,其他缓存控制头都无法添加,所以无法被缓存服务器或浏览器缓存下来,造成很大带宽浪费,不知您是如何处理beansdb中图片缓存的问题的,望您指点一二不胜感激。




体验网易邮箱2G超大附件,轻松发优质大电影、大照片,提速3倍!



--
 - Davies
Bài viết đã bị xóa

Davies Liu

chưa đọc,
09:37:29 26 thg 11, 201226/11/12
đến Marlon Yao, beandb, beafuture
豆瓣的图片是在 nginx 里写死了的,
add_header Last-Modified "Wed, 21 Jan 2004 19:51:30 GMT";


2012/11/26 Marlon Yao <yaol...@gmail.com>
Last-Modified头是设死的?我看了douban返回的几个图片头部,似乎不是固定值。



--
 - Davies
Bài viết đã bị xóa

Davies Liu

chưa đọc,
02:44:41 27 thg 11, 201227/11/12
đến Marlon Yao, beandb, beafuture
是的。


2012/11/27 Marlon Yao <yaol...@gmail.com>
多谢,我看错了。beansdb是存了时间戳的,理论上是有可能扩展get接口,将时间戳,以及版本信息返回的。



--
 - Davies

Davies Liu

chưa đọc,
02:45:35 27 thg 11, 201227/11/12
đến Marlon Yao, beandb, beafuture
通过 get ?key 可以得到某个key 的 meta 信息,包括版本,大小,hash,时间等


2012/11/27 Davies Liu <dav...@douban.com>



--
 - Davies
Trả lời tất cả
Trả lời tác giả
Chuyển tiếp
Bài viết đã bị xóa
0 tin nhắn mới