高并发Web服务的演变 -- 节约系统内存和CPU(一)

       (转自程序员之家)

在现在的Web系统中,高并发已经成为一种常态。增加机器一定可以解决高并发的问题,但投入过大,合理结合技术手段优化方案,才是最有效的解决方案。

一、为什么连接数越来越多

       用户基数的增大是连接数增加的一个原因,但用户基数并没有像连接数那样指数增加,因此,用户基数的增加并不是连接数增加的直接原因。连接数增加的主要原因还是web变得更加复杂,交互更加丰富了。

页面元素增多,交互复杂

       web页面元素越来越多,越来越多的交互,导致下载请求也越多。以“www.qq.com”为例,刷新一次,大概有200多个请求,并且在打开以后,还有一些定时查询在运行。

       目前的http请求,为了减少返回的创建和销毁,通常会建立长连接(Connection keep-alive)。这种连接,一旦建立,会保持一段时间(直到超时),被后续请求复用。然而,它带来另一个问题,长连接会占用web系统的资源,如果不充分利用,会导致资源浪费。如果长连接创建后,等首批数据传输完后,之后没有数据交互,一直到超时,这段时间,会浪费web系统资源。

二、web前段优化,减小服务端压力

1、减少web请求

常用的方法是通过http协议头中的expire或max-age,将静态内容放入浏览器本地缓存,在之后的一段时间里,不再请求web服务器,直接使用本地资源。HTML5中的本地缓存技术(LocalStorage)也可以作为一种数据本地缓存。

这种方案,减少了对服务器的请求,但是,这种方案对首次访问无效,同时也可能带来资源实时性的问题。


2、减轻web请求

浏览器本地缓存一旦过期,就必须重新向服务器发送请求,这个时候,会有两种情况:

(1)服务器资源没有更新,服务器恢复“本地缓存可以继续使用”(发生通信,但只简单回复“可以使用”)

(2)服务器资源以及更新,服务器回传新的资源

这里的协商方法是通过http协议的Last-Modefied或Etag来控制的,请求服务器,如果资源没有更新,服务器会返回304 Not Modefied,减轻web请求。


3、合并页面请求

在ajax盛行之前,web后端将页面内容并凑好之后再发给前段端。ajax出现之后,交互更加友好了,但页面的请求也越来越多了。

对于移动端的网络(2G/3G/4G),比起PC宽带差很多,并且部分手机配置较低,面对一个超过100个请求的页面,加载速度会很慢。优化的方案是合并页面元素,减少请求数:

(1)合并HTML展示内容。将CSS和JS直接嵌入到HTML页面内

(2)Ajax动态内容合并请求。对于动态内容,将10次Ajax请求合并为1次的批量信息查询。

(3)小图片合并,通过CSS的偏移量技术Sprites,将很多小图片合并为一张。这个优化方案,在PC端的web优化中也很常见。


这篇文中主要从前端优化来缓解高并发的压力,下一篇文章中,将从后端优化来缓解高并发的压力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值