图片服务器优化 解决流量和存储问题

图片服务一般数据容量较大,并且访问也频繁,鉴于此,图片服务就会有两种问题,一是存储问题,二是访问量问题。nginx

  存储问题就是硬 盘容量问题,花钱买硬盘就能够了,看似简单,但着实也是最苦的问题。按目前探索来看,最好的方式是:在任什么时候刻遇到硬盘空间不够时,买颗硬盘插上,最多改 改配置,就能马上利用;另外,硬盘要能充分利用,否则图片存储量大再加上备份,很恐怖,最好是每颗硬盘都用上100%的空间。服务器

  访问量 也是个大问题,若是服务不容许防盗链,那么访问量会引发带宽、服务器压力等问题,有钱的话直接扔CDN,没钱或者有更多的钱,就本身作吧。根据垣古不变的 真理“越老的图,访问量也相对较少”这一点,分红两大部分,一边处理最新的图片,一边处理老旧的图片。最新的图片访问量大,但存储量较少;老图片访问量 低,但存储量大。架构

大概分析完了,开始制定方案。负载均衡

1、拟定一个存储目录规则:ui

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

2、分机器,分硬盘图片

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

说明一下:图片存储

  1. 图片服务经过lvs做为入口,处理能力上仍是有保障的。
  2. 利用nginx直接对外服务,没必要用squid。
  3. 图中的红线是指主nginx会将/2006和/2007年的图片分别代理到两台存档服务器,若是发现主nginx的cpu占用比较大,那么能够考虑使用nginx的proxy_store将图片存到主服务器上,按期清理。
  4. 图中有一台存储分配服务器,做为图片服务更新图片的统一入口,有新图片或者修改图片的话,由这台服务器负责将图片放到正确的服务器上去。
  5. 旧图片服务器当前用年份来划分,每一年增长两台服务器,亦但是加两块硬盘,注意,不要相信raid,必定要有两台机器,地理上分在两个城市则更好。
  6. 由于旧数据2006和2007年的数据基本上是没有变化的,因此假如硬盘够大,那么能够把两年的数据合并在一块儿。
  7. 若是细心定制,那么旧图片服务器的硬盘100%塞尽是能够的,旧数据的容量基本上不会大幅增加,小小预留1-2G空间就能够了。

  使用这个架构的话,硬盘不够的话,加硬盘就能够了。若是图片量实在太大,主服务器连一年的数据都装不下,那能够用启用月份来划分;若是一个月都装不下了,那也太夸张了,那就启用日期吧;若是一天的数据都装不下,那就使用小时,依次类推。配置

相关文章
相关标签/搜索