APP下载

兰州大学:共享缓存提升网速

2012-08-28陈文波李林唐钧李善玺

中国教育网络 2012年9期
关键词:教育网配置文件路由

文/陈文波 李林 唐钧 李善玺

为了更好地利用网络资源,给广大师生提供一个良好的网上工作、学习、娱乐环境,在不调整原有网络结构的前提下,兰州大学提出用多出口和共享缓存的代理方式来提升网页浏览速度。

虽然校园网中普遍采用接入多ISP(Internet Service Provider)的组网方式,但是由于校园网用户对网络资源需求的快速增长(典型的,如P2P流量剧增),仍然无法避免出口拥塞的状况。在上网高峰期,甚至出现连正常的网页浏览都无法保障的尴尬情形。如何突破校园网出口,以及各个ISP之间互联的瓶颈,缩短网络延迟,以便给广大师生提供一个良好的网上工作、学习、娱乐环境,成为当务之急。

目前人们多采用NAT(Network Address Translation)或策略路由的方式,还有些采用直接镜像某些热门网站的方式来加速网页响应速度。如何把二者有机地结合起来,以充分发挥多ISP接入的资源优势,成为另外一个亟待解决的问题。

图1 代理服务器的网络架构

单出口堆砌

起初,出于成本考虑,我们在一台多网卡的实体机上部署了三台相对独立的虚拟机来做代理。在软件选择上,我们使用的都是开源免费软件,其中Squid是由NLANR开发的Web Cache Server。由于Squid是开源和免费软件,再加上其在性能方面的优秀表现,成为我们做网络加速的首选。三台虚拟机的具体信息如表1所示。

虚拟机和外界的通信通过和实体机做桥接(802.1d Ethernet Bridge)实现。具体实现如图1所示(箭头所指方向为用户请求的流向)。

以电信出口为例,主要的网络配置如下:

第一步:配置虚拟机网卡地址(本例eth0和eth1代表虚拟机的两块网卡,分别对应图1中tap2和tap4)

ifconfig eth0202.201.0.151broadcast 202.201.0.255netmask 255.255.255.128 up

ifconfig eth161.178.18.80broadcast 61.178.18.255netmask 61.178.18.0up

第二步:设置默认网关

ip route add default via 61.178.18.1dev eth1

第三步:添加校内路由

表1 代理服务器相关信息

ip route add 202.201.0.0/20via 202.201.0.129 dev eth0

ip route add 210.26.48.0/20via 202.201.0.129 dev eth0

……

这种方式原理简单,配置也很容易,但在实际运行当中发现这种方式效果并不理想:

1. 三个代理都是虚拟机,在性能上自然比实体机要差,尤其是磁盘I/O性能低下成了性能提升的瓶颈。

2. 三个代理之间相对独立,相互之间缓存共享困难。比如,电信代理缓存了某个网页,当另外一个用户从教育网代理访问同一个网页的时候,教育网代理并不知道电信代理已经缓存了该网页,因而是向原始网站发起请求。这种现象因为用户访问所有网站都有用同一个代理的偏好而显得非常普遍。这不仅造成了本地缓存资源的浪费,还不能起到代理应有的减少网页响应时间,降低了出口带宽的作用。即使通过ICP(Internet Cache Protocol)协议,让代理之间能够相互通信,但ICP自身是个简单协议,难以完成缓存共享的任务。

如果说我们可以用实体机来代替虚拟机,使第一种情况不成为问题的话,那么第二种情况才是造成上述方案效率不高的主要原因。

多出口高速Web缓存的实现

共享缓存和多出口的实现

如何让三个代理共享缓存,进而提高网页请求的缓存命中率,成为了首先要解决的问题。最好的办法就是把三个代理整合在一台实体机上,由同一个Squid进程调度资源。但新的问题马上出现了,路由怎么实现?首先想到的办法是利用Linux强大的路由功能,维护一张到各个ISP的路由表。这种方法很简单,但也存在明显的弊端:

1. 静态路由配置的数目很多,而且各个ISP的地址列表还在不停的变化当中,维护起来非常不便;

2. 当任何一路出口出现故障的时候,为了保证该路对应的网址能正常访问,必须修改原有的路由表,使用户请求从别的出口发送出去。

这些都会给代理的稳定性带来负面影响。

再者也可以通过iptables的相关技术实现Squid透明代理(Transparent Proxy),然而Squid在透明模式下不支持认证。因为有认证的需求,所以透明代理也行不通。

既要实现共享缓存,又要保证代理的稳定、高效运行,还要支持认证。为了满足以上要求,我们决定拓展Squid的相关模块。结果发现Squid本身就具备这样的功能:基于请求的源地址或者用户名,Squid允许将该请求映射到不同的出口地址。这项功能在Squid的配置文件中对应的标签为“tcp_outgoing_address”。有了它,再结合Linux高级路由策略就可以轻松实现多出口高速Web缓存代理。具体实现见图2。

对图2的说明:

1. 整合后的代理外部环境和整合前保持一致。

2. eth0既是代理接收请求的入口,又是多出口中教育网的出口。

3. eth0配置了202.201.0.149~202.201.0.151三个地址,在经过Squid转换后分别对应教育、电信、联通的出口地址。

4. 关键路由配置:

(1)首先编辑/etc/iproute2/rt_tables,追加两列:

100unicom

101telecom

(2)设置路由策略:

ip route add default via 202.201.0.129 dev eth0table main

ip route add default via 221.7.37.129 dev eth1table unicom

图2 整合后的代理服务器网络架构

ip rule add from 221.7.37.140table unicom

ip route add default via 61.178.18.1dev eth2table telecom

ip rule add from 61.178.18.80table telecom

(3)Squid的相关配置:

目前我校使用的Squid软件版本为3.1.8,这个版本是支持IPv6代理的。为了满足纯IPv6用户访问IPv6和IPv4用户访问IPv6的需求,在Squid配置文件中添加以下几条命令就可实现上述功能:

http_port[2001:da8:c000::150]:8080

acl from_ipv6src 2001:da8:ff3a::/48

tcp_outgoing_address 2001:da8:c000::150to_ipv6

tcp_outgoing_address 202.201.0.150from_ipv6!to_ipv6

图3 单位时间HTTP请求数及命中数(30分钟平均)

图4 代理相关服务耗时统计(30分钟平均)

注:“2001:da8:c000::150”是eth0的IPv6地址

代理的进一步优化Squid优化的方式方法有很多,我们根据自身的情况主要做了以下几点优化。

优化一:

将Squid可用的文件描述符(filedescriptor)调整为65536。Gentoo下面Squid的最大文件描述符为8192,但在运行一段时间后发现Squid仍然频繁报“WARNING!Your cache is running out of filedescriptors”错误,如果置之不理,Squid很有可能假死(进程还在,但不接收请求)。在将文件描述付调整为65536后,这个问题就没再出现过。

优化二:

让对校内和教育网的请求都走教育线路。由于教育网的域名大多以edu.cn结尾,所以可以基于域名做策略:

acl edu dstdomain "/etc/squid/edu.lst" # edu.lst对应以edu.cn结尾的域名

acl lzu dst "/etc/squid/localnet.lst" # localnet.lst对应校内地址列表

tcp_outgoing_address 202.201.0.150edu

tcp_outgoing_address 202.201.0.150lzu

优化三:

禁止缓存校内资源。因为校内资源不存在延迟问题,而且可以节省Squid缓存资源,虽说这会降低HTTP请求的缓存命中率(hit-rates)。对应到Squid的配置文件:

acl lzu dst "/etc/squid/localnet.lst"

cache deny lzu

优化四:

加快网页响应速度,降低网络延迟有两种方法:1.选择正确的线路访问相应的网站;2. 提高hit-rates。正确线路在第二点中已经提到,关键还是需要用户自己把握。提高hit-rates则是通过修改缓存置换算法来实现,对应到Squid的配置文件:

memory_replacement_policy heap GDSF cache_replacement_policy heap GDSF

优化后的效果

因为Squid支持SNMP,所以我们使用Cacti将Squid的状态进行了监控。图3、图4是撰文时最近代理相关信息的监控图,从图4中可以看到命中率(Req Hit Ratios)在40%左右,峰值甚至达到了78.66%,效果还是很明显的。

从用户的反映来看,代理的稳定性比以前高了,上网速度也快了很多。总之,多出口共享缓存Web代理达到了预期的效果。

猜你喜欢

教育网配置文件路由
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
铁路数据网路由汇聚引发的路由迭代问题研究
互不干涉混用Chromium Edge
多点双向路由重发布潜在问题研究
一种基于虚拟分扇的簇间多跳路由算法
基于IPv6的行业云安全服务互助平台
路由重分发时需要考虑的问题
基于Zookeeper的配置管理中心设计与实现
红色平台