Web网站架构的高并发实现

来源:互联网 发布:淘宝店有流量没销量 编辑:程序博客网 时间:2024/04/30 16:33

高性能的Web网站可以从Web前端、应用服务器、代码优化、存储的数据结构优化等4个方面考察。

Web前端性能优化

浏览器访问优化

减少http请求

http是无状态的应用层协议,意味着每次http请求都需要建立通信链路、进行数据传输,而在服务器端,每个http都需要启动独立的线程去处理。
减少http的主要手段是合并CSS、合并JavaScript、合并图片等,这样浏览器就只需要一次请求。

使用浏览器缓存

CSS、JavaScript、Logo等静态资源更新频率都比较低,而这些文件又几乎是每次http请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。

CDN加速

CDN(Content Distribute Network,内容分发网络)是部署在网络运营商的机房,用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,加速用户访问速度,减少数据中心负载压力。

反向代理

代理服务器通过配置缓存功能加速Web请求,当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容时,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻Web服务器负载压力。

此外,反向代理也可以实现负载均衡的功能,提高系统总体处理能力,进而改善网站高并发的性能。

负载均衡可以是在应用层(http)实现,也可以在网络层(修改数据报的目标IP地址)和数据链路层(修改目标服务器的mac地址)来实现。

应用服务器性能优化

分布式缓存

分布式缓存指缓存部署在多个服务器组成的集群中,例如不需要互相通信的Memcached分布式缓存。

消息队列

在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使响应延迟加剧。
在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。

消息队列具有很好的削峰作用:将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。

代码层次优化

资源复用

系统运行时,要尽量减少那些开销很大的系统资源的创建和销毁,比如数据库连接、线程、复杂对象等。

从编程角度,资源复用主要有两种模式:单例和对象池。

存储性能优化

B+树和LSM树

数据库多采用两级索引的B+树,树的层次最多3层。因此可能需要多次磁盘访问才能更新一条记录。

目前许多NoSQL产品采用LSM树作为主要数据结构。LSM树可以看做是一个N阶合并树。数据写操作(插入、修改、删除)都在内存中进行,并且都会创建一个新纪录,这些数据在内存中仍然是一棵排序树。
当数据量超过设定的内存阈值后,会将这棵排序树和磁盘上最新的排序树合并。当这棵排序树的数据量也超过阈值后,和磁盘上下一级的排序树合并。

在读操作时,总是从内存中的排序树开始搜索,如果没有找到,就从磁盘上的排序树顺序查找。LSM树可以极大程度上减少磁盘的访问次数,加快访问速度。