图片的奇怪Cache_MISS原因!

故障处理分析报告
                             
故障发生时间:2010年12月
业务类型:网站
故障名称:Squid不予缓存缩图程序处理过的静态图片
处理部门:运维部
造  成  影响:  大部分图片都是处理过的,造成大量Squid_cache_MISS,使后端服务器压力很大
故障描述: Squid不予缓存后端HTTP服务器缩图程序处理过的静态图片

原因分析:起初看到此故障,认为是squid的配置没有添加相关图片类型缓存策略导致的,加过添加相关图片类型缓存策略实测后还是不能起到缓存作用。查看curl -I 后端HTTP程序处理过和没处理过的图片信息,发现区别处理过的图片或符合程序触发条件的图片的head头缺少如下信息Content-Type, Cache-control,Content-length三个参数。分析HTTP服务器响应get需求时发送静态文件时会自动添加head信息,而处理过的图片都没加head头。再次查看其缩图程序的触发条件,发现不管是不是有生成过的图片都会触发程序执行,实际缩图程序处理过的图片为静态图,在触发条件后,被HTTP服务认为是动态程序,所以squid不予缓存,所以在程序后端添加head头的缺少部分后,squid识别到图片head头,确认是静态文件,正常进行缓存了。


处理措施:在程序后部添加head信息,包括Content-Type, Cache-control,Content-length三个参数。


备注及其他意见和建议:

1,HTTP服务器上触发程序的条件,从原来的简单触发修改成查询图片是否存在,存在就返回HTTP服务浏览请求 ,没有就执行图片缩图程序进行缩图。(查询图片是否存在,还是查询数据库比较快,或返回404也是可以,相比来说404会慢的多)

2,分开图片缩图程序到CMS系统中,把生成图片倒回页面目录。