Nginx图片服务器的架构方案

图片服务有两种问题,一是存储问题,二是访问量问题。
存储问题就是硬盘容量问题,花钱买硬盘就能够了,看似简单,但着实也是最苦的问题。按目前探索来看,最好的方式是:在任什么时候刻遇到硬盘空间不够时,买颗硬盘插上,最多改改配置,就能马上利用;另外,硬盘要能充分利用,否则图片存储量大再加上备份,很恐怖,最好是每颗硬盘都用上100%的空间。
访问量也是个大问题,若是服务不容许防盗链,那么访问量会引发带宽、服务器压力等问题,有钱的话直接扔CDN,没钱或者有更多的钱,就本身作吧。根据垣古不变的真理“越老的图,访问量也相对较少”这一点,分红两大部分,一边处理最新的图片,一边处理老旧的图片。最新的图片访问量大,但存储量较少;老图片访问量低,但存储量大。
大概分析完了,开始制定方案。 linux

1、拟定一个存储目录规则:
在现有的/a/b/abcde.jpg这样的hash方式下多加一个日期的目录变成:/200810/16/a/b/abcde.jpg或者/2008/10/16/a/b/abcde.jpg。按日期制定这个目录规则后,就能够按年月来拆机器了。 nginx

2、分机器,分硬盘
按以前的计划,分红两个组,一组服务器用lvs作负载均衡负责新图片;另外一组服务器作旧图片访问和备份。新图机器找几台好点的服务器,SCSI硬盘;旧图机器没太大要求,PC机就行,找够硬盘就能够,如今IDE的1T硬盘也不太贵,最好再搭个raid就省事了,最主要是这些机器要多。 服务器

说明一下:
一、图片服务经过lvs做为入口,处理能力上仍是有保障的。 架构

二、利用nginx直接对外服务,没必要用squid。 负载均衡

三、图中的红线是指主nginx会将/2006和/2007年的图片分别代理到两台存档服务器,若是发现主nginx的cpu占用比较大,那么能够考虑使用nginx的proxy_store将图片存到主服务器上,按期清理。 ui

四、图中有一台存储分配服务器,做为图片服务更新图片的统一入口,有新图片或者修改图片的话,由这台服务器负责将图片放到正确的服务器上去。 spa

五、旧图片服务器当前用年份来划分,每一年增长两台服务器,亦但是加两块硬盘,注意,不要相信raid,必定要有两台机器,地理上分在两个城市则更好。 代理

六、由于旧数据2006和2007年的数据基本上是没有变化的,因此假如硬盘够大,那么能够把两年的数据合并在一块儿。 图片

七、若是细心定制,那么旧图片服务器的硬盘100%塞尽是能够的,旧数据的容量基本上不会大幅增加,小小预留1-2G空间就能够了。
使用这个架构的话,把去年的数据想办法迁到旧图服务器上,硬盘不够的话,加硬盘就能够了。若是图片量实在太大,主服务器连一年的数据都装不下,那能够用启用月份来划分;若是一个月都装不下了,那也太夸张了,那就启用日期吧;若是一天的数据都装不下,那就…… hash

相关文章
相关标签/搜索