利用 squid 反向代理提高网站性能

Posted on

利用 squid 反向代理提高网站性能 - 开源中国 OSChina.NET

当前访客身份:游客 [ 登录 | 加入开源中国 ]

开源中国

讨论区

当前位置: 讨论区 » 技术分享 » Squid 搜 索 红薯

利用 squid 反向代理提高网站性能

红薯 发表于 2009-4-12 11:36 4年前, 4回/2634阅, 最后回答: 21天前

Java、PHP、Ruby、iOS、Python 等 JetBrains 开发工具低至 99 元(3折),详情»

本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。

本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。

现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。

反向代理的概念

反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服

务器的内容缓存器。其系统结构如图 1

图 1. 系统结构 系统结构

反 向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。

Squid 反向代理的实现原理

目 前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

Squid

是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持

HTTP ,HTTPS,FTP 等多种协议,是现在 Unix 系统上使用、最多功能也最完整的一套软体。下面将重点介绍 Squid 反向代理的实现原理和在提高网站性能方面的应用。

Squid 反向代理服务器位于本地 WEB 服务器和 Internet 之间 , 组织架构如图 2:

图 2. 组织架构 组织架构

客 户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:

  • Last-Modified: 告诉反向代理页面什么时间被修改
  • Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
  • Cache-Control: 告诉反向代理页面是否应该被缓冲
  • Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-c

ache

利用 Squid 反向代理加速网站实例

本实例的域名是 wenjin.cache.

ibm.com.cn ,通过

DNS 的 轮询技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性。该系统结构图 3 如下:

图 3. 系统结构 系统结构

配置的系统环境:

  • 一台 DNS 服务器:操作系统 Freebsd,软件 BIND 9.5,IP 192.168.76.222 ;
  • 三台 Squid 服务器:操作系统 Linux AS 4,软件 Squid 3.0,相应的 IP 如下: Squid1:192.168.76.223 Squid2:192.168.76.224 Squid3:192.168.76.225
  • 三台 WEB 服务器:操作系统 Linux AS 4,应用软件 Tomcat 5.0+Mysql,相应的 IP 地址如下: webServer1:210.82.118.195 webServer2:192.168.76.226 webServer1:192.168.76.227

应用软件的安装和配置

配置 DNS 服务器

软件利用 Freebsd 自带的 bind 9.5 。然后针对该系统配置 bind,首先修改 bind 的配置文件 /etc/namedb/named.conf,在文件中添加 zone "cache.ibm.com.cn"{ type master; file "master/ cache.ibm.com.cn "; };

再在 /etc/namedb/master 目录下添加 cache.ibm.com.cn 文件,该文件的内容如下: $TTL 3600 @ IN SOA search. ibm.com.cn. root. ibm.com.cn. ( 20080807 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS search.ibm.com.cn. 1 IN PTR localhost.ibm.com.cn. wenjin IN A 192.168.76.223 wenjin IN A 192.168.76.224 wenjin IN A 192.168.76.225

这样当用户请求的时候,DNS 通过轮询机制将 wenjin.cache.ibm.com.cn 的域名解析为 192.168.76.223、192.168.76.224 和 192.168.76.225 其中之一。

配置完成后,运行 rndc star t 启动 bind 服务。可在 /etc/rc.conf 中设置 named_enable="YES" 使得开机自启动。

用 ps – A |grep named 查看 bind 服务是否起来;

用 nslookup wenjin.cache.ibm.com.cn 测试 bind 服务是否正常运行。

配置 Squid1 服务器

  1. 下载 squid-3.0.STABLE8.tar.gz 源码包,将其放在 /home 目录下
  2. 解压缩

tar – zxvf squid-3.0.STABLE8.tar.gz 设置配置参数:

cd squid-3.0.STABLE10 ./configure – prefix=/usr/local/squid 将 squid 安装在 /usr/local 目录下

  1. 编译安装:

make&make install 安装完以后会在 /usr/local 目录下看见 squid 目录。

  1. 配置 squid 配置文件

编辑 squid.conf 文件,

vi /usr/local/squid/etc/squid.conf

cache_effective_user squid cache_effective_group squid /#/#/#/#/#/#/#/#/# 设定 squid 的主机名 , 如无此项 squid 将无法启动 visible_hostname squid1.nlc.gov.cn /#/#/#/#/#/#/#/#/#/#/#/#/# 配置 squid 为加速模式 /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# http_port 80 accel vhost vport icp_port 3130 /#/#/#/#/# 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时, 通过 ICP 查询去其邻居中取得缓存 cache_peer squid2.ibm.com.cn sibling 80 3130 cache_peer squid3.ibm.com.cn sibling 80 3130 /#/#/#/#/# squid1 的三个父节点,originserver 参数指明是源服务器, round-robin 参数指明 squid 通过轮询方式将请求分发到其中一台父节点; squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了, 那么 squid 会从剩余的 origin 服务器中抓取数据 cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin \ name=webServer1 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin \ name=webServer2 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin \ name=webServer3 /#/#/#/# 将 wenjin.cache.ibm.com.cn 域的请求通过 RR 轮询方式转发到三个父节点中的一个 cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.ibm.com.cn /#/#/#/#/# 下面是一些访问控制、日志和缓存目录的设置 acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225 acl all src 0.0.0.0/0.0.0.0 http_access allow all icp_access allow localnet cache_log /usr/local/squid/var/logs/cache.log access_log /usr/local/squid/var/logs/access.log squid cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256 /#/#/#/#/#/#/# 对 squid 的一些优化 /#/#/#/#/#/#/#/#/#/#/#/#/#/#/# maximum_object_size 10240 KB /#/#/# 能缓存的最大对象为 10M maximum_object_size_in_memory 512 KB /#/#/# 内存中缓存的最大对象 512K cache_mem 256 MB /#/#/#squid 用于缓存的内存量

保存后 :wq 退出。

在 /etc/hosts 文件中添加 192.168.76.223 squid1.ibm.com.cn 192.168.76.224 squid2.ibm.com.cn 192.168.76.225 squid3.ibm.com.cn

保存后 : wq 退出。

检查 squid 配置文件正确与否:

/usr/local/squid/bin/squid – k parse

生成缓存目录

/usr/local/squid/bin/squid – z

启动

squid:/usr/local/squid/bin/squid

配置 squid2 和 squid3 服务器

squid2 和 squid3 服务器的配置方法和配置参数和 squid1 一样,配置完成后,分别启动这两个服务器上的 squid 服务。

在 squid 的日志文件 cache.log 中,出现如下日志信息则说明三台 squid 之间成功配置为 sibling,且配置了三个父代理。 2008/11/17 10:08:47| Configuring Sibling squid1.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Sibling squid3.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0 2008/11/17 10:08:47| Ready to serve requests.

测试

测试之前,保证 DNS 服务、三台 squid 服务和三台 web 服务都正常起来。在客户端输入http://wenjin.cache.ibm.com.cn,则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。

总结

Squid 是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度。本文在真实的网络环境下,利用三台 squid 反向代理服务器加速了网站的性能,同时结合 DNS 轮询技术实现了网站的负载均衡。经过一段时间的测试和试运行,该网站的访问速度和可用性方面都有很大的提高,从未出现过网站服务中断情况。

标签: Squid 补充话题说明»

分享到 **

收藏 **

17 **

举报 **

0 | 0 **

按默认排序 | 显示最新评论 | 回页面顶部 共有4个评论 发表评论»

  • 七夜

七夜 回答于 2009-07-18 23:40

举报 很好的负载均衡解决方案 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • 隋济远

隋济远 回答于 2012-11-29 10:07

举报 了解了Squid的原理及使用方法。非常感谢~ 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • 幽烛

幽烛 回答于 2013-03-13 13:39

举报 写的真仔细,太好了,很不错的方案~~ 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • 亚飞正传

亚飞正传 回答于 2013-04-03 13:10

举报 正好需要,写的很详细,谢谢!!! 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

非会员用户 回评论顶部 | 回页面顶部

有什么技术问题吗? 我要提问 全部(4926)...红薯的其他问题

类似的话题

© 开源中国(OsChina.NET) | 关于我们 | 广告联系 | @新浪微博 | 开源中国手机版 | 粤ICP备12009483号-3 开源中国手机客户端: Android iPhone WP7

优酷网的架构学习笔记

Posted on

优酷网的架构学习笔记 - 开源中国 OSChina.NET

当前访客身份:游客 [ 登录 | 加入开源中国 ]

开源中国

讨论区

当前位置: 讨论区 » 技术分享 » MySQL 搜 索 红薯

优酷网的架构学习笔记

红薯 发表于 2011-11-21 23:23 1年前, 32回/12340阅, 最后回答: 21天前

Java、PHP、Ruby、iOS、Python 等 JetBrains 开发工具低至 99 元(3折),详情»

记得以前给大家介绍过视频网站龙头老大YouTube的技术架构, 相信大家看了都会有不少的感触,互联网就是这么一个神奇的东西。今天我突然想到,优酷网在国内也算是视频网站的老大了,不知道他的架构相对于 YouTube是怎么样的,于是带着这个好奇心去网上找了优酷网架构的各方面资料,虽然谈得没有YouTube那么详细,但多少还是挖掘了一点,现在总结 一下,希望对喜欢架构的朋友有所帮助。

一、网站基本数据概览

  • 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商。
  • 硬件方面,优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主,2007的数据表明,优酷网已有1000多台服务器遍布在全国各大省市,现在应该更多了吧。

二、网站前端框架

从一开始,优酷网就自建了一套CMS来解决前端的页面显示,各个模块之间分离得比较恰当,前端可扩展性很好,UI的分离,让开发与维护变得十分简单和灵活,下图是优酷前端的模块调用关系:

这样,就根据module、method及params来确定调用相对独立的模块,显得非常简洁。下面附一张优酷的前端局部架构图:

三、数据库架构

应该说优酷的数据库架构也是经历了许多波折,从一开始的单台MySQL服务器(Just Running)到简单的MySQL主从复制、SSD优化、垂直分库、水平sharding分库,这一系列过程只有经历过才会有更深的体会吧,就像MySpace的架构经历一样,架构也是一步步慢慢成长和成熟的。

1、简单的MySQL主从复制:

MySQL的主从复制解决了数据库的读写分离,并很好的提升了读的性能,其原来图如下:

其主从复制的过程如下图所示:

但是,主从复制也带来其他一系列性能瓶颈问题:

  1. 写入无法扩展
  2. 写入无法缓存
  3. 复制延时
  4. 锁表率上升
  5. 表变大,缓存率下降

那问题产生总得解决的,这就产生下面的优化方案,一起来看看。

2、MySQL垂直分区

如果把业务切割得足够独立,那把不同业务的数据放到不同的数据库服务器将是一个不错的方案,而且万一其中一个业务崩溃了也不会影响其他业务的正常进行,并且也起到了负载分流的作用,大大提升了数据库的吞吐能力。经过垂直分区后的数据库架构图如下:

然而,尽管业务之间已经足够独立了,但是有些业务之间或多或少总会有点联系,如用户,基本上都会和每个业务相关联,况且这种分区方式,也不能解决单张表数据量暴涨的问题,因此为何不试试水平sharding呢?

3、MySQL水平分片(Sharding)

这是一个非常好的思路,将用户按一定规则(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,这样随着用户数量的增加,只要简单地配置一台服务器即可,原理图如下:

如何来确定某个用户所在的shard呢,可以建一张用户和shard对应的数据表,每次请求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示:

但是,优酷是如何解决跨shard的查询呢,这个是个难点,据介绍优酷是尽量不跨shard查询,实在不行通过多维分片索引、分布式搜索引擎,下策是分布式数据库查询(这个非常麻烦而且耗性能)

四、缓存策略

貌似大的系统都对“缓存”情有独钟,从http缓存到memcached内存数据缓存,但优酷表示没有用内存缓存,理由如下:

  1. 避免内存拷贝,避免内存锁
  2. 如接到老大哥通知要把某个视频撤下来,如果在缓存里是比较麻烦的

而且Squid 的 write() 用户进程空间有消耗,Lighttpd 1.5 的 AIO(异步I/O) 读取文件到用户内存导致效率也比较低下。

但为何我们访问优酷会如此流畅,与土豆相比优酷的视频加载速度略胜一筹?这个要归功于优酷建立的比较完善的内容分发网络(CDN),它 通过多种方式保证分布在全国各地的用户进行就近访问——用户点击视频请求后,优酷网将根据用户所处地区位置,将离用户最近、服务状况最好的视频服务器地址 传送给用户,从而保证用户可以得到快速的视频体验。这就是CDN带来的优势,就近访问,有关CDN的更多内容,请大家Google一下。

出处:青藤屋 原文链接

标签: MySQL Squid Lighttpd memcached 补充话题说明»

分享到 **

收藏 **

202 **

举报 **

0 | 4 **

按默认排序 | 显示最新评论 | 回页面顶部 共有32个评论 发表评论»

  • lace

lace 回答于 2011-11-22 08:20

举报 层次有限,我表示看不明白。 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • ikeng

ikeng 回答于 2011-11-22 09:15

举报 最后一段霸气了,用钱砸 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • _Aaron_

Aaron 回答于 2011-11-22 09:16

举报 “老大哥”,是亮点~ 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • JacarriChan

JacarriChan 回答于 2011-11-22 09:23

举报 youku 确实比较流畅。其技术架构也比较简洁,值得学习…… 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • 天赐

天赐 回答于 2011-11-22 09:27

举报 o(∩_∩)o...哈哈!!!

挺不错 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • YiseNet

YiseNet 回答于 2011-11-22 09:48

举报

  1. 如接到老大哥通知要把某个视频撤下来,如果在缓存里是比较麻烦的 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论
  2. liueric

liueric 回答于 2011-11-22 09:51

举报 其实cdn也用了内存缓存的,优酷只是把内存缓存的责任归到cdn身上而已 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  1. 方旭

方旭 回答于 2011-11-22 10:00

举报 想不明白优酷没有使用内存缓存:)

理由都很牵强,要说有强大的CDN也不能说过去。

网站做大了,缓存是必修课。 当然有钱确实就不一样。 --- 共有 1 条评论 ---

  • 苏大泉 上面说的对 它把缓存的功能交给cdn做了 (8个月前 by 苏大泉) 回复

有帮助(0) | 没帮助(0) | 评论(1) | 引用此评论

  • puras

puras 回答于 2011-11-22 10:12

举报 整成PDF吧。好东西啊 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

  • memeyang

memeyang 回答于 2011-11-22 10:37

举报 老大哥 亮了。 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

非会员用户 回评论顶部 | 回页面顶部

有什么技术问题吗? 我要提问 全部(4926)...红薯的其他问题

类似的话题

© 开源中国(OsChina.NET) | 关于我们 | 广告联系 | @新浪微博 | 开源中国手机版 | 粤ICP备12009483号-3 开源中国手机客户端: Android iPhone WP7

利用Squid构建高速的Proxy Server

Posted on

利用Squid构建高速的Proxy Server - 开源中国 OSChina.NET

当前访客身份:游客 [ 登录 | 加入开源中国 ]

开源中国

讨论区

当前位置: 讨论区 » 技术分享 » Squid 搜 索 红薯

利用Squid构建高速的Proxy Server

红薯 发表于 2009-5-5 17:43 3年前, 1回/1412阅, 最后回答: 4个月前

Java、PHP、Ruby、iOS、Python 等 JetBrains 开发工具低至 99 元(3折),详情»

纪增雄 来自:[url=http://www.cnlinux.net]http://www.cnlinux.net 转载请保留此信息,谢谢! 一、什么是Proxy Server(代理服务器),Proxy的作用。 在真实世界中我们常常会去帮人家办一些事情,例如帮人家交电费什么的,在这种情况下你不是电表的主人,而是代办者(代理者)的身份。在网络世界中Proxy就是相当于那个帮人家交电费的人了,当我们发出连接请求的时候,就会通过Proxy去帮我们直接与目标服务器沟通,帮我们取得资料。 通常我们所说的高速缓存代理,就是以空间换时间,就如下图那样。 client通过Proxy Server上网的步骤如下: ①client端向Server发出请求。 ②Server收到请求后比较判断Cache中时候存在client想要的资料,如果没有则向远程Server发送数据请求。 ③将请求回来的资料先存放到Cache中,再将资料传送给client端。 ④当client发出的请求中所需要的资料在Cache中有,则将Cache中的资料直接传送给client端。 虽然当第一访问这向Proxy请求的数据Cache中没有时,Proxy抓取数据后会先保存在Cache中,这样访问速度变慢了,可是第二个访问者以及后来的访问者需要该资料的时候,proxy都不要想远程服务器请求,直接将cache中的资料发送给后来的请求者就行了,这样就减少了连接远程服务器的流量,另外由于proxy是在本地的,所以传输速度也更快。 二、使用Squid在构建Proxy Server 本文中笔者所使用的环境是: 操作系统: Redhat 9.0,内核:2.4.20-31.9,其他系统套件已经通过apt更新到最新了 1.编译安装Squid 由于Squid对系统硬件要求比较高,所以我们安装的时候应尽量优化。 /#groupadd squid /#useradd squid 添加suqid用户和用户组 /#export CFLAGES='-O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2' 可以根据你的CPU选择相应的参数 GCC-3.1以上可針對CPU最佳化: Pentium2: -O2 -mcpu=i686 -march=i686 -mmmx Pentium3: -O2 -mcpu=pentium3 -march=pentium3 -mmmx -msse Pentium4: -O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2 /#./configure --prefix=/usr/local/squid --enable-gnuregex --enable-async-io=80 --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cahce-digests --enable-arp-acl --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese" --enable-poll --enable-linux-netfilter --enable-underscore /#make /#make install 我个人安装软件都比较喜欢用源码包自己编译,觉得这样知道你自己在做什么,用rpm包好像不知道做什么的就安装好了。下面我们对各个编译参数进行解释,当然你可以通过./configure --help来查看其他的参数,以及各个参数的英文解释。 --prefix=/usr/local/squid :指定软件的安装路径 --enable-gnuregex :由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理。 --enable-async-io=80 :这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs --enable-icmp :加入icmp支持 --enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦 --enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。 --disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。 --enable-cahce-digests :加快请求时,检索缓存内容的速度。 --enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。 --enable-err-language="Simplify_Chinese" 和 --enable-default-err-languages="Simplify_Chinese" :指定出错是显示的错误页面为简体中文 --enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。 --enable-linux-netfilter :可以支持透明代理 --enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。 这里我们就安装好了,接下来就是修改配置文件了。 2.修改定义配置参数 下面是我的squid.conf文件 /# NETWORK OPTIONS(有关的网络选项) /# ----------------------------------------------------------------------------- http_port 3128 /#代理端口 icp_port 3130 /#icp端口 /# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项) /#----------------------------------------------------------------------------- /#禁止缓存 hierarchy_stoplist cgi-bin ? hierarchy_stoplist -i ^https:\ ? acl QUERY urlpath_regex -i cgi-bin \? .asp .php .jsp .cgi acl denyssl urlpath_regex -i ^https:\ no_cache deny QUERY no_cache deny denyssl /#上面几个就是说遇到URL中有包含cgi-bin和以https:\开头的都不要缓存, /#还有asp、cgi、php等动态脚本也不要缓存, /#因为这些脚本通常都是动态更新的,这样数据不同步。 /#还有https://开通的不缓存是因为一般我们进行电子商务交易, /#例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。 /# OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的选项) /# ----------------------------------------------------------------------------- cache_mem 8 MB /#额外使用内存量,可根据你的系统内存在设定,一般为实际内存的1/3 cache_swap_low 90 /#最低缓存百分比 cache_swap_high 95 /#/#最高缓存百分比,就是上面那个额外内存的使用百分比 maximum_object_size 4096 KB /#单个文件最大缓存大小,超过这个大小将不缓存 maximum_object_size_in_memory 8 KB /#在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中 /#有DNS正反解所得到的IP存在缓存区的大小,这样可以加快解析速度 ipcache_size 1024 ipcache_low 90 ipcache_high 95 fqdncache_size 1024 /# LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录) /# ----------------------------------------------------------------------------- /#   ; ; <目录所在> ; ; ; ; /#  那个 aufs 只有在编译的时候加入 --enable-async-io 那个选项才有支持, /#  至于目录所在地与所占用的磁盘大小则请视您的主机情况而定, /#  而后面 dir1, dir2 则是两个次目录的大小,通常 16 256 或 64 64 皆可, /#  一般来说,数字最好是 16 的倍数,据说性能会比较好啦! cache_dir aufs /Cache1 100 16 256
cache_dir aufs /Cache2 100 16 256 /#日志存放位置 cache_access_log /usr/local/squid/var/logs/access.log cache_log /usr/local/squid/var/logs/cache.log /# TAG: cache_store_log cache_store_log /usr/local/squid/var/logs/store.log /# TAG: pid_filename pid_filename /usr/local/squid/var/logs/squid.pid /# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项) /# ----------------------------------------------------------------------------- /#用代理登陆匿名ftp服务选项 /# TAG: ftp_user ftp_user Squid@ /#用户名 ftp_passive on /#被动模式 /#认证 /#auth_param basic children 5 /#auth_param basic realm Squid proxy-caching web server /#auth_param basic credentialsttl 2 hours /#auth_param basic casesensitive off /# OPTIONS FOR TUNING THE CACHE(调整cache的选项) /# ----------------------------------------------------------------------------- /# TAG: refresh_pattern Cache更新时间设置 /# ; ; <最小时间> ; <百分比> ; <最大时间> ; refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 /#上面第一行如果网址开头是 ftp 的话,那么在一天(1440分钟)后, /#如果proxy 再次取用这个档案时,则 cache 内的数据会被更新! /# TIMEOUTS (超时) /# ----------------------------------------------------------------------------- /#连接到其他机器的最大尝试时间 connect_timeout 1 minute /#连接到上层代理的超时时间 peer_connect_timeout 30 seconds /#返回超时 request_timeout 2 minutes /#持续连接时间 persistent_request_timeout 1 minute /# ACCESS CONTROLS(访问控制) /# ----------------------------------------------------------------------------- /# TAG: acl /#Examples: /#acl myexample dst_as 1241 /#acl password proxy_auth REQUIRED /#acl fileupload req_mime_type -i ^multipart/form-data$ /#acl javascript rep_mime_type -i ^application/x-javascript$ /# /#Recommended minimum configuration: acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 acl Safe_ports port 80 /# http acl Safe_ports port 21 /# ftp acl Safe_ports port 443 563 /# https, snews acl Safe_ports port 70 /# gopher acl Safe_ports port 210 /# wais acl Safe_ports port 1025-65535 /# unregistered ports acl Safe_ports port 280 /# http-mgmt acl Safe_ports port 488 /# gss-http acl Safe_ports port 591 /# filemaker acl Safe_ports port 777 /# multiling http acl CONNECT method CONNECT acl inside src 192.168.1.0/24 /#内部网IP段 acl localmac arp "/usr/local/squid/localmac" /#mac地址文件 /# TAG: http_access http_access allow inside /#允许inside规则通过 http_access allow localmac /#允许localmac里面有登记的mac地址通过 /# /#Recommended minimum configuration: /# /# Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager /# Deny requests to unknown ports http_access deny !Safe_ports /# Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports /# /#http_access deny to_localhost /# /# And finally deny all other access to this proxy http_access deny all /# TAG: http_reply_access http_reply_access allow all /# TAG: icp_access /#icp_access allow all /# TAG: cache_peer_access /# ADMINISTRATIVE PARAMETERS(管理参数) /# ----------------------------------------------------------------------------- /# TAG: cache_mgr cache_mgr webmaster@localhost /#管理员信箱 /# TAG: cache_effective_user cache_effective_user squid /#运行squid时的用户 cache_effective_group squid /#运行squid时的组 /# TAG: visible_hostname visible_hostname ProxyServer /#代理服务器名称 /# OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项) /# ----------------------------------------------------------------------------- /# HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项) /# ----------------------------------------------------------------------------- /#设定透明代理 httpd_accel_host ProxyServer /#主机名 httpd_accel_port 80 /#透明代理端口 httpd_accel_with_proxy on httpd_accel_uses_host_header on /# MISCELLANEOUS(杂项) /# ----------------------------------------------------------------------------- /# TAG: logfile_rotate /#squid会定期的将日志文件更名并打包。 /#比如正在使用的日志文件为access.log,squid会将其更名并打包为 access.log.1.gz; /#过了一定时间后,squid又会将access.log.1.gz更名为access.log.2.gz /#并将当前的日志文件更名并打包为access.log.1.gz,以此循环。 /#logfile_rotate指定的数字即为打包并备份的文件的数量,当达到这一数目时, /#squid将删除最老的备份文件。默认值为1 0。如果想手动来进行这些操作, /#可以用logfile_rotate 0来取消自动操作。 logfile_rotate 4 /# TAG: forwarded_for on|off /#关闭此项将在访问某些论坛时显示的IP是unknown, /#如果打开则显示的是你client的内网IP forwarded_for off /#图标文件目录 /# icon_directory /usr/local/squid/share/icons /#错误提示文件目录 /# error_directory /usr/local/squid/share/errors/Simplify_Chinese /# TAG: snmp_port /# Squid can now serve statistics and status information via SNMP. /# By default it listens to port 3401 on the machine. If you don't /# wish to use SNMP, set this to "0". /# /#Default: /# snmp_port 3401 /# TAG: snmp_access /# Allowing or denying access to the SNMP port. /# /# All access to the agent is denied by default. /# usage: /# /# snmp_access allow|deny [!]aclname ... /# /#Example: /# snmp_access allow snmppublic localhost /# snmp_access deny all /# /#Default: /# snmp_access deny all /# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)(延时池参数) /# ----------------------------------------------------------------------------- /# TAG: coredump_dir /#当squid突然挂掉的时候,或者突然出现什么故障的时候,将squid在内存中的资料写到硬盘中 coredump_dir /usr/local/squid/var/cache 3.设置iptables支持透明代理 设置squid+iptables支持透明代理前请先设置好NAT,可以使用下面的简单语句 echo "1" >; /proc/sys/net/ipv4/ip_forward /#设置转发 /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE /#设置nat功能 iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128 /#将所有80端口的请求都转发到suqid的3128端口上 其中192.168.1.0/24表示192.168.1.1-254这个网段通过squid和nat做透明代理。 这样,当用户访问www服务的时候可以使用cache作为高速代理,减少流量,而其他服务则通过nat转发。 4.使用上层代理 当你访问国外网站比较慢的时候,可以通过设置代理访问,那么我们自己的代理服务器能否也设置别人的代理来访问国外的网站呢?答案是肯定的。 例如有代理proxy1.cnlinux.net能以较快的速度访问国外,且我们访问它也比较快,所以我们用它来作为我们访问国外网站的上层代理。 我们需要在squid.conf中添加如下参数: ; <主机名称/地址> ; <类别> ; ; ; <其他参数> ; 类别主要有上层的parent和同一层的sibling两种,我们这里主要介绍的是上层代理,就是parent,如果你需要架设代理服务器集群的话可以采用sibling,这里我们就不做讨论了。 其他参数有: proxy-only :只向上层代理要资料,自己不缓存到本地proxy中。 weight=n :比重,当我们设置多台上层代理的时候,这几台代理的功能都相同的,可以通过设置此项来决定那台上层代理比较重要,n越大表示越重要。 no-query :当使用sibling类别的时候,向同一层的proxy索要资料的时候就会向其送出icp请求,可以使用no-query来取消icp请求,一般我们向上层proxy请求资料的时候可以不需要发送icp包,以降低流量。 default :表示将这台proxy设置为默认proxy no-netdb-exchange :表示不向proxy送出imcp包的请求。 no-digest :表示不纪录向上层proxy提交的请求。 /#上层proxy设置 cache_peer proxy1.cnlinux.net parent 3128 3130 no-digest no-netdb-exchange /#设置访问规则,可以用域名,也可以用IP acl usa dstdomain .com.us /#美国.com.us的网站 acl usaip dst 18.0.0.0/8 /#美国的部分IP段 /#放行禁止规则 cache_peer_access proxy1.cnlinux.net allow usa /#允许usa规则使用此上层proxy cache_peer_access proxy1.cnlinux.net deny !usa /#禁止所有非usa规则使用此上层proxy cache_peer_access proxy1.cnlinux.net allow usaip cache_peer_access proxy1.cnlinux.net deny !usaip 5.启动,关闭squid a.将cache目录的所有者更改为squid /#chown -R squid:squid /Cache1 /#chown -R squid:squid /Cache2 b.对cache目录进行初始化 /#/usr/local/squid/sbin/squid -z 2004/11/01 23:06:29| Creating Swap Directories FATAL: Failed to make swap directory /Cache1/00: (13) Permission denied Squid Cache (Version 2.5.STABLE7): Terminated abnormally. CPU Usage: 0.000 seconds = 0.000 user + 0.000 sys Maximum Resident Size: 0 KB Page faults with physical i/o: 10 如果出现上面这样的错误信息,表示你/Cache1目录权限错误,请检查/Cache1目录所有者是否为squid用户所有。 c.启动squid /#su squid -c "/usr/local/squid/bin/RunCache &" d.关闭squid /#/usr/local/squid/sbin/squid -k shutdown 要执行两次才能正常关闭suqid e.重新读取squid.conf文件 /#/usr/local/squid/sbin/squid -k reconfigure 需要执行两次才能重新读取squid.conf文件 6.日志分析 Proxy服务器安装好后,我们当然要对服务器进行监控,通过日志分析,我们可以知道那些用户上了那些网站,用了多少流量等,下面为大家介绍sarg这个日志分析工具,在squid的官方网站还推介了其他几种日志分析工具,大家有兴趣的话可以上去看看。 a.安装 /#./configure --prefix=/usr/local/sarg --enable-bindir=/usr/local/sarg/bin /#make && make install b.设置sarg.conf文件 /#vi /usr/local/sarg/sarg.conf language language English /#由于官方网站还没有发布中文版,所以我们就使用英文好了,那位有兴趣可以自己翻译一下 access_log /usr/local/squid/var/logs/access.log.0 /#squid日志文件存放位置 title "Squid 使用报告" /#标题 temporary_dir /tmp /#临时目录 output_dir /var/www/html/sarg /#生成后的html存放到那里,设置到你的网站目录下,以便浏览 overwrite_report no /#是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉 mail_utility mail topsites_num 100 exclude_codes /usr/local/sarg/exclude_codes max_elapsed 28800000 charset GB2312 /#字符集 c.生成报告 设置好sarg.conf文件后,执行 /#/usr/local/sarg/bin/sarg 将提示:SARG: Successful report generated on /usr/local/apache/htdocs/sarg/2004Oct31-2004Nov01 表示报告生成成功,还有报告存放位置,可以马上打开您的浏览器查看报告了。 三、关于Cache目录的建议 由于cache目录是经常的读写,所以最好硬盘能用SCSI的,速度比较快而且稳定。如果我们的cache大概需要40G的大小,那么我们尽量使用多硬盘,不要当纯用一个40G的硬盘,可以使用4个10G的硬盘,这样,对于cache的速度更快。比如,当你有10M的东西要写到cache中,如果是只是用一个硬盘的话,虽然可能你已经将4个cache目录分别放在4个分区,可是你只有一个硬盘,同时只有一个在写入,可是当你有4个硬盘的时候,你每个硬盘就只要写入2.5M的东西,那样是不是更快呢? 还有,建议将每个cache目录单独存放在一个分区中,分区不要划分太大,一般2至4G就行,这样proxy搜索资料的时候不用耗费太多的时间。 本文参考了各位前辈的文章,如有冒犯请多多包涵!

标签: Squid 补充话题说明»

分享到 **

收藏 **

3 **

举报 **

0 | 0 **

按默认排序 | 显示最新评论 | 回页面顶部 共有1个评论 发表评论»

  • 隋济远

隋济远 回答于 2012-11-29 10:12

举报 学习了,非常感谢! 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

非会员用户 回评论顶部 | 回页面顶部

有什么技术问题吗? 我要提问 全部(4926)...红薯的其他问题

类似的话题

© 开源中国(OsChina.NET) | 关于我们 | 广告联系 | @新浪微博 | 开源中国手机版 | 粤ICP备12009483号-3 开源中国手机客户端: Android iPhone WP7

代理服务器Squid 使用详解

Posted on

代理服务器Squid 使用详解 - 51CTO.COM

分享到

百度分享

首页技术频道51CTO旗下网站地图

社区:论坛博客下载读书更多

登录注册

首页 | 思科 | 路由 | 交换 | 无线 | ADSL | VPN | 网管 | 布线 | 接入 | 全部文章

您所在的位置:网络频道 > 代理服务器Squid 使用详解

代理服务器Squid 使用详解

2006-01-17 13:55 nsfocus 我要评论(0) 字号:T | T

一键收藏,随时查看,分享好友!

做为眼下最流行的操作系统,Linux已经越来越受到世人的关注。虽然目前Linux的软件还不是很丰富,替代WINDOWS作为普通PC机操作系统还为时过早,但是在服务器领域,Linux的稳定性,可操作性决不输于任何操作系统,并且也有优秀的软件支持

AD: 2013大数据全球技术峰会低价抢票中

做为眼下最流行的操作系统,Linux已经越来越受到世人的关注。虽然目前Linux的软件还不是很丰富,替代WINDOWS作为普通PC机操作系统还为时过早,但是在服务器领域,Linux的稳定性,可操作性决不输于任何操作系统,并且也有优秀的软件支持 。Squid就是其中之一。Linux加Squid的组合做为代理服务器,性能远远超过WINNT加MSPROXY2.0(个人观点),为几百人的小型局域网代理绰绰有余。下面,我就详细的介绍Squid的安装及使用技巧,希望大家能够喜欢上它。 1.Squid简介

Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid 可以代理HTTP, FTP, GOPHER, SSL 和 WAIS 协议,暂不能代理POP, NNTP等协议。不过,已经有人开始修改Squid,相信不久的将来,Squid能够代理这些协议。

Squid能够缓存任何数据吗?不是的。象缓存信用卡帐号、可以远方执行的scripts、经常变换的主页等是不合适的也是不安全的。Squid可以自动的进行处理,你也可以根据自己的需要设置Squid,使之过滤掉你不想要的东西。 Squid可以工作在很多的操作系统中,如AIX, Digital Unix, FreeBSD, HP-UX, Irix, Linux, NetBSD, Nextstep, SCO, Solaris,OS/2等,也有不少人在其他操作系统中重新编译过Squid。 Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI硬盘,处理器要求不高,400MH以上既可。

  1. Squid的编译和运行 其实现在的Linux发行套件中基本都有已经编译好的Squid,你所作的就是安装它既可。如果你手头没有现成的编译好的Squid或想使用最新的版本,去ftp:squid.nlanr.net下载一份,自己编译。 Squid的编译是非常简单的,因为它基本上是自己配置自己。最容易出现的问题是你的系统上没有合适的编译器,这可以通过安装相应的编译器解决。如果出现其他问题,你可以问一下有经验的用户或到相应的邮件列表寻找帮助。 编译Squid之前,最好建一个专门运行Squid的用户和组。我就在自己的服务器上建了一个名为squid的用户和组,用户目录设为/usr/local/squid。然后su为用户squid并从squid.nlanr.net下载Squid的源文件到目录 /usr/local/squid/src中,用如下命令进行解压: %tar xzf squid-2.0.RELEASE-src.tar.gz %cd /usr/local/squid/src/ squid-/./.RELEASE / %./configure %make %make install

第一个命令在目录/usr/local/squid/src中产生一个新的子目录/squid-/./.RELEASE/。命令./configure会自动查询你的系统配置情况以及你系统中使用的头文件。不加参数的./configure会把Squid安装在目录/usr/local/squid中,如果你想使用其他目录,用如下命令./configure --prefix=/some/other/directory,这会把Squid安装在目录/some/other/directory中。make命令编译Squid,make install命令安装Squid。 不出意外的话,目录/usr/local/squid中会出现如下目录:

/bin /cache /etc /logs/ /src (自己创建的)

目录/bin中含有Squid可执行程序,包括Squid本身,ftpget等。 目录/cache包含Squid缓存的数据,其中包含象/00/ /01/ /02/ 以及/03/这样的目录,这些目录中还有子目录,因为目录多了比在一个目录成千上万的文件中寻找一个文件更容易,速度更快。 目录/etc中包含Squid的唯一的配置文件squid.conf。 目录/logs中包含Squid的日志。

  1. squid.conf文件的配置 在安装Squid后,在目录/usr/local/squid /etc中会自动产生一个样本squid.conf文件,文件中对每一个选项都有详细的说明,用户可以通过修改该文件以满足不同的需要。 总的来说,有如下几个重要选项: http_port:设定Squid监听的端口,你最好设一个比较好记的端口号,以便在进行客户机配置时容易记住。我的机器上端口号设的是8080。缺省为3128。 cache_mem:设定Squid占用的物理内存,根据我的经验,cache_mem的大小不应超过你的服务器物理内存的三分之一,否则将会影响机器的总体性能。 maximum_object_size:设定Squid可以接收的最大对象的大小。Squid缺省值为4M,我自己入认为太大,你可以根据自己的需要进行设定。 cache_dir:设定缓存的位置、大小。一般看起来形式如下“cache_dir /usr/local/squid/cache 100 16 256”。 /usr/local/squid/cache代表缓存的位置;100代表缓存最大为100M;16和256代表一级和二级目录数。 cache_effective_user:设定使用缓存的有效用户。缺省为用户nobody,如果你的系统中没有用户nobody,最好建一个或以非root用户运行Squid。 下面我给出一个最简单的squid.conf文件:

/#squid.conf - a very basic config file for squid /#Turn logging to it's lowest level debug_options ALL,1 /#defines a group (or Access Control List) that includes all IP addresses acl all src 0.0.0.0/0.0.0.0 /#define RAM used cache_mem 32M /#defines the cache size cache_dir /usr/local/squid/cache 100 16 256 /#allow all sites to use connect to us via HTTP http_access allow all /#allow all sites to use us as a sibling icp_access allow all /#test the following sites to check that we are connected dns_testnames internic.net usc.edu cs.colorado.edu mit.edu yale.edu /#run as the squid user cache_effective_user squid squid

这个配置文件允许所有人使用Squid,创建了100M缓存,使用32M内存,在缺省位置"/usr/local/squid/cache"缓存数据,所有缓存数据以组squid和用户squid身份保存,端口为3128。虽然这个配置很不安全,但是它已经能使用了。

  1. 运行Squid 首先以root身份登陆。运行如下命令: %/usr/local/squid/bin/squid ?z 该命令会产生Squid所有的缓存目录。 如果你想前台执行Squid,接着执行命令: %/usr/local/squid/bin/squid -NCd1 该命令正式启动Squid。如果一切正常,你会看到一行输出 Ready to serve requests. 如果想后台运行Squid,把它做为一个精灵进程,执行命令: %/usr/local/squid/bin/squid 观察Squid是否运行使用命令: % squid -k check 输出会告诉你Squid的当前状态。 好了,文章先写到这里,其实这里介绍的都是最基本的东西,Squid有好多高级的功能,如做WEB服务器的高速缓存,做二级代理服务器,做为防火墙,以及怎样设定过滤规则等,这里就不详述了,如果有机会再奉献给大家。(责任编辑:liucl)

给力 (47票)

动心 (42票)

废话 (49票)

专业 (42票)

标题党 (40票)

路过 (42票)

原文:代理服务器Squid 使用详解 返回网络频道首页

分享到:

1

收藏|打印|复制

关于代理服务器Squid的更多文章

谁来统领企业无线网络-最新802.11n无线路由综合评测 谁来统领企业无线网络-最新802.11n无线路由综合评测

从802.11n诞生以来,一直就没有正式案发布,现在市面上的802.11n[详细]

网友评论TOP5

查看所有评论(0)

提交评论 通行证: 密码: 注册通行证 验证码:点击图片可刷新验证码请点击后输入验证码匿名发表

栏目热门

更多>>

同期最新

更多>>

网络频道

频道导航

  • 热门

路由技术|交换网络|无线网络

  • 技术

布线技术|运维技术|接入技术

  • 专题

专题汇总|网管软件|网络控速

热点推荐

Android开发应用详解

那些性感的让人尖叫的程序员

HTML5 下一代Web开发标准详解

高性能WEB开发应用指南

Ubuntu开源技术交流频道

热门标签: windows频道移动开发云计算objective-ctp-link路由器设置图解html5

  1. 2013 RSA大会:掌控数据 保护世界
  2. 思科UCS助力医疗数据库部署优化

文章排行

本月本周24小时

热点专题

更多>>

  • 网管软件聚宝盆

网管软件聚宝盆

网络管理的定义非常广泛,随着互联网的不断发展,对网

  • 给力呀!负载均衡

给力呀!负载均衡

互联网的发展快得无法言喻,随之而来的各种应用更是层

  • 2010年中国十大布线品牌

2010年中国十大布线品

中国工程建设标准化协会信息通信专业委员会综合布线工

热点标签

局域网网速 IPv6 负载均衡 思科 交换机典型配置 VPN技术 路由器设置 家庭无线局域网 路由故障 网管软件 广域网优化 视频会议 MOVE无线 十大布线品牌 tenda无线路由器设置

《Linux运维趋势》第16期

Java路线图:甲骨文的两年计划

读书

软件架构设计

本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念,阐述了切实可行的软件架构设计方法,提供了可操作性极强

博文推荐

更多>>

最新热帖

更多>>

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone

Copyright©2005-2013 51CTO.COM 版权所有 未经许可 请勿转载 0

一张图讲清楚高可用、高性能、可扩展的WEB系统架构_移动Labs

Posted on

一张图讲清楚高可用、高性能、可扩展的WEB系统架构_移动Labs

体验更多Labs的内容请先登录! 如果您还未注册,现在马上注册吧!

关 闭

设为首页

| 邀请

| 提提建议

| 手机版

|

language

  • 中文
  • English
  • 日本語
  • Español 全站 轻博客 圈子 帖子 报告 视频

搜 索

登录 | 注册

圈子话题:

资料热点安卓大云圈LTE圈开发者圈

博 客聚焦:

最 新博文嘉年华名博行业名博移动人博客 子 门 户:

LTE资费云计算IMS物联网手机支付BAE

研究院社 会招聘移动用户体验​专区

Labs活动:

IMIC大会创新访谈 行业热点:

资讯运营 商互联网政策

RSS

体验更多Labs的内容请先登录! 如果您还未注册,现在马上注册吧!

关 闭

*

  • [首页

]()

]()

]()

]()

]()

]()

]()

轻博客首页 热门评论 热门转发 热门话题 全部博主

轻博客用户

# 一张图讲清楚高可用、高性能、可扩展的WEB系统架构

标签: 高可用、高性能、可扩展、系统架构、数据库

2012-11-27 18:43

前言:最近在与广东互联网基地一起进行无线城市集中平台的建设,在系统设计、架构调优上做了很多的探索,也在系统集成测试和性能调优中遭遇了很多的烦恼,心里有一些所得所悟,希望与大家共同学习探讨。

WEB系统最容易出现性能故障的点在哪里? 有很多人对此不知其然,或知其然而不知其所以然。

下面这张图,是在一个大型的WEB系统设计中,经典的架构设计和分层模式。

1) 前端负载均衡: 有钱的用硬件四层交换(想当年雅虎中国2000台服务器,只用了四台Alteon就搞定了),没钱的用软件负载均衡(LVS、Nginx)

2) 多级缓存:首先要充分利用浏览器的缓存能力,也就是Cookie,然后要在服务端利用页面缓存机制,前些年大家喜欢用Squid,现在Varnish更流行起来了,有一个牛逼的故事是挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 Varnish 最成功的应用案例。 最后一个缓存点是在数据库前方设置,让那些经常需要被查询,但是实时性要求不那么高的数据缓存起来,避免对数据库的频繁查询。三级缓存可以有效的提升整个系统的性能。

3)应用服务器层面:先考虑一下你的静态页面与动态页面的占比,然后考虑一下如何尽量实现动态页面静态化,把静态的部署到Apache上,动态的部署到Tomcat上吧。如果你是一个像Flicker那样的图片共享网站,必须考虑设置单独的图片服务器,这是淘宝血泪史告诉我们的真理。

4)现在要考虑数据库的选型问题了:采用关系型数据库还是非关系型数据库完全取决于你的业务场景,如果你要实现实时要求高,数据一致性要求高的场景,关系型数据库;如果你要实现海量数据的查询和高并发,非关系型数据库(考虑Facebook一张表有一亿用户,如果用关系型数据库查询。磁盘IO也快撑不住了,而非关系型数据库则完全没有这个问题);

5)数据库性能问题之外务必考虑清楚数据库的并发性能:通常会采用生产数据库与查询数据库分离的方式,也就是著名的MySQL的单主多从服务方式。为了实现高可用性HA,有的网站比如淘宝网,在Master之间也会实现集群部署。

6)数据库集群和库表散列: 上面提到的数据库集群由于在架构,成本,扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案,在应用程序中将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户 ID 进行表散列,这样就能够低成本的提升系统的性能并.且有很好的扩展性,sohu 的论坛就是采用了这样的架构.

权限:公开 来自:labs

<<上一篇 一张图讲清楚Native APP、WEB ... 微信蚕食运营商?看国外运营商... 下一篇 >> 阅读全文:3423 | 转发(0) | 评论(0)

分享到: 新浪微博 搜狐微博 抽屉 飞信

全部

暂无评论

Labs推荐给你的相关资讯

博文

新闻

帖子

看过此博文的还看过

王磊建

地区:宣武区西便门内大街53号甲 公司:中国移动研究院业务研究所

行业: 详细个人资料>>

RSS

关注 19 粉丝 18 博文 12 总访问量:32574

他的标签

SaaS html5 web app APP、PhoneGAP native APP、WEB APP、Hybrid APP、HTML5 高可用、高性能、可扩展、系统架构、数据库 OTT 数字证书 非对称性加密 对称性加密 数字签名 join指令 Join操作 关系型数据库 Join子句 MySQL 他关注的更多>>

黄晓庆 +加关注

颜红燕 +加关注

魏一平 +加关注

王晓云 +加关注

杨志强 +加关注

霍曦 +加关注

刘险峰 +加关注

孙少陵 +加关注

cindyhuang +加关注

关注他的更多>>

物联网实验室 +加关注

yewendong +加关注

tiecheng19780504 +加关注

天凡 +加关注

二两迷糊 +加关注

我ok +加关注

爱哦优 +加关注

人在移动 +加关注

国柱 +加关注