高性能-瞬时响应

检查请求各个环节的诶之,分析哪个环节响应时间不合理、超出预期;
检查监控数据,分析影响性能的主要因素是内存、磁盘、网络、还是 CPU,是代码问题还是架构设计不合理,或者系统资源确实不足。

性能测试指标

响应时间、并发数、吞吐量、性能计数器等。

响应时间

每个响应时间比较短不好测试,常用方法是重复请求很多次,求平均时间。

并发数

系统能够同时处理请求的数目,对于网站而言,指同时提交请求的用户数目。


测试程序通过多线程/协成模拟并发用户的办法来测试系统的并发处理能力,为了真实的模拟用户行为,测试程序并不是启动多线程后不停地发送请求,而是再两次请求中间加入一个随机等待时间,被称为思考时间。

吞吐量

TPS(每秒事务数)
HPS(每秒HTTP请求数)
QPS(每秒查询数)

性能计数器

System Load、对象与县城数、内存使用、CPU 使用、磁盘与网络 I/O 等指标。
系统监控、报警。


System Load(系统负载),指当前正在被 CPU 执行和等待被执行的进程数目总和,是反应系统忙闲程度的重要指标。
Load 理想值是 CPU 数目,Load 高于 CPU 数目的时候表示系统资源不足,影响程序的执行性能。

top 命令查看,3 个浮点数,表示最近 1min、5min、15min 运行队列平均进程数。

性能优化

前端性能优化

减少 HTTP 请求

合并 CSS 文件、合并 JS 文件、合并图片、懒加载等。

使用浏览器缓存

缓存 CSS、JS、Logo、图表等静态资源。
通过设置 HTTP 头中的 Cache-Control 和 Expires 属性,控制浏览器的缓存。

有时候静态资源变化需要及时应用到浏览器,可以通过修改文件名实现,即更新 JS 文件并不更新 JS 文件内容。

逐渐更新:一次更新一部分图标文件等等。

启用压缩

文本文件的压缩可达 80% 以上,因此 HTML、CSS、JS 通过启用 GZip 压缩可以达到好的效果,但是压缩对服务器和浏览器会产生一定的压力,在网络状况好的情况下要权衡考虑。

CSS 放在页面最上面,JS 放在页面最下面

浏览器会在下载完全部的 CSS 后才对网页进行渲染。
浏览器在加载 JS 后立即执行,有可能阻塞整个页面。

减少 Cookie 次数。Cookie 会包含在每次的请求和响应中,太大的 cookie 会影像数据传输。
静态资源的传输,有时候带上 Cookie 没有意义,有的时候有意义(比如图片验证码)。

CDN 加速

emmm 类似于缓存

反向代理

emmm 类似于缓存

服务端性能优化

网站性能优化第一定律:优先考虑缓存优化性能。

分布式缓存

注意要合理使用缓存。缓存穿透、雪崩、击穿!!!
频繁修改的数据!
没有热点的访问!
数据不一致和脏读!
缓存可用性!


缓存预热!

异步操作

消息队列等。
消息队列(削峰作用)。

使用集群

配置负载均衡。

代码优化

多线程、协成。
资源使用统一管理(池,进程池、线程池、连接池、对象池、单例)

数据结构

哈希?

垃圾回收

。。。

存储性能优化

机械硬盘、固态硬盘。

B+树、LSM 树。

传统的关系数据库使用的是 B+ 树,层次最多三层。
现在很多 NoSQL 数据库使用 LSM 树。

存储阵列

RAID0、RAID1、RAID10、RAID5、RAID6。
HDFS 中,系统在整个存储集群的多态服务器上进行数据并发读写备份,可以看做在服务器集群规模上上线了类似 RAID 的功能,因此不需要磁盘 RAID。
MapReduce 并发访问,迁移计算而不是不迁移数据。


HDFS 中两个重要的服务器角色:NameNode(名字服务器节点)和 DataNode(数据存储节点)。
NameNode 在 HDFS 中只部署一个实例,提供元数据服务,相当于操作系统中的文件分配表 FAT,管理文件名 Block 的分配,维护整个文件系统的结构。
DataNode 则部署在 HDFS 集群中其他所有服务器上,提供真正的数据存储服务。