前言

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

CDN网络(二)之配置和优化CDN核心缓存软件--squid的更多相关文章

  1. cdn网络加速

    CDN全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节点服 ...

  2. CDN网络(一)之典型的CND架构与HTTP协议的缓存控制

    前言 本人以前在CDN厂商蓝汛就职过一年时间,利用脑子里还残留的一些CDN知识,结合现有的书籍材料,写点东西. what's the CDN CDN(content delivery Network) ...

  3. CDN网络科普小文(小说版)

    引言 作为公司 cdn 小组的一名小码仔,我为写一篇 cdn 的科普文章准备了好一段时间(大概有一个多月没有更新我的社交账号了). 在我刚进入公司,培训完,进入小组,了解到我们做的是 cdn 相关的工 ...

  4. Linux运维二:CentOS6.6系统安装后的基本配置与优化

    CentOS6.6系统安装完成后还需要做一些配置与优化: 一:Linux内核版本号介绍 查看内核版本: [root@Gin scripts]# uname -r 2.6.32-504.el6.x86_ ...

  5. 一张图说明CDN网络的原理

    原文: http://blog.csdn.net/coolmeme/article/details/9468743 1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓 ...

  6. CDN网络的原理

    来源:http://blog.csdn.net/coolmeme/article/details/9468743 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.用户向浏览器输入www.we ...

  7. CDN网络架构

    CDN(content delivery network 内容分发网络) 本质上就是提供缓存,使得用户总是能访问离他最近的服务器,akamai是世界上的第一家做CDN的公司 实例:构建CDN分发网络架 ...

  8. CDN网络原理

    1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求: 2.网站的DNS域名解析器设置了CNAME,指向了www.web.51cdn.co ...

  9. 2014年十个优秀的免费CDN加速服务-国内和国外免费CDN

    这是一篇总结近几年来网络上出现了各类免费CDN服务的文章,文章本来应该早就发出来的,但是因为近期的各种原因一直拖到现在.之前部落已经总结了近几年来的优秀免费空间,新手朋友不必在茫茫“网”海中寻找免费空 ...

随机推荐

  1. 化茧成蝶,开源NetWorkSocket通讯组件

    前言 前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了.从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层, ...

  2. 【活动】写#听云#原创博文 赢取iPhone 6超级大奖

    移动应用的使用量和重要性与日俱增,用户体验的要求也越来越高.与桌面程序相比,移动应用耗电小,速度慢,但手机用户却希望享受到与桌面程序同样的加载速度.那么如何发现移动应用的性能黑洞,优化移动应用性能,这 ...

  3. Entity Framework与ADO.Net及NHibernate的比较

    Entity Framework  是微软推荐出.NET平台ORM开发组件, EF相对于ado.net 的优点 (1)开发效率高,Entity Framework的优势就是拥有更好的LINQ提供程序. ...

  4. 论文笔记Outline

    1.Information publication: author: 2.What 3.Dataset 4.How input: output: method: 5.Evaluation: basel ...

  5. linux | 管道符、输出重定向

    1 输出重定向 ll > a.txt 将 ll的结果写入到a.txt 2 管道符 ls -la | grep h* 这条命令的理解为:ls -la 的结果作为gerp h* 的结果 gerp 是 ...

  6. js表单提交,面向对象

    一.js表单验证之后再提交 1.普通按钮onclick函数调用表单的submit()函数 <input type=button name="submit1" value=&q ...

  7. Win7激活工具|OEM小马激活

    OEM小马激活,Win7激活. 免费下载:http://yunpan.cn/cmZ5DyDvXG2In  访问密码 7fcf

  8. [转] java中int,char,string三种类型的相互转换

    原文地址:http://blog.csdn.net/lisa0220/article/details/6649707 如何将字串 String 转换成整数 int? int i = Integer.v ...

  9. 我的第一个jsp程序-实现注册登录留言功能

    1,注册功能,包括两个页面 zhuce.jsp注册页面 <%@ page language="java" contentType="text/html; chars ...

  10. Swift开发小技巧--自定义Log

    Swift中的自定义Log OC中有宏的定义,可以定义自己的Log,但是Swif中没有宏的定义,想要实现类似OC中的自定义Log,必须实现以下操作 1.在AppDelegate.swift文件中定义一 ...