文档章节

高性能平台-Web服务器缓存(1)

小洋哥
 小洋哥
发布于 2014/06/06 22:59
字数 1950
阅读 901
收藏 6

 /**
                *   web服务器缓存响应结果
                *
              1.web服务器本质就是URL映射
            
               模拟场景:
            
                 当Browser(浏览器)==》WebServer 发送请求后
            
                  WebServer的(剥开很多实际过程进入到本质)工作:
                           1.解析URL
                           2.完成URL到实际内容或者资源的映射(URL对应内容或者资源)
                           3.处理请求并生成响应内容的过程

                  明白了WebServer的工作,我们大体就能明白URL映射了
                
                   这一个系列工作就好比
                     http:xxx.xx.xxx/xx/ss/xx/xxx.html   ====>  (具体磁盘上的资源)
                   这是一个对应关系

                 2.缓存响应结果

                     大家也许想到了,我们为什么不把这些对应的关系缓存器来呢?
                     例如很多时候,一个URL在比较长的时间里对应一个唯一的响应内容
                     列如静态内容或者更新不频繁的的动态内容,如果缓存下来,下次Web服务器便可以在下次收到请求后立即拿出缓存好的响应结果内容返回给浏览器,那么这一个操作行为是在所有的操作步骤之上完成的,那么相应的会节省时间与提高性能.
                   
                  3.怎么实现?

                        1.首先弄清楚,缓存内容应该存储在什么地方
                         一般来说: 俩地方本机内存与磁盘上
                         也可以采用分布式设计,存储到其他服务器上内存与磁盘

                       主流的Web服务器基本上都可以提供类似的服务
                             
                        Apache: 提供2个扩展   
                        mod_disk_cache: 提供磁盘缓存存储引擎(用磁盘存储)
                    
                        mod_mem_cache 提供内存缓存存储引擎(用内存存储)
                        
                        注意1 :在启用上面两个扩展之间一定要开启mod_cache.so扩展,因为这是存储缓存管理的主程序,
                        你可以理解为入口程序, 这里面管理了这个两种存储引擎
                       注意2: mod_mem_cahe模块的使用
                        主要是   Mod_mem_cahe实现 机制导致它在Apache多进程模型下共享内存的开销比较大

                        官方推荐是使用mod_disk_cache,他是多个进程共享缓冲区,并且由于缓冲区与内存映射的关系
                        访问速度要超过Mod_mem_cache


                        另外Lighttpd ,NIginx也有类似的缓存机制,比如 lighttpd 提供 mmod_trigger_b4_dl 模块可以在响应数据输出之前将它缓存到Memcahce缓存服务器中,并随后请求的Url映射之间检查缓存,本质是相同
                             
                            
                           注意:配置前,我要求对一个静态文件进行压力test.

                             压力 test工具为 ab.exe
                           简单说一下ab工具使用,主要用测试平台的吞吐率等

                           cmd>ab.exe –n 请求总次数  -c 并发数 请求页面的url

                            或者进入到apache的bin目录中


                            举例:    并发请求为10   总请求为1000  在未使用web缓存前 的并发test
                            cmd>ab.exe  -n 1000 -c 10 http://localhost/RenMeng/index.html

                         test结果:

配置:

         注意:看手册上面有毕竟详细的配置,也介绍
                         我在windows上 test的, Linux要先编译一下,(这个东西没必要说了吧)
                         配置具体都类似
                         配置我是从手册上拷贝下来的  用了IF判断语句的,可以直接用, 我只是说一下
                         磁盘缓存引擎的配置,内存缓存引擎哥们你们自己去看手册就可以了,而且手册里面非常详细介绍,并且还有其他的用法与指令,我无法全部说明


LoadModule cache_module modules/mod_cache.so

                            <IfModule mod_cache.c>
                            #LoadModule disk_cache_module modules/mod_disk_cache.so
                            # If you want to use mod_disk_cache instead of mod_mem_cache,
                            # uncomment the line above and comment out the LoadModule line below.
                            <IfModule mod_disk_cache.c>
                            #CacheRoot 指定缓存内容的存储目录
        
                                CacheRoot F:/PHPenv/Apache1/CacheRoot

                                #CacheEnable   指示缓存的指定了缓存引擎
                                # "/"意思的是缓存将根目录下的所有的请求都进行缓存
                                # 比如:你只是想缓存站点下的某一个目录,比如图片目录
                                #  那么就这么配置   CacheEnable  disk / images
                                CacheEnable disk /

                                #CacheDirLevels  
                                 #CacheDirLength
                                 #  这两个参数,指定缓存目录分级结构,为减少同一 个目录有大量文件的查找开销,

                                CacheDirLevels 5                                
                                CacheDirLength 3
                            
                            </IfModule>

                            LoadModule mem_cache_module modules/mod_mem_cache.so
                            <IfModule mod_mem_cache.c>
                            CacheEnable mem /
                            MCacheSize 4096
                            MCacheMaxObjectCount 100
                            MCacheMinObjectSize 1
                            MCacheMaxObjectSize 2048
                            </IfModule>

                            # When acting as a proxy, don't cache the list of security updates
                            CacheDisable http://security.update.server/update-list/
                            </IfModule>

                            配置完毕后重启,

                         手动请求页面http://localhost/RenMeng/index.html  并生成缓存

                           截图

具体说一下

navjMyA.data缓存的正文信息就是内容
navjMyA.header  http头信息

分开存储的好处是,缓存过期检查提供了方便,只需要检查HTTP头信息的文件即可

现在压力test的结果


看一下test结果那么我们很轻易的看了性能的提升


补偿说一下

其实单纯的html页面,性能的提升并不是很让人惊讶的,

我说一个,高性能平台或者大规模分布式都会用的,
”动态内容缓存“
就本人粗浅的了解一般是用分布式memcache来做,memcache其实不是性能最优的选择,但是基本上大型平台都会用他,主要是memcache能分布式开发,综合来说用他比较好。
最优选择是APC ,
顺便说一下APC分:
           1.数据缓存方法 (这个东西就专门用来缓存动态内容的)
           2.Opcode缓存功能 (这东西用来做脚本加速的,说白说本质就是把代码弄成二进制。把搞成编译型的)

我想说一下APC缓存,是动态程序自身实现的缓存机制的最好表现了,
它比Xcache ,memcahe分布式 ,比硬盘缓存的性能都高很多。
不好意思,本PC无法进行test,但是确实是这样的。
但是无法做分布式开发,所以大家最后选择memcahe来做,
但是他的性能确实是最好的,相比与其他的。

但是我想说如果web服务器缓存与APC缓存相比来说话,以动态内容为例子
首先我无法给出Test结果,但是我能肯定,
web服务器缓存比Apc缓存的性能至少高出2个倍

惊讶吧!就是至少高出2倍,

大家应该很难相信我说的是动态内容的缓存结果

我虽然无法给出测试数据,但是我讲一下原理,你们肯定能认同

比如:
1.我们现在访问一个http:xxx.xx.com/index.php?xa=2&xs=4&xd=cc
2.要连接数据库,先数据库进行查询

APC怎么做,在Linux平台上tracer工具对进程进行追踪话更好能体现我说的
把代码缓存起来,说白了只是代码,对数据库还一样的请求,

web服务器缓存呢,从,磁盘的角度来看,他实际上只是对静态文件的请求
同志们明白了吧。单纯性能来说非常好,

但是也有个问题,这个问题很致命

原本动态内容请求会很快获得缓存,
但是它如何知道缓存是否过期,以及如何控制缓存的有效期的,毕竟是动态内容呢。

下回再来唠叨这个问题,其实看手册也能知道的,算了,我刚才介绍了一下,内容与HTTP头分开存储的,

http头中标记就是判断过期检查的

 备注:   
 顺便说一个Web服务器做反向代理(Reverse Proxy),
 就是webserver工作的第一步后,进行将请求转发到后端的服务器,这会增加网络IO开销,以后有时间会专门讨论这一问题。


待续.....................

© 著作权归作者所有

共有 人打赏支持
小洋哥
粉丝 23
博文 73
码字总数 39565
作品 0
成都
程序员
私信 提问
LAMP网站架构分析

转自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网 络服务器,MySQL数据库,P...

长征4号
2017/07/05
0
0
服务器后端开发系列——《实战Nginx高性能Web服务器》

1、高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例 内容:概述Nginx的背景知识和简单的入门实例。 2、高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“...

晨曦之光
2012/04/24
251
0
大型高性能ASP.NET系统架构设计

大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。 大型动态...

Midnight
2012/12/24
0
1
使用Nginx+Lua进行Web开发

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Lua由标准C编写而成,几乎在...

醉人的笑容你有没有
2016/04/17
613
0
大型Web系统架构

动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓...

ugali
2017/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

hanlp在Python环境中的安装失败后的解决方法

Hanlp是由一系列模型与算法组成的javag工具包,目标是普及自然语言处理再生环境中的应用。有很多人在安装hanlp的时候会遇到安装失败的情况,下面就是某大神的分享的在python环境中安装失败的...

左手的倒影
20分钟前
0
0
【更新】Infragistics Ultimate UI for WPF v18.2(二):分类图

下载Infragistics Ultimate UI for WPF最新版本 Infragistics Ultimate UI for WPF是一款提供高速的网格和图表,轻松创建仿Office应用程序的WPF界面框架,从广度和深度两方面使得开发者在缩短...

电池盒
20分钟前
0
0
android沉浸式状态栏封装—教你玩出新花样

项目中我们有时候都要用的透明状态栏(这里也成沉浸式状态栏),今天介绍一个gyf-dev写的一个封装状态栏开源框架 效果图如下: 正文 从Android4.4开始,才可以实现状态栏着色,并且从5.0开始...

终端研发部
21分钟前
0
0
Java关键字之transient、native

transient Java中提供Serilizable接口,实现该接口的对象就可以被序列化。如果这个类的有些属性不需要被序列化,使用transient关键修饰字段即可。 native native关键字说明其修饰的方法是一个...

勇敢的飞石
23分钟前
0
0
canal 修改mysql数据后Java客户端无反应的问题解决方案

canal client例子: package com.study.canal;import java.net.InetSocketAddress;import java.util.List;import com.alibaba.otter.canal.client.CanalConnector;import com.al......

xtof
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部