2. 大型网站核心架构之网站的高性能架构

来源:互联网 发布:c语言线程优先级设置 编辑:程序博客网 时间:2024/05/21 07:11

在系统需求中除了功能需求外,软件架构需要的关注点还包括:
高性能;
高可用;
伸缩性;
扩展性;
安全性。
下面的几篇博文将围绕这5个点来逐一分析。

瞬时响应:网站的高性能架构

1. 性能测试

性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。

1、从用户的角度来说,网站性能就是用户感受到的网页的响应速度的快慢。
2、 从开发人员的角度来说包括响应延迟、系统的吞吐量、并发处理能力、系统稳定性等指标。优化的手段主要包括:缓存加速数据读取、集群提高吞吐能力、异步消息队列加快请求响应和实现削峰。

性能测试指标:主要包括响应时间、并发数、吞吐量、性能计数器。
1、响应时间:指一个操作需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。

2、并发数:系统能够同时处理请求的数目,这个数目也反映了系统的负载数目。

3、吞吐量:指单位时间内系统处理的请求数量,体现系统的整体处理能力。常用的指标是TPS(每秒事物数)

在性能测试中首先定位性能问题的具体原因,然后选择性的优化,根据网站分层架构分为:Web前端性能优化、应用服务器性能优化、存储服务器性能优化。

Web前端性能优化

主要有几部分可以优化:浏览器访问、使用反向代理、CDN等技术。

1. 浏览器访问优化

主要手段有:
1. 减少Http请求(尽量避免轮询操作,轮询是非常耗资源的)
2. 使用浏览器缓存:对于CSS,JS,Logo,图标这些静态文件更新的频率比较低,所以缓存这些文件在浏览器中能极大的改善性能。
3. 启用压缩:在服务器端压缩,在浏览器端进行解压,减少数据通信传输的数据量。还有对于一些JS库进行压缩,较小传输的数据大小。
4. CSS放在页面最上面、JS放在页面最下面。浏览器会在下载完全部CSS之后才对整个页面渲染。
5. 减少cookie的传输:cookie包含在每次的请求响应中,应该足够小。对于静态资源的访问发送cookie毫无意义,所以对于静态资源最好使用独立的域名访问,避免请求静态资源时发送cookie。

2. CDN加速

CND(content distribute network,内容分发网络)本质上仍然是一个缓存。当CDN中存在浏览器请求的资源时从CDN直接返回给浏览器,最短路径返回响应。

使用CDN缓存的一般都是一些静态资源,比如:图片,CSS,Script脚本,静态网页等等。这些文件访问频率极高,将其缓存在CDN可极大的改善网页的打开速度。也就是实现所谓的动静(资源)分离。架构图如下:
CDN网站架构

3. 反向代理

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

应用服务器性能优化

应用服务器优化的手段主要有:缓存、集群、异步。

1. 分布式缓存优化应用服务器

当网站性能遇到瓶颈时,第一个想到的解决方案就是使用缓存。

1、缓存的基本原理

缓存的本质是一个内存hash表,网站应用中,缓存以键值对Key, Value的形式存储在内存的hash表中。Hash表数据读写的时间复杂度是O(1),下图给出一个KV在Hash表中存储过程示意图:
KV在Hash表中存储过程示意图

根据网络数据访问的二八定律,80%数据访问集中在20%的数据上,因此利用哈希表和内存的高速访问特性将20% 数据缓存起来,大大改善系统的性能。

2、合理使用缓存

1、频繁修改的数据不使用缓存(读写比在2:1以上的缓存才有意义)
2、 非热点数据不使用缓存
3、 不能忍受短暂的数据不一致的不使用缓存。
4、 缓存需要预热。

3、分布式缓存架构

常用的分布式缓存架构有两种:
1. 以JBoss Cache为代表的需要同步更新的分布式缓存,集群中所有的服务器保存相同的缓存数据。缓存总大小收到单一缓存服务器内存大小的限制。一般常见于企业内部应用系统。
2. 以Memcached为代表的不互相通信的分布式缓存。缓存与应用分离部署,缓存部署在一组专门的缓存服务器集群上,应用程序通过一致性hash等路由算法选择缓存服务器远程访问数据,缓存服务器之间互不通信。这样集群容易扩展,实现良好可伸缩性。

2.异步操作优化应用服务器

使用消息队列将调用异步化,可改善网站的扩展性和性能。使用消息队列服务器的架构图如下:
消息队列服务器

在 存入数据库中间加了一个消息队列服务器,大大减缓数据库的压力,而且还具有削峰的作用。当然异步操作也有缺点,就是会 产生一点点延迟,所以必须确保延迟是可以接受的。

在这里关于数据库相关的优化做个总结:
DB的读优化:缓存;
DB的写优化:消息队列。

3. 使用集群来优化应用服务器

在高并发下,通过配置负载均衡服务器构建一个由多台应用服务器组成的服务器集群,将并发访问分发到多台服务器上处理。

存储性能优化

这部分主要与硬件有关和一些数据的存储结构有关,以后再分析这一部分。

0 0
原创粉丝点击