文档章节

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

小洋哥
 小洋哥
发布于 2014/06/06 22:59
字数 1950
阅读 885
收藏 6
点赞 0
评论 0

 /**
                *   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开销,以后有时间会专门讨论这一问题。


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

© 著作权归作者所有

共有 人打赏支持
小洋哥
粉丝 22
博文 38
码字总数 39565
作品 0
成都
程序员
LAMP网站架构方案分析

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是...

mac_zhao ⋅ 2011/04/04 ⋅ 0

LAMP网站架构分析

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

长征4号 ⋅ 2017/07/05 ⋅ 0

服务器后端开发系列——《实战Nginx高性能Web服务器》

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

晨曦之光 ⋅ 2012/04/24 ⋅ 0

大型高性能ASP.NET系统架构设计

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

Midnight ⋅ 2012/12/24 ⋅ 1

使用Nginx+Lua进行Web开发

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

醉人的笑容你有没有 ⋅ 2016/04/17 ⋅ 0

大型Web系统架构

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

ugali ⋅ 2017/09/04 ⋅ 0

大型系统的发布部署方案

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

罗文浩 ⋅ 2015/09/12 ⋅ 0

大型动态应用系统平台系统架构

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

五味格子 ⋅ 2011/05/11 ⋅ 0

浅谈大型Web系统架构

原文出处: 丁码农的博客 动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用...

Perma ⋅ 2016/04/27 ⋅ 0

大流量网站的底层系统架构

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

红薯 ⋅ 2011/10/30 ⋅ 36

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 57分钟前 ⋅ 0

【每天一个JQuery特效】根据可见状态确定是否显示或隐藏元素(3)

效果图示: 主要代码: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>根据可见状态确定 是否显示或隐藏元素</title><script src="js/jquery-3.3.1.min.js" ty......

Rhymo-Wu ⋅ 今天 ⋅ 0

OSChina 周四乱弹 —— 初中我身体就已经垮了,不知道为什么

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @加油东溪少年 :下完这场雨 后弦 《下完这场雨》- 后弦 手机党少年们想听歌,请使劲儿戳(这里) @马丁的代码 :买了日本 日本果然赢了 翻了...

小小编辑 ⋅ 今天 ⋅ 12

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部