• 浅谈Squid在图片存储架构中的应用
    时间:2012-03-20   作者:王国峰   出处:互联网

    将近快一个月没写文章了,太懒散了,今天振作了一下,写了篇关于Squid的文章,Squid作为分布式代理缓存服务器真的非常的棒,希望本文对你有帮助。

    前言

    上一篇我表明了自己对缓存的立场:缓存一切可以缓存的资源。并讨论了如何利用IIS自身的缓存功能来轻松满足中小规模的图片缓存需求。关于IIS的客户端缓存和服务器端缓存的介绍大家可以回顾这篇文章。自从上一篇文章发表后,有不少朋友向我反馈:用IIS自身的缓存功能负载有限,建议使用Varnish或Squid。是的,我非常同意,所以我今天就和大家来探讨一下分布式代理缓存服务器Squid在图片存储架构中的应用,文中的一些观点,如有错误,敬请指出,谢谢。

    squid简介

    Squid是一款高性能分布式代理缓存服务器,它一般用来做前置Web Cache,加快用户访问Web的速度。为了说明其运行过程,我将仍旧沿用我前一篇的YD风格,再一次请出人见人爱、花见花开、车见爆胎的空空老师,请读者自觉送出掌声:
    Squid君是时下最受欢迎的空空作品代理人,为了让所有空空迷能更快捷地欣赏到高质量的空空作品,Squid君天天加班加点,整理和保存空空的最新作品,并对其作进一步的优化处理,比如去码。
    有一天,我无聊至极,便打电话给Squid君,向他要最新的空空写真图(向Squid发出下载请求);
    Squid君仔细辨别了一下我的声音,发现是老朋友,于是便答应了我的请求(Squid中的ACL访问控制,只接受合法的请求);
    Squid君对我说他手头刚好有一周前的空空写真,问我看过没有,我说发过来看看呗,于是他很快发给了我(Squid缓存命中,下载极快,哦耶!);
    我收到写真图,发现是两天前已经看过了的,于是告诉Squid君要最新的,Squid君看了看库存,发现手头没有最新的了,于是就说让我等一会儿,他去问问其他的代理兄弟有没有,我说好的,谢谢(Squid支持分布式集群方式,各个父子节点、兄弟节点之间的缓存数据可以互相同步);
    结果空欢喜一场,他回来和我说其他兄弟也没有,当我非常失落的时候,他突然说空空今天来杭州,他可以直接向空空要写真,我一开心就对他说,快去快去(当Squid缓存不命中时,只能从源服务器获取数据);
    过了好久,Squid君回来了,他说见空空的人实在太多了,排了好久的队才拿到她最新的写真图呢,我谢过之后他就把写真很快地发给了我。之后他说他一定要把这个写真保存起来,以便提供给其他空空迷和其他兄弟代理(Squid会把从源服务器获取的数据保存到自己的缓存中,如果下一个用户提出同样的下载请求,Squid直接把缓存中的数据给用户,当然也可以把数据奉送给其他兄弟代理,独乐乐不如众乐乐)。
    到这里,我相信你已经大概明白Squid的工作过程了吧,下面我就对Squid特点做一下简要概括:
    1、开源,基于GNU通用公共许可证,意味着你可以在同等开源协议下使用和修改Squid。
    2、支持多种协议,目前支持http、ftp、gopher、wais、ssl等网络协议。
    3、支持分布式集群,Squid使用TCP(HTTP)和UDP(ICP/HTCP)通讯来确定邻居cache的状态。
    4、支持访问控制,通过设置ACL和ARL来限制某些访问。

    Squid官方网站:http://www.squid-cache.org/
    你可以在官网上下载Squid以及阅读相关文档,当然接下来我也会用Chinese向大家介绍Squid的用法。

    Squid配置详细说明

    下面是一份详细的Squid的配置清单及其说明:
    ###########################################

    #http_port指令告诉squid在哪个端口侦听HTTP请求。默认端口是3128,除下面的形式外,也可以是http_port 192.168.63.50:3128
    http_port 3128
    icp_port 3130
     
    #缓存目录的设置,可以设置多个缓存目录,语法为:<cache_dir> <aufs|ufs> <目录所在> <MBytes大小> <dir1> <dir2>
    cache_dir ufs /var/spool/squid 1000 64 1024
     
    #下面是关于日志文件的放置目录与文件名!
    cache_access_log /var/log/squid/access.log
    cache_log /var/log/squid/cache.log
    cache_store_log /var/log/squid/store.log
    pid_filename /var/run/squid.pid
     
    #关闭认证机制,有些版本的 squid 会自动的加入代理认证机制,而普通情况下是不需要的,故找到包括auth_param的行,给它们加上注释
    #auth_param basic children 5
    #auth_param basic realm Squid proxy-caching web server
    #auth_param basic credentialsttl 2 hours
     
    #设置squid用户及用户组、管理员账号
    cache_effective_user squid
    cache_effective_group squid
    cache_mgr youraccount@your.e.mail
     
    # 与内存有关的配置:因为我的系统内存很小,所以只给 8 MB!如果您的物理内存很大的情况下,例如 512 MB,可以考虑加大到 64 或 128 MB。
    cache_mem 128 MB
     
    # 与磁盘容量有关的配置(注:下列的 90 与 95 是百分比 ),如果您的 cache_dir 所在磁盘很大时,可以考虑将 4096 改成 32768 KB
    cache_swap_low 90
    cache_swap_high 95
    maximum_object_size 4096 KB
     
    # 与内存保存资料有关的配置
    maximum_object_size_in_memory 8 KB
     
    #定义acl(访问控制列表), 语法为:acl<acl> <acl名称> <acl类型> <配置的内容>
    #黑体为用户自定义部分
     
    acl All src 0/0
    acl Manager proto cache_object
    acl Localhost src 127.0.0.1/32
    acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
    acl SSL_ports 443 563
    acl CONNECT method CONNECT
    acl MyNetwork src 192.168.0.0/16
     
    #利用前面定义的acl,定义访问控制规则
    http_access allow Manager Localhost
    http_access deny Manager
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow MyNetwork
    http_access deny All
     
    #定义与其它代理服务器的关系,语法: <cache_peer> <主机名称> <类别> <http_port> <icp_port> <其它参数>
    cache_peer 192.168.60.6 parent 4480 7 no-query default
     
    #设置与其它代理服务器的关系:
    # <cache_peer_access> <上层 Proxy > <allow|deny> <acl名称>
    #cache_peer_access 192.168.60.6 allow aclxxx
    #cache_peer_access 192.168.60.6 deny !aclxxx
     
    coredump_dir /var/spool/squid

    ###########################################
    注意:以上的配置说明来自这里。
    配置好以后,我们就可以启动squid了,启动的步骤如下:
    1). 我们可以运行下面的命令来检查配置文件的正确性:
    # squid -k parse
    只有这一步正确你才可以进行下一步的操作
    2). 初始化cache目录.即建立缓存目录的存储格式
    只需在第一次启动squid服务之前执行(在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录。)
    # squid -z
    cache目录初始化可能花费一些时间,依赖于cache目录的大小和数量,以及磁盘驱动器的速度。假如你想观察这个过程,请使用-X选项:
    # squid -zX
    3). 启动squid服务
    # service squid start
    假定squid安装在/usr/local/squid目录下,也可以
    # /usr/local/squid/sbin/squid -sD
    最后,我推荐你去看看Squid权威指南,并希望你可以利用Squid成功搭建一个分布式图片缓存系统,Squid真的很棒!

    转自:http://www.itivy.com/ivy/archive/2012/3/10/squid-usage.html

    网友留言/评论

    我要留言/评论

    相关文章

    运维必须要知道的几个 Linux 服务器监控命令:如果你是个运维管理同学,如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。
    SMTP的相关流程和命令介绍:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
    基于Facebook和Flash平台的应用架构解析(三):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    基于Facebook和Flash平台的应用架构解析(二):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    基于Facebook和Flash平台的应用架构解析(一):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    由12306.cn谈谈网站性能技术:12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西)
    百万级PHP网站架构工具箱介绍:Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,今天我们就来了解一下该站点的架构技术。
    memcacheq队列服务安装与原理:  Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    Nginx + PHP-FPM + APC=绝妙的组合:本文将介绍目前让PHP最快的方法:Nginx + PHP-FPM + APC,看似有些复杂,实际上我们只需要几个步骤就可以完成,并且性能远超Apache,有兴趣的朋友不妨去试一试。
    Facebook图片存储架构技术全解析:Haystack提出了一种通用的基于HTTP的对象存储,它含有指针,映射到存储对象。在Haystack中以指针储存照片,把数以十万计的图像聚集到一个Haystack存储文件,从而消除了元数据负荷。这就使得元数据的开销非常小,并且使我们能够在存储文件和内存索引中存储每个指针的位置。这就使得能用少量的I/O操作来完成图像数据的检索,可以消除一切不必要的元数据开销。