您的位置:首页 > 运维架构 > 网站架构

大型网站技术架构 读书笔记2.1 核心架构要素之高性能

2018-01-03 23:47 639 查看

一 网站的高性能架构

  主要问题:在用户高并发访问时,会产生很多网站性能问题;所以,网站高性能架构或者说网站性能优化的主要工作是改善高并发访问情况下的网站响应速度

  网站性能:性能这个词涉及到的面是相当大的。它既有着自己的客观指标,也涉及用户的客观感受;而且,在不同视角下,各方的关注点也不一样。本部分的主要内容就是如何构建一个高性能的网站;通过分析不同层面下的网站优化措施,从而实现在性能测试的前提下进行针对性优化。

1.1 不同视角下的网站性能

  在不同视角下,各方的关注点不一样;不同视角下的网站性能标准不同,优化手段也不同。

1 用户视角下的网站性能

  从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度。这里的性能除了与请求的服务服务端响应速度之外;还与客户端机器浏览器网络带宽等有关。

  性能优化:这里的优化主要是优化用户感官。使用前端架构优化手段,使浏览器尽快地显示客户感兴趣的内容、尽可能地获取页面内容,从而改善客户视角下的网站性能。

2 开发人员视角的网站性能

  从开发人员角度,网站性能就是应用程序本身和其相关子系统的性能,包括响应延迟系统吞吐量并发处理能力系统稳定性等技术指标。

  性能优化:使用缓存加速数据读写;使用集群提高吞吐能力;使用异步消息加快请求响应以及削峰,使用代码优化改善程序性能

3 运维人员视角的网站性能

  从运维人员角度,网站性能就是基础设施性能资源利用率

  性能优化:建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术优化资源利用。

1.2 网站性能测试

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

1.2.1 性能测试指标

1. 响应时间

  定义:指应用执行一个操作需要的时间,包括从发出请求开始到受到最后响应的时间。响应时间是系统最重要的性能该指标,直观地反映了系统的快慢

2.并发数

  定义:指系统能够同时处理请求的数目,反映了系统的负载特性。对于网站而言,并发数即网站并发用户数,即同时提交请求的用户数。

  与人数有关的数据还有网站注册用户数网站在线用户数,其中

网站注册用户数 >> 网站在线用户数 >> 网站并发用户数

  作用:在网站设计初期,运营团队需要根据自身产品对用户数进行推断,并以此作为系统非功能设计的重要依据。

3. 吞吐量

  定义:指单位时间内系统处理的请求数量,体现系统的整体处理能力

  衡量指标TPS——每秒事务数(最常用量化指标);HPS——每秒HTTP请求数;QPS——每秒查询数。

  并发数、吞吐量、响应时间关系:在系统并发数从小到大过程中,系统吞吐量先逐步上升,响应时间小幅上升;达到一个极限后,吞吐量下降,响应时间快速上升;达到系统奔溃点后,系统资源耗尽,吞吐量为零,系统失去响应。

4.性能计数器

  定义:描述服务器和操作系统性能的一些数据指标

  指标系统负载——当前正在被CPU执行和等待被CPU执行的进程数目总和;内存使用CPU使用

1.2.2 性能测试方法

  分类:性能测试是总称,可细分为性能测试负载测试压力测试稳定性测试

  定义:性能测试是一个不断对系统增加访问压力(增加并发请求数),以获得系统性能指标最大负载能力最大压力承受能力的过程。

  关键位置:系统最大负载点,系统奔溃点

1.2.3 基于性能测试的性能优化策略

  如果性能测试结果不能安祖设计或业务需求,就需要寻找系统瓶颈,分而治之,逐步优化。

  性能分析:对用户从浏览器发出请求到数据库完成操作事务的整个经历的各个环节进行分析,排查可能出现性能瓶颈的地方,定位问题

  性能分析手法:1.检查日志,跟预期进行对比;2.检查监控数据,对影响性能的主因进行分析。

  性能优化:定位问题后,就可以针对性地优化。根据网站分层架构,优化可分为Web前端性能优化应用服务器性能优化存储服务器性能优化这三块。下面分三节进行讲解。

1.3 Web前端性能优化

  Web前端网站业务逻辑之前的部分,包括浏览器加载网站视图模型图片服务CDN服务等,优化手段分以下三块讲演。

1.3.1 浏览器访问优化

  1. 减少HTTP请求:通过将请求所需的JavaScript和CSS合并成一个文件及图片合并等减少请求数。

  2. 使用浏览器缓存:在客户端本地保存缓存

  3. 启动压缩: 在服务器端对响应内容进行压缩,客户端解压,有效减少通信量

  4. CSS在最上面,JavaScript在最下面:使得渲染最先进行,JavaScript最后被执行。

  5. 减少Cookie传输:减少Cookie中传输的数据量;并用独立域名部署静态资源,从而避免Cookie传输。

1.3.2 CDN加速

  笔记1中已经简单介绍过CDN,CDN一般缓存被高频访问的静态资源,如图片文件CSSScript脚本静态网页等。

1.3.3 反向代理

  作用:1. 位于Web服务器之前,建立屏障,有利于安全;2. 通过配置缓存加速Web请求;3. 实现负载均衡的功能。

  机制:当用户第一次访问某资源时,将该资源缓存在反向代理服务器上;这样其他用户就可以直接从反向代理服务器上获取该资源。对于反向代理中的动态内容,通过内部通知机制重新加载并缓存。

1.4 应用服务器性能优化

  应用服务器处理网站业务;这里部署了网站的业务代码,是网站开发最复杂,最多变的地方;优化手段主要有缓存集群异步等。

1.4.1 分布式缓存

  在网站应用中,缓存几乎无处不在;也近乎无所不能。

网站性能优化第一定律: 有限考虑使用缓存优化性能。

  缓存的定义和使用前提在笔记1中已经提及:

缓存:将数据放在举例计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。
缓存的两大前提:1. 数据访问热点不均匀;2. 数据在某个时间段内有效


  缓存优势:1. 访问速度快;2. 无需重复计算,直接访问结果

  缓存的存储:缓存的本质是一个内存Hash表,数据缓存以一对Key、Value的形式存储在内存Hash表中;其读写复杂度均为O(1)。

  缓存用途:存放读写比很高、变化少的数据。

  缓存虽好,也不能滥用,以下是使用缓存需要注意的一些方面

  1. 对于频繁修改的数据没有热点的访问,不要使用缓存;

  2. 数据不一致与脏读:对于缓存数据会设置失效时间,则在这个时间内更新数据会存在数据不一致,但会保证最终一致;使用缓存立即更新策略可以解决该问题,但会带来更多问题。

  3. 缓存可用性:在稳定访问情况下,缓存会负载大部分数据库访问压力;若缓存服务器大量崩溃可能导致数据器访问压力过大而宕机,导致网站整体不可用

  4. 缓存预热:对新启动的缓存服务器在启动前直接加载好热点数据,而不是使用LRU算法进行更新淘汰,提高系统性能。

  5. 缓存穿透保存不存在的数据,防止对不存在的业务或不存在的数据进行高并发访问,使得数据库压力很大。

  分布式缓存:缓存部署在多个服务器组成的集群中,以集群的方式提供缓存服务。

  分布式缓存架构JBoss Cache:在集群中所有服务器中保存相同的缓存数据,更新时同步更新。受限于单台服务器内存空间,且同步代价较大。

  分布式缓存架构Memcached缓存应用独立部署。memcached客户端部署在应用服务器上,并通过一致性hash等路由算法选择memcached缓存服务器对缓存数据进行远程访问缓存服务器之间不通信,集群规模可以轻松扩容,伸缩性好。其内存管理使用固定空间分配,以chunk为单位,避免内存碎片

1.4.2 异步操作

  操作:通过消息队列将调用异步化,以改善网站的性能。1. 在用户数据写入时,消息队列服务器在获取数据后直接返回响应,再写入数据;2. 在短时间高并发时,将事务缓存在消息队列中,从而实现削峰——有点像地铁换乘时设计的换乘通道。

1.4.3 使用集群

  操作:使用负载均衡技术为一个应用构建一个由多态服务器组成的服务器集群,将高并发的访问分发到多台服务器上进行处理。

1.4.4 代码优化

  代码优化的主要手段:

  1. 多线程:充分利用CPU计算能力和多核性能,要注意线程安全问题,参考笔记
ch13 线程安全和锁优化

  2. 资源复用:通过单例对象池减少对开销很大的系统资源的创建和销毁。

  3. 数据结构:如Hash表等。

  4. 垃圾回收:参考博客
深入理解Java虚拟机 ch3 垃圾回收器和内存分配策略 读书笔记
理解GC有助于程序优化参数调优

1.5 存储性能优化

  本节主要涉及三个方案对比,没有绝对的优劣之分,视应用情形而定。

  硬盘选择:机械硬盘 vs 固态硬盘:固态硬盘随机访问性能好,但可靠性、性价比有待提高。

  数据结构选择B+树 vs LSM树

  集群方式选择RAID vs HDFS

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息