谈谈Web加速

Web应用,本质是各种Web内容从Web网站达到浏览器,呈现给用户。用户希望在获取Web内容的时间越短越好。从Web网站的角度,需要解决大量用户并发访问时的时延问题,体现为两大度量指标:吞吐量和并发度。吞吐量指单位时间内能完成请求数(req/s)。并发度指同时发起请求的客户端数量(浏览器发送请求有一定的并发度,例如能同时发送4个请求,在这里算4个客户端)。在一定的并发度下,吞吐量越大,客户感觉的时延就越低,网站的性能就越高。

不同的并发度下,网站的吞吐量并不是一个常量。一般来说,当并发度小于某个阈值时,网站能保持相对稳定的吞吐量;而超过这个阈值,网站的吞吐量则迅速下降。这个阈值决定于网站的消息处理速度。假设网络带宽不是瓶颈,请求消息达到网站后,被缓存在内核的缓冲区队列,然后被并行处理。当网站处理消息的速度赶不上消息缓冲的速度时,队列中消息就会大量堆积,导致处理时延迅速增加,吞吐量迅速下降。在通常的压力测试模型中,一般模拟多个用户并行发送消息,某个用户接受收到上一消息的回应后,才会发下一个消息。所以如果网站消息处理时延延长,消息发送间隔自然延长,单位时间内涌向网站的消息减少,这会导致网站吞吐量下降,从而在一个新的吞吐量下达成消息处理与消息到达的平衡。但在真实的场景中,在访问高峰期,性急的用户会不断刷新浏览器,涌向网站的请求消息量持续超过网站的实际处理能力,请求被大量堆积在网站的缓冲区,直至网站的内存耗尽,导致网站瘫痪。所以,真实场景中为避免网站瘫痪,要采取流量控制措施。

为了加速WEB网站,提升WEB性能,一般有下列措施:

  1. 改进服务器IO并发模型。有三种经典IO并发模型:进程并发、线程并发、事件并发。在这三种模型中,事件并发是最轻量级的,因为多个事件在单个线程中处理,大大减少了线程切换时间,并节省内存。所以采用事件并发模型的NginX/Lighttpd能承受的并发程度最高。
  2. 缓存网站内容。有两种情况:1)缓存动态内容的静态结果,加速动态内容;2)在靠客户较近的地方缓存网站内容,节省带宽。
  3. 加速动态内容计算。对CPU密集型的动态脚本,缓存opcode,不要每次都解析原始脚本。服务器脚本解析器运行缓存的OpCode,比直接解析原始脚本,效率要高很多。这也是为什么PHP/Python解析引擎需要把原始脚本编译成OpCode,然后再通过虚拟机来解析执行的原因,这样就可以达到和Java、C#差不多的性能。多一道转换,根本原因是为了提升性能。
  4. 加速数据库访问。有几种手段:1)增加分布式缓存,缓存查询结果;2)建索引;3)增加DBMS内部查询缓存;4)DBMS内部缓存索引和数据。后两项可通过数据库配置进行。
  5. 增加网络带宽。如果网络带宽成为瓶颈,适当增加网络带宽。

逻辑架构如下图所示。

不同的Web内容,因为特性不同,性能瓶颈往往也不同,所需的Web加速策略也不一样。

  • 静态内容(小文件)。例如各种图片内容,所需的带宽相对较小。网站处理的瓶颈在IO并发。因此可选用支持事件并发模型的轻量级Web服务器,如NginX/Lighttpd。同时为避免频繁的TCP建立和连接,可打开HTTP协议的KeepAlive长连接功能。这样就存在大量空闲连接,需开启epoll并发模型。同时对更新不频繁的内容,可利用HTTP协议的Last-Modified / If-Modified-Since,ETag / If-None-Match,Expires / Cache-Control等头域协商,在浏览器缓存器内容。
  • 静态内容(大文件)。例如各种下载资源,所需带宽大。此时瓶颈往往在带宽,可在靠近客户的地域部署缓存服务器,缓存服务器的缓存策略同样遵守HTTP的头域协商。
  • 静态内容(视频)。视频内容往往很大,但用户不追求最高的下载速度,只要能赶上播放速度就行。但是视频延续时间长,从统计学角度看所需带宽很大;而且现在的高清视频,单路视频对带宽要求也很大。所以就近部署的缓存服务器是常有的选择。
  • 动态内容。瓶颈在动态计算和数据库,一般实施下列策略:1)缓存opcode;2)加速数据库访问;3)对更新不频繁的动态内容,利用缓存服务器或Web浏览器缓存静态化后的内容。动态内容静态化后往往表现出惊人的并发性能提升效果。

充分考虑网站的内容特征,灵活应用上述加速策略,就能降低服务器/带宽成本,获得最高性价比。

时间: 2024-08-25 16:28:11

谈谈Web加速的相关文章

从苹果的appstore谈谈web前端那丝毫的追求

献上链接:点击进入itunes打开页面,我们先找到App 的logo图比如这个图很简单的一个图标,估计多数人选择的是上传一张处理好圆角,border的图片作为app logo,但问题是苹果觉得,你们每个人都自己去上传logo,那统一性何在! 打开源代码,我们看到源代码里有个mask标签,很纳闷: 然后看mask标签的css里面有图片,mask是绝对定位到一个整体的logo图上的,遮住了正方形的logo从而形成了一种圆角的东西. 苹果这样做,难道只是为了兼容ie低版本,兼容不支持圆角的浏览器?乍一

咱也来谈谈web打印快递单及经验

最近公司需求有变化,要求打印快递单,也是以web方式进行打印.原先是采用cs方式,但为了简化程序应用,所以将cs的打印功能去掉.添加以web方式打印. 刚开始,由于对打印机不了解,走了很多弯路.原先采用的办法是: 1.点击订单列表里的 “打印快递单按钮”,转到printexpress.aspx页面,加载需要打印的数据,呈现到页面上来. 2.页面背景采用快递单扫描图片(652*365 以前在cs里用的) 3.把加载的数据,一个个放置在需要打印的位置上(以扫描快递图片). 麻烦不断,   位置始终对

varnish---反向代理web加速缓存服务器和CDN的推送

Varnish 简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来. 挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 V

谈谈Web前端工程师的定位

原文地址:http://www.360doc.com/content/10/0708/17/1277406_37692580.shtml 2010-07-08  锋子chans   阅 1116  转 13 先给前端工程师的工作下个一句话定义:运用前端技术,实现体验的良好传达.如果在前面加上 Web,那么是针对 Web 这个领域的,主要是互联网,也可以将移动通信网络和其他传媒网络(比如IPTV)包含在内,因为其理念是一致的. 现在要在未毕业的学生中找到一个符合技能条件的 Web 前端工程师可以说

谈谈WEB开发中的苦大难字符集问题

http://www.lanceyan.com/tech/arch/web_luanma.html记得刚做javaweb开发的时候被这个编码问题搞得晕头转向,经常稀里糊涂的编码正常了一会编码又乱了.那个时候迫于项目进度大多都是知其然不知其所以然.后来有时间就把整个体系搞了个遍,终于摸通了来龙去脉. 在C++的CGI开发时大家喜欢用latin,这个属于字节方式的编码格式,存储mysql节约空间,而C++也是比较容易控制到byte级别的语言.所以经过框架封装基本也问题不大. 在Java语言中,要涉及

也谈谈Web Server,借助下Tencent的TWS。

在腾讯ECC拍拍体系下,有个很好Web Server的优化框架,叫TWS(Tencent Web Server).有实力的公司都做,百度的BWS. 比起传统WebServer-Apache为代表的进程方式WebServer的研究,在apache中,对外接cgi是一个单独的worker进程,对cgi的访问需要启动一个进程,并且需要在磁盘上加载进程文件,当并发量比较大的时候,apache就会遇到瓶径,当业务流量较大甚至遇到阻塞,httpd进程数急升,服务器的流量急跌. 图1,Apache的进程管理f

varnish实现web加速缓存

一.Varnish简述 varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp是FreeBSD 核心的开发人员之一.varnish采用全新的软件体系机构,和现在的硬件体系配合紧密,varnish是一个轻量级的cache和反向代理软件.先进的设计理念和成熟的设计框架是varnish的主要特点.挪威最大的在线报纸 Verdens Gang 使用3台Varnish服务器 代替了原来的12台Squid服务器,结果性能比以前更好. 二.varnish

使用Varnish加速Web

1.1 问题 通过配置Varnish缓存服务器,实现如下目标: 使用Varnish加速后端Apache Web服务 使用varnishadm命令管理缓存页面 使用varnishstat命令查看Varnish状态 1.2 方案 通过源码编译安装Varnish缓存服务器 编译安装Varnish软件 复制启动脚本与配置文件 修改配置文件,缓存代理源Web服务器,实现Web加速功能 使用3台RHEL7虚拟机,其中一台作为Web服务器(192.168.2.100).一台作为Varnish代理服务器(192

高级运维(一):反向代理&使用Varnish加速Web

案例1.反向代理      目标: 1.代理服务器可以将远程的Web服务器页面缓存于本地 2.代理服务器端口设置为80端口 3.用户通过访问代理服务器即可获得远程Web服务器页面上的内容 4.远程Web服务器对客户端用户是透明的 5.利用缓存机制提高网站响应速度      方案: 使用3台RHEL7虚拟机,一台作为Squid代理服务器,需要配置两个网卡(连接不同网段),地址分别为192.168.4.5.192.168.2.5.一台作为客户端测试主机,IP地址为192.168.4.100.一台作为