谈谈Web加速

时间:2014-11-09 06:26:00   收藏:0   阅读:440

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. 增加网络带宽。如果网络带宽成为瓶颈,适当增加网络带宽。

逻辑架构如下图所示。

bubuko.com,布布扣

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

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

本文出自 “伧夫的博客” 博客,请务必保留此出处http://cangfu.blog.51cto.com/5966711/1574445

原文:http://cangfu.blog.51cto.com/5966711/1574445

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!