04 高性能架构

压力测试, 不断地增加并发数量.

性能测试: 日常的运营 a - b, b点是日常的最高值.

负载测试: b-c, 模拟的是访问高峰, 可以看到系统最大负载是 c 点.

压力测试: 超过 c 点, 系统资源继续增加, 但是TPS却在走下坡路. 直到 d 点(耗费资源到达极限, 系统崩溃)

 

 

 

 

性能优化策略

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

1. 性能分析

必须对请求经历的各个环节进行分析,排查可能存在的性能瓶颈。

检查请求处理的各个环节的日志,分析哪个环节响应时间不合理,监控数据,分析主要因素 如 内存,磁盘I/O, 网络, CPU, 还是代码架构不合理。

定位到问题后,要进行优化

2. web 前端优化

浏览器加载,网站视图模型,图片服务,CDN服务,主要优化手段有 浏览器访问,反向代理,CDN等.

浏览器优化
  1. 减少 http 请求次数, HTTP是无状态的应用协议,意味着每次 HTTP 请求都需要建立通信链路,数据传输,而在服务器端都需要独立线程去处理.减少 http 的主要手段是 合并 css, 合并 javascript, 合并图片, 将浏览器一次访问需要的 javascript, css 合并成一个文件,这样浏览器只需要请求一次 图片也可以合并,多张图片合并成一张.
  2. 用浏览器缓存, 对一个网站, css, javascript, Logo, 图标这些静态资源更新频率比较低,而这些文件几乎是每次 HTTP 请求都需要的,如果将这些文件缓存在浏览器中,可以极好的改善性能,通过设置 HTTP 头中 Cache-Control 和 Expires 的属性, 可设定浏览器缓存.
  3. 启用压缩, 在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量. 
  4. CSS 放在网页最上面,javascript 放在最下面,浏览器会在下载完全部 CSS 之后才对整个页面进行渲染
  5. 减少 Cookie 传输,哪些数据需要写入 Cookie 需要慎重考虑,减少 Cookie 中传输的数据量, 另外, 对于某些静态资源的访问, 如 CSS, JavaScript 等,发送 Cookie 没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie, 减少 Cookie传送的次数.
CDN 加速

CDN 能够缓存静态资源,如图片,文件,css, JavaScript脚本,静态网页等, 但这些文件访问频度很高,将其缓存在 CDN可极大改善网页的打开速度。

反向代理

反向代理也可以缓存静态资源.

3. 应用服务器性能优化

这部分是我们的优化范围(重点), 主要手段有 缓存,集群,异步

分布式缓存

对数据缓存,对文件缓存,对页面片段缓存(网站性能优化第一定律:优先考虑缓存优化性能)

网站数据访问通常遵循二八定律, 即80%的访问落在20%的数据上. 

合理使用缓存, 频繁修改的数据,没有热度访问的数据 都不适合使用缓存. 另外缓存有可能造成数据的不一致性(脏读),一般会设置缓存的有效期

缓存高可用, 可以通过缓存服务器集群, 当一台缓存服务器宕机时,只有部分缓存数据丢失,重新从数据库加载对数据库影响不大。

缓存预热: 在缓存启动时,加载热点数据。

缓存穿透: 在缓存中没有,请求都是直接访问DB.

 

异步操作 

使用消息队列

 

消息队列具有很好的削峰作用-异步处理, 将高并发保存在消息队列里。

使用集群 

利用负载均衡,将任务发送到不同的web服务器上(组成集群)

优化代码

业务逻辑主要在应用服务器上,合理优化代码,可以很好改善性能。

  1. 多线程 (注意线程安全,并发访问资源时加锁)
  2. 资源复用 (尽量减少哪些开销很大的系统资源的创建和销毁,比如数据库连接,网络通信连接 等) 从编程角度,复用主要有两个形式: 单例(Singleton) 和 对象池(Object Pool). 对于数据库连接对象,每次创建连接,数据库服务端都需要创建专门资源以应对,因此频繁的关闭数据库连接,对数据库服务器而言是灾难性的,因此实践中,应用程序的数据库连接基本都使用连接池(connection pool)的方式,数据库连接对象创建好后,将连接对象放入对象池容器中,应用程序要连接的时候,就从对象池中获取一个空闲的连接使用,使用完毕归还对象到对象池中,不需要重新创建连接. (也不需要关闭连接), 对于每一个 Web请求, Web 应用服务器都需要创建一个独立的线程去处理,应用服务器也是采用线程池的方式,本质上都是对象池.
  3. 数据结构
  4. 垃圾回收, JVM 合理设置各个内存区域的大小,减少 Full GC 的运行次数,某些 Web应用在整个运行期间可以做到从不 Full GC.

4. 存储优化

存储介质的速度(机械硬盘, 普通硬盘, SAN,NAS)等, 存储冗余备份的优化( RAID0, HDFS 等)

 

架构师要做的,就是从上面各个方面,尽可量的对网站进行优化, 提高网站性能.

 

posted @ 2020-04-12 17:21  神之一招  阅读(218)  评论(0编辑  收藏  举报