网站的核心要素之高性能篇

什么叫做网站的高性能?如何衡量网站的高性能?

一、网站性能的测试

1、不同的人对于网站性能的标准是什么?

a、普通网民对网站的性能

用户打开网页的快慢。专业点叫法是:响应时间。

b、测试人员/开发人员对网站的性能

并发量、吞吐量(QPS/HPS/QPS)、平均响应时间。

c、运维人员对网站的性能

基础设施性能和资源利用率

2、性能的指标

a、响应时间/平均响应时间

指执行一个操作所用的时间(从开始请求计时、到返回响应结果),单个响应时间没有意义,一般我们通过重复请求计算平均的响应时间,比如1W次请求的平均响应时间。

b、并发量

同时提交请求的数目。一般情况,网站用户数>=在线用户数>=用户并发请求数。(实际生产中,对于“>=”,“=”的情况几乎不存在。)

c、吞吐量

单位时间内处理的请求的数量。常用的QPS/HPS/QPS。并发量与吞吐量的关系:随着并发量增加,系统吞吐量先是逐渐上升,然后会达到一个最大点,接着持续不变一段时间,最后会急剧下降,直到为零。

d、系统计数器

system load(系统负载)、对象与线程量、内存使用情况、cpu使用情况、硬盘IO情况、网络IO。这些指标也是系统监控的重要参数,咱们可以设置一个阈(yù)值,当达到阈值的时候,就行报警。

系统负载:指当前正在被cpu执行和被等待执行的系统进程的总和。完美的情况是:cpu的多个核都在被使用且没有被等待的进程、即:System Load=cpu核心数。Load值<cpu核心数:表示系统CPU资源浪费。Load值>cpu核心数:表示cpu正在调度工作,资源紧张。一般情况,咱们用“最近1分钟的load值”,“最近5分钟的load”,“最近10分钟的load”等等。瞬时值没有太大意义。

3、性能的测试

a、性能测试

以系统初期规划的性能指标为预期目标,不断对系统施加压力,验证系统在资源可接受的范围内,能否达到预期。

b、负载测试

如果系统已经满足预期“性能测试”,那么继续对系统增加压力,直到系统的某项指标达到“临界值”或“阈值”。

c、压力测试

如果系统已经满足预期“负载测试”,那么继续对系统增加压力,知道系统崩溃或不能再处理任何请求。

性能测试、负载测试、压力测试其曲线如下图:

测试完成,要出一份完善的测试报告。其形如下:

二、web端性能的优化

浏览器缓存、优化html结构(目的:加快浏览器渲染速度),压缩JS/CSS,cdn(网站静态化,精灵图,合并css/js,图标内置css里面,静态资源独立部署),反向代理。其主要核心就是减少浏览器请求、加快浏览器渲染速度。可参考Http发展经过,其中解释了为什么Http1.1需要优化链接。

三、应用服务的优化

1、缓存

缓存永远是“优化”的第一选择,不管浏览器、应用服务器、数据库服务器。缓存目标不仅限于数据库内数据、还可以是文件、网页、响应内容。其原理就是把“需要的资源”放入"相对较高访问速度"的存储介质内。

缓存的原则:28原则、读写比大于2:1(理论上有意义的值,实际上,我们要求的比这个高得多).

缓存引发的问题:数据不一致。以及缓存雪崩、缓存击穿、缓存穿透。可参考:“缓存回源”常见问题:缓存穿透、缓存雪崩和缓存击穿

此处需要提一下redis相关的内容:部署方式、基础数据类型、高可用(HA)的实现方式、快照与aof日志备份。

2、异步

业务异步设计、基于事件的微服务处理等。(本内容主要写“应用层面”,如果涉及到"代码方面",可继续参考下方“代码优化模块”)

3、集群

对单一功能,通过部署多台相同的服务器,构成一个“群体。可参考:负载均衡基础知识

d、代码优化

多线程:注意设计为无状态的对象,使用局部对象,以及锁的使用。可参考:多线程相关的内容

一台服务器上启动多少个线程合适?可以参考公式:

启动线程数=[任务执行时间/(任务执行时间-磁盘IO等待时间)]*CPU核心数

资源复用:线程池、连接池、复杂对象等等。

其他优化:数据结构、垃圾回收等。

四、存储性能的优化

1、硬盘

机械盘与固态盘。机械盘有磁道、磁头。如果读取内容不连续或不在一个磁道上,那么磁头就会进行跳跃,所以读取速度较差。固态盘的数据存储在晶体硅上,所以可以像内存一样随机访问。

2、存储结构

可参考数据库InnoDB的B+树设计。

3、RAID和HDFS

 廉价磁盘冗余阵列和Hadoop分布式文件系统。、感兴趣可以自行百度吧。

添加评论

Loading