网站的高性能架构

一、Web前端性能优化

1、浏览器访问优化:

减少http请求:合并CSS、合并JavaScript、合并图片。将浏览器一次访问需要的JavaScript、CSS合并成一个文件。

使用浏览器缓存:对于一个网站而言,CSS、JavaScript、Logo、图标等这些静态资源文件更新的频率都比较低,将这些文件缓存在浏览器中,可以极好地改善性能。

启用压缩:在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量,一般文本的压缩效率可达80%以上。

CSS放在页面最上面、JavaScript放在页面最下面:浏览器在加载JavaScript后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此JavaScript最好放在页面最下面。

减少Cookie传输:太大的Cookie会严重影响数据传输,因此哪些数据需要写入Cookie需要慎重考虑,尽量减少Cookie中传输的数据量。

2、CDN加速

将数据缓存在离用户最近的地方,使用户以最快速度获取数据。CDN能够缓存的一般是静态资源,如图片、文件、CSS、Script脚本、静态网页等,但这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。

3、反向代理

当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,当后续再访问该静态内容时,就可以直接从反向代理服务器中返回,加速Web请求响应速度,减轻Web服务器压力。

二、应用服务器性能优化

1、分布式缓存

A、缓存的基本原理:缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理。一方面缓存访问速度快,可以减少数据访问时间,另一方面如果缓存的数据是经过计算处理得到的,那缓存还起到减少计算时间的作用。缓存的本质是一个内存Hash表,数据以一对Key、Value的形式存储在内存Hash表中。

B、合理使用缓存:

频繁修改的数据:频繁修改的数据,不适合放在缓存中,否则只会增加系统负担

没有热点的数据:只将经常被使用的热点数据存入缓存中才有意义,否则大部分数据还没有被再次读取就已经被挤出缓存

数据不一致与脏读:应用要容忍一定时间的数据不一致

缓存可用性:缓存服务重启或崩溃时,数据库将会面临很大的压力而导致网站不可用

缓存预热:可以在缓存系统启动时,把热点数据预先加载好

缓存穿透:如果因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有请求都会落到数据库上,会对数据库造成很大的压力。对策是可以将不存在的数据也缓存起来。

C、分布式缓存架构:

以JBoss Cache为代表的需要同步的分布式缓存:集群中所有服务器中保存相同的缓存数据,当某台服务器的缓存数据有更新时,会通知集群中其他机器同步更新,系统代价较高。

以Memcached为代表的不互相通信的分布式缓存:应用程序通过一致性Hash等路由算法,选择缓存服务器远程访问缓存数据,具有良好的伸缩性。

D、Memcached:

简单的通信协议:

丰富的客户端程序:支持所有主流的网站编程语言,如:Java、C、C++、C#、Python、PHP等。

高效的内存管理:固定空间分配方法。

互不通信的服务器集群架构:

2、异步操作

使用消息队列将调用异步化,可改善网站的扩展性。通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。

3、使用集群

使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应性。

4、代码优化

多线程

资源复用

数据结构

垃圾回收

三、存储性能优化

相关推荐