(四)–网站的高性能架构

最后更新于:2022-04-01 15:52:04

网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 ### 1、性能测试指标 ### 1.1 响应时间      指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时间。如下列出了系统常用的操作响应时间表. <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p><span style="font-size:14px">操作</span></p></td><td valign="top"><p><span style="font-size:14px">响应时间</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">打开一个网站</span></p></td><td valign="top"><p><span style="font-size:14px">几秒</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">数据库查询一条记录(有索引)</span></p></td><td valign="top"><p><span style="font-size:14px">十几毫秒</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">机械磁盘一次寻址定位</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">4</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">从机械磁盘顺序读取<span style="font-family:Calibri">1M</span>数据</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">2</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">从<span style="font-family:Calibri">SSD</span>磁盘顺序读取<span style="font-family:Calibri">1M</span>数据</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">0.3</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">从远程分布式换成<span style="font-family:Calibri">Redis</span>读取一个数据</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">0.5</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">从内存读取<span style="font-family:Calibri">1M</span>数据</span></p></td><td valign="top"><p><span style="font-size:14px">十几微妙</span></p></td></tr><tr><td valign="top"><p><span style="font-family:Calibri; font-size:14px">Java</span>程序本地方法调用</p></td><td valign="top"><p><span style="font-size:14px">几微妙</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">网络传输<span style="font-family:Calibri">2Kb</span>数据</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">1</span>微妙</p></td></tr></tbody></table> 实践中计算响应时间通常是通过平均时间计算的平均值。 ### 1.2并发数    指系统能够同时处理的请求的数目,这个数字也反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交请求的用户数目。  **网站系统用户数>网站在线用户数>网站并发用户数** ### 1.3吞吐量 指单位时间内系统处理的请求数量,体现系统的整体处理能力。对于网站,可用“请求数/秒”或“页面数/秒”或“访问人数/天”或“处理业务数/小时”等来衡量。 TPS(每秒事物数)是吞吐量的一个常用量化指标。刺猬还有HPS(每秒HTTP请求数)、QPS(每秒查询数)。 ### 1.4性能计数器 指操作系统的一些数据指标如System load(系统负载),CPU使用率、内存使用率、磁盘等使用情况。 ### 2、性能优化策略 根据网站分层架构,可分为Web前端性能优化、应用服务器性能优化、存储服务器性能优化。 ### 2.1 Web前端优化 #### 2.1.1 浏览器访问优化 - 减少HTTP请求数,主要可通过合并CSS,JavaScript、图片。 - 使用浏览器端缓存。在某些时候,静态资源文件编写需要及时应用到客户端浏览器,这种情况下,可通过改变文件名来实现。 - 启用页面压缩,文本文件的压缩效率可达80%以上。 - CSS放在页面最上面,JavaScript放在页面最下面 - 减少Cookie传输。可以考虑使用独立域名来发送Cookie等。 #### 2.1.2 CDN加速 CDN的本质仍然是一个缓存,只是部署在离用户最近的服务器上,一般缓存的都是静态资源。 #### 2.1.3 反向代理 除了能够保护网站安全的作用以及负载均衡的作用外,反向代理还能够提供缓存作用(动态资源)。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-23_576bad5fd0e35.jpg) ### 2.2 应用服务器性能优化 应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,主要优化手段有缓存、集群、异步等。 #### 2.2.1 分布式缓存 缓存主要用来存放哪些读写比很高、很少变化的数据。 分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其具体架构有两种,一种是以JBoss Cache伪代码的**需要更新同步的分布式缓存**, 一种是以Memcached为代表的**不互相通信的分布式缓存**。 Jboss Cache 的分布式缓存在集群中的所有服务器中保存相同的缓存数据,当某台服务器有缓存更新的时候,会通知集群中其他机器跟新缓存数据。优点是应用程序可以 从本地快速的获取缓存数据,但当集群规模较大的时候,缓存更新信息需要通过到集群所有机器,其代价可想而知。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-23_576bad5ff01f5.jpg) 大型网站需要的缓存数据一般都很大,可能会有TB的内存占用,这时候就的使用Memcached,是一中互不通信的架构,每台存储的缓存数据可以不一样。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-23_576bad60151d2.jpg) #### 2.2.2 异步操作 为了改善网站的扩展性,可以使用消息队列将调用异步化。 #### 2.2.3 使用集群 在网站高并发访问的情况下,使用负载均衡技术为一个应用构建一个由多台服务器组成的集群,将并发访问请求分发到多台服务器上处理。  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-23_576bad5fd0e35.jpg) #### 2.2.4 代码优化 代码优化主要涉及多线程、资源复用(对象池或单例)、数据结构和垃圾回收。 ### 2.3 存储性能优化 可以考虑使用分布式存储、openfiler、磁盘阵列、HDFS(Hadoop)。
';