分类目录归档:项目优化

Squid

一、Squid简介与原理分析
1、Squid
Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。

2、Squid典型的代理服务
(1)标准的代理缓冲服务器
(2)透明代理缓冲服务器
(3)反向代理缓冲服务器

3、反向代理工作原理
反向代理服务器位于本地WEB服务器和Internet之间,当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理请求。反向代理一般只缓存可缓存的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP标记:
#Last-Modiffied:告诉反向代理页面什么时间被修改
#Expires:告诉反向代理页面什么时间应该从缓冲区中删除
#Cache-Controll:告诉反向代理页面是否应该被缓冲
#Pragma:告诉反向代理页面是否应该被缓冲

4、CDN实现拓扑图
CDN achieve topology

5、Squid反向代理拓扑
Squids reverse proxy topology

二、大型网站缓存介绍及灾难预警

缓存
在计算机系统中,缓存有很多种。比如CPU内部的一级缓存、二级缓存。文件系统的缓存,磁盘的缓存。在大型网站的后台部署过程中,也灵活运用了各级缓存。主要有客户端的浏览器缓存,服务器端的web server自身缓存,代理缓存,分布式缓存,数据库自身的缓存等。

缓存分类及优势
一、本地缓存 和应用服务争夺内存 速度快

二、远程缓存 理论上内存不受限制(分布式缓存)速度较本地慢
1、Squid功能全而大,适合于各种静态的文件缓存,国内的top2CDN厂商是基于拿squid做的商业改造,但受限于仅支持单进程(虽然squid3.2也开始支持SMP了:http://wiki.squid-cache.org/Features/SmpScale),因此一般会在前端挂一个HAProxy或nginx做负载均衡跑多个实例。
2、Varnish由于是内存cache,所以对小文件如css,js,小图片的支持很好,sina就是用的varnish,后端的持久化缓存可能采用的是squid或ats
3、nginx的代理功能只是它的一个模块功能,功能相对前两者目前还完全无法替代,但未来充满期待。
4、还有apache trafficserver,专业的代理,相对squid,它支持多cpu,国内阿里,youku,sina等厂商都在用,感兴趣可以去Apache Traffic Server ATS
The cache is

三、缓存面临的问题
一致性和实时性
一个很直观的场景就是,数据库中的数据状态已经改变,但是用户在页面上看到的仍然是缓存的旧值。
一般来说,缓存数据本身都是保持在内存中的,例如淘宝内部大量使用tair系统(已开源)。tair拥有若干服务器,这些服务器内存都很大,可以存放大量数据。当然,考虑到内存的易失性,tair一般来说不能存放重要的数据。
Tair:http://tair.taobao.org/

四、什么样的数据可以放缓存
1、不需要实时更新但是又极其消耗数据库的数据。比如统计数据,排行榜。
2、js,css,image等文件
3、使用频率很高的一些程序对象。

五、缓存灾难
故障现象:没有新应用发布,但是数据库服务器突然Load飙升,并很快失去响应。DBA将数据库访问切换到备机,Load也很快飙升,并失去响应。最终引发网站全部瘫痪。
原因分析:缓存服务器在网站服务器集群中的地位一直比较低,服务器配置和管理级别都比其他服务器要低一些。人们都认为缓存是改善性能的手段,丢失一些缓存也没有什么问题,有时候关闭一两台缓存服务器也确实对应用没有明显影响,所以长期疏于管理。结果这次一个缺乏经验的工程师关闭了缓存服务器集群中全部的十几台Memcached服务器,导致了网站全部瘫痪的重大事故。
经验:当缓存已经不仅仅是改善性能,而是成为网站架构不可或缺的一部分时,对缓存的管理就需要提高到和其他服务器一样的级别。

一、大型网站架构重点

1、高性能
响应时间,TPS,系统性能计数器等。缓存,消息队列等。

2、高可用性High Availability 99.99% 7×24
衡量标准:假设环境中一台或多台服务器宕机,服务是否依然可用。
解决关键办法:冗余。资源定位,健康检查、负载均衡,关键服务器主备冗余–WEB DB,及时有效的监控和报警

3、高伸缩性[高可维护性]
是否可以用多台服务器构建集群,是否容易向集群添加新服务器,新服务是否可提供相同的服务,总服务器是否有限制。

4、高扩展性
网站添加新的业务时是否可以实现对现有产品透明无影响,不需要做任何改动。数据库切片,基础模块独立服务(用户系统)等。

5、高安全性
针对现在的攻击及窃密否有良好的策略应对。

Open type site topology analysis