辛星网站构架师笔记第五篇即缓存详解

前面我们介绍了缓存技术,但是对于单纯的使用缓存技术是不够的,还需要掌握一下对于提高网站的性能、减轻因为大量访问而给后台应用带来巨大压力的应用技术,也就是缓存技术。

首先说一下什么是缓存吧,缓存一般也就是成为cache,系统的缓存和硬件设备的缓存作用一样,用来暂时存放需要处理的数据,因为我们知道,从缓存读取的速度要远远高于从硬盘读取的速度,所以缓存服务器存储的数据越多,后台应用服务器的压力就越小,性能也就会越高。

而网站缓存的目的就是为了提高网站的性能,加快访问速度,合理的缓存某种类型的数据,可以减轻系统的负载。由于操作内存中的数据会比操作硬盘上的数据要快得多,这也就是目前网站加速所使用的最主要的方式。如果使用代理或者缓存服务器来实现,网站在不需要做任何改动的情况下,就可以有很明显的加速效果。

缓存的基本方式就是将制定的网页元素周期性的缓存起来,缓存的时间可以从几秒到几天不等,在缓存时间内,页面只需要生成一次,然后每当有用户访问这个页面的时候,网站服务器和数据库就不需要重新生成相同的页面了,这就大大地减少了网站服务器和数据库的负担。

假设一个热点页面一小时被访问10000次,如果这个页面每次被访问都会通过读取后台数据库并且再一遍遍地编译生成的页面,那么一个小时内就需要重复生成一万次页面,效率是相当低的。如果这个页面被周期性的缓存十分钟,也就是每十分钟生成一次,那么一个小时内只需要生成六次。这两种方式哪个效率高,哪个效率低,是不是一目了然呢?

目前网站缓存主要有两种方式,第一种就是内存缓存,数据存放在服务器的内存空间中,这种模式的效率最高,但是我们不能盲目的把所有数据都加载到内存中,毕竟服务器的资源也是有限的。另一种就是文件缓存,数据通常是存放在服务器的硬盘空间中的,可以存放多种格式类型的文件,比如txt、css、js、jpg等等,但是需要注意的是,服务器IO的处理能力是有限的,当一次性读取过大的数据时,效率就会大打折扣。这就需要一种合理的文件结构来解决这样的问题。

下面我们介绍一下Squid把,它是一种高性能的缓存服务器,支持FTP、HTTP等协议,而且Squid是用单独的、非模块的、IO驱动进程来处理所有的客户端请求。Squid将数据元素缓存在内存中,同时也缓存DNS查询的结果,Squid不仅支持非模块化的DNS查询,还对失败的请求进行消极缓存,也支持SSL和访问控制规则,由于使用了ICP(轻量级Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约宽带。

下面说一下它的工作流程吧,它由一个主要的服务程序Squid,一个DNS查询程序、几个重写请求和执行认证的程序。Squid启动后,可以派生出预先制定数目的DNSServer进程,每一个DNSServer进程都可以单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。

Squid的代理服务器可以分为如下几种:第一种就是普通的代理服务器,标准的代理服务器被用于缓存静态的网页,当被缓存的网页第二次访问的时候,浏览器将直接从本地代理服务器获取请求数据而不用再次向后端web服务器发送请求,这样不仅节省了宽带,还提高了访问速度。要实现这种方式,比如在每一台内部主机的浏览器上明确指明服务器的IP地址和端口号。客户端上网的时候,每次都把请求发送给Squiddialing服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据,如果本地区有目标文件,则直接将文件传递给用户即可。如果没有就先取过来一份,并且在本地保存一份,然后将文件发送给客户端浏览器。

第二种就是透明代理服务器,透明代理服务器和标准代理服务器的功能完全相同,只是代理操作对客户端的浏览器也是透明的,也就是说不需要指明代理服务器的IP和端口。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP流量。如果缓存服务器又客户端的请求信息,则缓存服务器直接将数据发送给用户,如果缓存服务器上没有客户端的请求信息,则向远程服务器发出请求,其余操作和标准的代理服务器完全相同。

第三种就是反向代理服务器了,它和前两种的原理是不同的,它的目的是降低原始web服务器的负载。反向代理服务器承担了对原始web服务器的静态页面请求,防止原始服务器负载过高。反向代理服务器位于本地web服务器和Internet之间,处理所有对web服务器的请求,如果代理服务器上有web请求的页面,则直接将内容发送给用户,如果没有则先向web服务器发出请求,取回数据,经过本地缓存之后再发给用户,这种方式降低了向web服务器的请求次数而降低了web服务器的负载。

明白了上述原理,我们还需要了解几个缓存管理的概念,Cache命中,也就是在Squid每次中期缓存中满足HTTP请求时发生,Cache命中率,也就是所有的HTTP请求中命中的比例,Cache丢失,也就是在Squid不能从缓存里满足HTTP请求时发生,发生这种现象的原因有很多:比如Squid第一次收到关于某特殊资源的请求,就会出现一个Cache丢失,第二种原因就是因为Squid会清除缓存以释放空间给新对象。

Sarg是一款Squid日志分析工具,使用html的格式,列出了每一位用户访问internt的站点信息、时间占用信息、排名、连接次数、访问量等等。

Varnish是另一款高性能的、开源的反向代理服务器和缓存服务器,其开发者也是FreeBSD的核心开发人员之一,它采用了全新的软件体系结构,和现在的硬件体系配合比较紧密。由于我们的计算机的内存除了主存之外,还包括CPU的L1级缓存、L2级缓存,甚至还会包括L3级缓存,硬盘也有缓存,而Squid的架构导致其无法做到最佳存取,但是操作系统可以做到,这部分活交给操作系统去做,这就是Varnish
Cache的设计架构。

其中很典型的一个例子就是挪威最大的在线报纸公司使用了三台Varnish服务器代替了原来的12台Squid服务器,而且性能反而更好了,足以看出Varnish的优秀之处。

那么Varnish相比Squid有什么优点呢?第一点就是稳定性更好,两者在完成相同负载的工作时,Squid服务器发生故障的几率要高于Varnish,也就是Squid需要经常重启才行。第二点就是Varnish的访问速度更快,它采用了visual page cache技术,所有缓存的数据都直接从内存读取。而Squid从硬盘读取缓存的数据,所以,Varnish在访问速度上快一些。第三点就是Varnish支持更高的并发连接,第四点就是Varnish可以通过管理端口来管理缓存,使用正则表达式就可以批量清除部分缓存,而Squid则做不到这一点。

那么Varnish的主要缺点是什么呢?第一点就是在高并发状态下,CPU和IO以及内存资源的开销都高于Squid,而且Varnish的进程一旦被挂起、崩溃或者重启,缓存的数据就会从内存中释放出来,此时给后端造成很大的压力。

总之,我个人感觉Varnish取代Squid只是一个时间问题,期待它做的更好,加油!关于它们的使用,请到时候关注我的教程吧。

时间: 2024-08-27 18:12:35

辛星网站构架师笔记第五篇即缓存详解的相关文章

辛星网站构架师笔记第三篇

下面大家跟着辛星来认识一下Nginx把,它是一个跨平台的服务器,但是它和传统的服务器不同的是,它不依赖于线程处理请求,它有自己的扩展性更强的驱动(异步)架构,因此它更加适合在高流量的网站.而且它还可以作为一个负载均衡器,它可以在内部直接支持Rails和PHP程序的,而且它也可以作为一个HTTP代理服务器对外进行服务.Nginx使用C语言写成. 我们上一节介绍了LVS,那么两者的区别是什么呢?第一点就是因为lvs的工作方式简单,它只是负责请求的分发,而且工作在网络的第四层,因此其负载能力强,不会产

辛星网站架构师笔记第四篇

本节我们了解一下web服务器,要说到web服务器,恐怕还不能不提一下大名鼎鼎的Apache,这个神一样的服务器仍然占据着至少一半的市场.Apache原来用于小型或者是实验性的Internet网络,后来逐步扩展到各种系统中去,对linux的支持近乎完美.Apache可以支持SSL技术,支持多态虚拟主机.而且它是以进程为基础的结构,而进程比线程使用更多的系统资源,因此不适用于多处理器环境. 如果网站的访问量很大,那么每天的日志文件也会很大,这时候可以使用Apache自带的rotetelogs来对日志

辛星网站构架师笔记第一篇

说道网站的硬构架,首先说到的就是机房的选择,然后就是宽带的大小,然后就是服务器的划分,服务器通常分为图片服务器.页面服务器.数据库服务器.应用服务器.日至服务器等等.而对于网站的软架构,首先可以有框架的选择,然后还有逻辑的分层. 对于网站优化,第一要考虑的就是html静态化,对于一个大型的网站来说,使用一套高效的CMS是很重要的,第二要考虑的就是图片服务器分离,因为图片服务器是最消耗资源的,第三个要考虑的就是数据库集群和库表散列,第四个就是缓存,首先就是软件层的缓存,比如apache的缓存模块和

辛星网站构架师笔记第二篇

LVS是基于Linux系统的服务器集群解决方案,它的目标就是创建一个具有较好的扩展性.较好的可靠性.较高的性能的一个体系,很多商业的集群产品,都是基于LVS技术来实现的. LVS的核心就是通过一组服务器来进行负载均衡,通过前端的负载调度器,把请求无缝的调度到真实的服务器上,那么这样的话客户端是感受不到的.它的伸缩性就是在集群中加入或者删除节点来实现,通过检测节点或者服务进程的故障并且正确的设置来达到系统的高可用性,由于这个负载调度是在Linux内核中完成的,因此被称之为Linux 虚拟服务器,也

辛星漫谈构架师之魂

构架师是一个比较特殊的岗位,虽然也有"构架师已死"的言论,但是毫无疑问,很多公司还是有构架师这个岗位的.架构师还是蛮重要的,往往他们的高度决定了公司的技术高度,特别是中小型公司,而他们的决策也往往会直接决定了团队的开发模式和工作量的大小. 如果把职场必做战场,那么构架师就可以理解为"将军"或者"元帅",所谓"千军易得,良将难求",也有"一将无能,累死千军"的说法.构架师也是形形色色的,我们从几个角度去研究研

(赵小明RHCE笔记)linux基础之四 权限详解

一.special permissions for executables1.special permissions for executables:  -suid:command run with permissions of the owner of the command,not executor of   the command  -sgid:command runs with group affiliation of the group of the commandeg:file:us

java笔记--反射进阶之总结与详解

一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是我们仍然可以用java的反射机制来 修改类的私有域,由于修改类的私有域会破坏Java"封装"的特性,故请慎重操作. 主要技术:     Field类提供有关类或接口的单个字段的信息,以及对它的动态访问权限.     访问的字段可能是一个类(静态)字段或实例字段.             常

支持向量机(SVM)(五)-- SMO算法详解

一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练            数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问题的提出: 3.如何选取最优的划分直线f(x)呢? 4.求解:凸二次规划 建立拉格朗日函数: 求偏导数: B.线性不可分问题 1.核函数 如下图:横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类. 设: g(x)转化为f(y)=<a,y> g(x)=

笔记-[1]-DOM的节点操作详解.

DOM:文档对象模型 操作DOM基本就是操作DOM的元素节点. 节点的属性: 1:objElement.childNodes  :获取该元素对象的的节点集合,有length长度属性,在标准浏览器下使用,会辩认文本节点的节点,一般不用,有其他的更好的属性(children) 2:objElement.children :     获取该元素对象的的节点集合,有length长度属性,在ie8下和其他标准浏览器兼容,只获取元素节点. 3:obj.nodeType   :获取对象的节点类型,1为元素节点