辛星站点构架师笔记第五篇即缓存具体解释
前面我们介绍了缓存技术,可是对于单纯的使用缓存技术是不够的,还须要掌握一下对于提高站点的性能、减轻由于大量訪问而给后台应用带来巨大压力的应用技术,也就是缓存技术。
首先说一下什么是缓存吧,缓存一般也就是成为cache,系统的缓存和硬件设备的缓存作用一样。用来临时存放须要处理的数据。由于我们知道,从缓存读取的速度要远远高于从硬盘读取的速度。所以缓存server存储的数据越多,后台应用server的压力就越小,性能也就会越高。
而站点缓存的目的就是为了提高站点的性能,加快訪问速度。合理的缓存某种类型的数据,能够减轻系统的负载。
因为操作内存中的数据会比操作硬盘上的数据要快得多。这也就是眼下站点加速所使用的最基本的方式。假设使用代理或者缓存server来实现,站点在不须要做不论什么修改的情况下,就能够有非常明显的加速效果。
缓存的基本方式就是将制定的网页元素周期性的缓存起来,缓存的时间能够从几秒到几天不等。在缓存时间内。页面仅仅须要生成一次,然后每当实用户訪问这个页面的时候,站点server和数据库就不须要又一次生成同样的页面了,这就大大地降低了站点server和数据库的负担。
假设一个热点页面一小时被訪问10000次。假设这个页面每次被訪问都会通过读取后台数据库而且再一遍遍地编译生成的页面。那么一个小时内就须要反复生成一万次页面,效率是相当低的。假设这个页面被周期性的缓存十分钟,也就是每十分钟生成一次,那么一个小时内仅仅须要生成六次。这两种方式哪个效率高。哪个效率低,是不是一目了然呢?
眼下站点缓存主要有两种方式。第一种就是内存缓存,数据存放在server的内存空间中。这种模式的效率最高,可是我们不能盲目的把全部数据都载入到内存中。毕竟server的资源也是有限的。还有一种就是文件缓存,数据一般是存放在server的硬盘空间中的。能够存放多种格式类型的文件,比方txt、css、js、jpg等等。可是须要注意的是,serverIO的处理能力是有限的,当一次性读取过大的数据时,效率就会大打折扣。这就须要一种合理的文件结构来解决这种问题。
以下我们介绍一下Squid把,它是一种高性能的缓存server,支持FTP、HTTP等协议。并且Squid是用单独的、非模块的、IO驱动进程来处理全部的client请求。
Squid将数据元素缓存在内存中,同一时候也缓存DNS查询的结果。Squid不仅支持非模块化的DNS查询,还对失败的请求进行消极缓存,也支持SSL和訪问控制规则,因为使用了ICP(轻量级Internet缓存协议),Squid可以实现层叠的代理阵列,从而最大限度地节约宽带。
以下说一下它的工作流程吧。它由一个基本的服务程序Squid。一个DNS查询程序、几个重写请求和运行认证的程序。
Squid启动后,能够派生出预先制定数目的DNSServer进程,每个DNSServer进程都能够单独的DNS查询。这样一来就大大降低了server等待DNS查询的时间。
Squid的代理server能够分为例如以下几种:第一种就是普通的代理server,标准的代理server被用于缓存静态的网页,当被缓存的网页第二次訪问的时候。浏览器将直接从本地代理server获取请求数据而不用再次向后端webserver发送请求,这样不仅节省了宽带,还提高了訪问速度。要实现这样的方式,比方在每一台内部主机的浏览器上明白指明server的IP地址和port号。client上网的时候,每次都把请求发送给Squiddialingserver处理。代理server依据请求确定是否连接到远程webserver获取数据,假设本地区有目标文件,则直接将文件传递给用户就可以。假设没有就先取过来一份,而且在本地保存一份。然后将文件发送给client浏览器。
另外一种就是透明代理server,透明代理server和标准代理server的功能全然同样,仅仅是代理操作对client的浏览器也是透明的,也就是说不须要指明代理server的IP和port。透明代理server阻断网络通信,而且过滤出訪问外部的HTTP流量。假设缓存server又client的请求信息,则缓存server直接将数据发送给用户,假设缓存server上没有client的请求信息,则向远程server发出请求,其余操作和标准的代理server全然同样。
第三种就是反向代理server了。它和前两种的原理是不同的,它的目的是减少原始webserver的负载。
反向代理server承担了对原始webserver的静态页面请求,防止原始server负载过高。反向代理server位于本地webserver和Internet之间。处理全部对webserver的请求,假设代理server上有web请求的页面,则直接将内容发送给用户,假设没有则先向webserver发出请求,取回数据,经过本地缓存之后再发给用户,这样的方式减少了向webserver的请求次数而减少了webserver的负载。
明确了上述原理,我们还须要了解几个缓存管理的概念。Cache命中,也就是在Squid每次中期缓存中满足HTTP请求时发生,Cache命中率,也就是全部的HTTP请求中命中的比例,Cache丢失,也就是在Squid不能从缓存里满足HTTP请求时发生,发生这样的现象的原因有非常多:比方Squid第一次收到关于某特殊资源的请求。就会出现一个Cache丢失,另外一种原因就是由于Squid会清除缓存以释放空间给新对象。
Sarg是一款Squid日志分析工具。使用html的格式,列出了每一位用户訪问internt的网站信息、时间占用信息、排名、连接次数、訪问量等等。
Varnish是还有一款高性能的、开源的反向代理server和缓存server,其开发人员也是FreeBSD的核心开发人员之中的一个,它採用了全新的软件体系结构。和如今的硬件体系配合比較紧密。
因为我们的计算机的内存除了主存之外,还包含CPU的L1级缓存、L2级缓存,甚至还会包含L3级缓存。硬盘也有缓存,而Squid的架构导致其无法做到最佳存取,可是操作系统能够做到,这部分活交给操作系统去做。这就是Varnish Cache的设计架构。
当中非常典型的一个样例就是挪威最大的在线报纸公司使用了三台Varnishserver取代了原来的12台Squidserver。并且性能反而更好了,足以看出Varnish的优秀之处。
那么Varnish相比Squid有什么长处呢?第一点就是稳定性更好。两者在完毕同样负载的工作时,Squidserver发生问题的几率要高于Varnish。也就是Squid须要常常重新启动才行。第二点就是Varnish的訪问速度更快。它採用了visual page cache技术。全部缓存的数据都直接从内存读取。
而Squid从硬盘读取缓存的数据,所以,Varnish在訪问速度上快一些。
第三点就是Varnish支持更高的并发连接,第四点就是Varnish能够通过管理port来管理缓存,使用正則表達式就能够批量清除部分缓存,而Squid则做不到这一点。
那么Varnish的主要缺点是什么呢?第一点就是在高并发状态下,CPU和IO以及内存资源的开销都高于Squid,并且Varnish的进程一旦被挂起、崩溃或者重新启动,缓存的数据就会从内存中释放出来,此时给后端造成非常大的压力。
总之,我个人感觉Varnish代替Squid仅仅是一个时间问题,期待它做的更好。加油。关于它们的使用。请到时候关注我的教程吧。