zoukankan      html  css  js  c++  java
  • CDN网络(二)之配置和优化CDN核心缓存软件--squid

    前言

    squid是众多CDN厂商使用的核心缓存软件,都在已有的基础上进行二次开发。在部署squid的时候,建议遵循下面的规范。

    1. 使用大内存服务器

    对于热点文件,我们让squid用内存缓存,这样大大提高响应速度,访问日志access_log中体现为TCP_MEM_HIT。我们一般都是64g内存以上的服务器。

    2. 推荐每个磁盘单独使用

    对于仅次于热门文件的文件,我们采用磁盘缓存,squid是基于磁盘缓存的,不需要把磁盘设置成RAID 10 or RAID 5之类的,通过cache_dir配置使用每个独立磁盘进行 缓存以提高磁盘iops,配置参数如下:

    cache_dir   ufs   /mnt/sdb1 8096 32 256
    
    3. 禁用atime更新

    使用noatime,nodiratime来挂载文件系统。这样在读取磁盘缓存的时候不会更新相应的inode访问时间。在/etc/fstab中的配置指令如下:

    /dev/sdb1  /data/cache1   ext3   noatime,nodiratime 0 0
    
    4. 配置多实例

    所谓多实例就是启动多个squid进程。因为squid以单进程运行,对多CPU的架构支持不好,不能够重复利用多CPU处理器,配置多实例的时候,需要注意的是配置文件的部分参数;
    visible_hostname、unique_hostname、http_port、snmp_port、access_log、cache_log、pid_filename、cache_dir。以上参数必须不同。

    5. 使用URL作为调度算法

    在配置squid的时候,采用URL作为hash算法,优点如是增加缓存命中率,相同的URl会访问到squid的同一台服务器或者同一个实例上。避免重复回源和重复缓存同样的文件,提高缓存命中率。

    6. 禁用缓存间的通信协议

    缓存间的通信协议设计初衷就是为了架构缓存集群,尽量减少对源站的访问。目前有以下缓存间通信协议和方法:ICP,HTCP,Cache Digest,wccp,wccp2。从实践来看,缓存间通信协议会导致缓存响应的延时,同时不利于问题的排错,因此建议关闭缓存通信协议。禁用的方式就是在编译安装squid的时候添加以下参数

    --disable-icap-client --disable-wccp --disable-wccpv2 --disable-htcp --disable-ident-lookups --disable-auto-locale --enable-ltdl-convenience
    
    7. 构建二级缓存

    所谓的二级缓存就是在CDN边缘节点回源的时候先往CDN的核心节点获取内容,也就是这样的架构: CDN边缘squid ---> CDN核心squid ---> 源站 。 CDN核心squid就是边缘squid的上一级缓存,一级和二级缓存节点之间不使用缓存通信协议,直接使用HTTP进行内容获取后缓存。

    8. 使用squid Manager 获取运行状态

    squid manager 提供了对squid运行状态的详细信息展示通道,在配置文件配置后就可以使用该功能,配置参数如下:

    acl manager proto cache_object   # 安装好后默认配置就有。
    cachemgr_passwd 123..aa config reconfigure shutdown
    http_access allow manager localhost
    http_access deny manager   # 运行状态信息不缓存,默认配置就有。
    

    配置完成后,重启squid,在使用如下命令查看下squid信息
    当前运行状态

    [root@localhost ~]# squidclient -h 127.0.0.1 -p 3128 mgr:info     #3128是squid 的默认端口
    '''
    Cache information for squid:      # 重点关注cache信息
    	Hits as % of all requests:	5min: 0.0%, 60min: 0.0%
    	Hits as % of bytes sent:	5min: -0.0%, 60min: -0.0%
    	Memory hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
    	Disk hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
    	Storage Swap size:	0 KB
    	Storage Swap capacity:	 0.0% used,  0.0% free
    	Storage Mem size:	104 KB
    	Storage Mem capacity:	 0.0% used, 100.0% free
    	Mean Object Size:	0.00 KB
    	Requests given to unlinkd:	0
    '''
    

    当前配置

    [root@localhost ~]# squidclient -h 127.0.0.1 -p 3128 -w 123..aa mgr:config     #-w(小写w)指明看squid配置中的manager密码
    
    9. 优化http range

    Http range方法提供了允许客户端只获取某个静态文件部分内容的能力,典型的Range请求的头部信息如下:

    GET /test.rar HTTP/1.1
    Connection: close
    Host: file.ljf.info
    Range: bytes=1025-2048
    

    上述头部信息是说:客户端想获取http://file.ljf.info/test.rar 的文件从1024字节到2048字节的部分内容,这种请求方式在多线程下载器(如迅雷,快车),通过多线程分别获取同一个URL的不同部分然后组合起来,可以提高下载速度。
    在squid中,我们可以下面这个指令控制HTTP Range 请求的缓存:

    range_offset_limit 
    

    我在工作中,根据squid回源流量进行调整,在刚上线的一台squid服务器,一般设置为0,0表示所有都存。这样的情况下根据服务器负载的网络流量跑个几天再调调这个参数。
    个人建议配置以下经验值以平衡Range请求和缓存整个文件之间效率问题。

    range_offset_limit 3 MB
    

    这样的配置后,如果用户请求的起始Range字节的在3MB以内,如果squid本地没有缓存过这个文件,那么squid就会向后端请求整个文件,然后再进行缓存。如果Range起始范围超过了3MB,那么squid也是用range向后端请求,此时文件不会被缓存。

    如有问题请与本人联系,18500777133@sina.cn

  • 相关阅读:
    联盟自助服务
    联盟防沉迷验证
    联盟用户协议
    联盟常见问题2
    数据结构实验之链表五:单链表的拆分
    数据结构实验之链表四:有序链表的归并
    数据结构实验之链表三:链表的逆置
    数据结构实验之链表七:单链表中重复元素的删除
    师--链表的结点插入
    数据结构实验之链表二:逆序建立链表
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6057502.html
Copyright © 2011-2022 走看看