架构师课程第七周 作业

发布于: 7 小时前
一、性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

性能测试刚开始,并发从0开始的时候,随着压力的增加,系统资源以及程序还没什么到达瓶颈,所以系统的响应时间正常,不会变慢,吞吐量线性升高。随着并发不断增加,超过一个最大正常请求点的时候,程序开始因为性能问题出现响应变慢,吞吐量增加缓慢或者不会增加,此时程序还是可以运行。随着并发压力不断增加,达到系统的最大并发承载点的时候,系统的响应时间会急剧变慢,且吞吐量开始下降。如果压力还在不断增加或者一直持续这样的压力,系统因为积压的请求来不及处理,开始出现崩溃,从而导致系统不可用状态。

二、总结

本周主要内容有:性能测试与优化,临界区与锁,操作系统与文件系统简单介绍。

解决方案能不能解决痛点问题,不能仅凭我们思维臆想,而是需要具体的凭据指标,这就需要好通过性能压测来获取。很多时候,开发人员可能并没有太多关注性能测试,甚至认为性能测试无关紧要。很多业务确实流量没有很大,没有达到需要特别去关注性能的时候,但是性能测试能帮助我们的开发人员更了解自己的程序,知道自己的程序最大可以达到多少流量,这样在可能的故障的时候以及业务发展的时候能很快做出判断,甚至很快做出优化的程序。一个程序的性能根据不用的角度可以有不同的感受,性能优化的方案也可以不同。从用户的角度出发,关注的是程序对人的体验,有的时候可以通过取巧的手段就可以解决。从程序本身来说,我们需要客观的根据性能指标衡量程序,优化程序。性能指标主要有:

1. 响应时间:从客户端发出第一个字节开始到收到最后一个响应字节结束的这段时间;

2.并发数:指程序在不崩溃或正常响应时间内的时候可以同时处理的最大请求数量;

2. 吞吐量:单位时间内系统处理的请求数量,体现系统的处理能力。如TPS(Transactions Per Second)、QPS(Query Per Second)等。

计算公式:吞吐量=(1000/响应时间ms)*并发数

性能测试的时候不光关注程序,还需要关注承载程序的容器以及物理设备,由性能计算器描述,包括机器的CPU、内存、硬盘、网卡等的性能及使用率等。性能测试可以分为性能测试、负载测试、压力测试、稳定性测试。

经过了性能测试的程序,我们就可以知道它到底能承载多少的压力的,当我们使用的时候要接近这个值的时候,我们就需要想各种办法进行优化了。我们可以换更好的硬件设备已经更高带宽的网络,当我们的程序本身到达瓶颈的时候,我们就需要优化我们的代码或逻辑了。我们在做性能优化的时候,首先不能优化一个没有性能测试的软件,其次不能优化一个你不了解的软件。所以在做性能优化之前不要把自己的主观推断作为结论,一定要经过性能测试,并且熟悉了程序的代码及逻辑之后再开始着手制定优化方案。我们在性能测试优化的过程中,也需要借助各种性能工具和debug工具的帮助,所以我们也需要对这些工具有一定的了解。性能优化的一般方法有:

1. 性能测试,获得性能指标;

2. 指标分析,发现性能与资源瓶颈点;

3. 架构与代码分析,寻找性能与资源瓶颈关键所在;

4. 架构与代码优化,优化关键点,平衡资源利用;

5. 性能测试,进入性能优化闭环。

程序在运行的时候,如果有多个任务同时去访问同一个内存地址,则这段地址称为资源临界区,同时修改临界区资源可能会导致程序出现错乱,为了防止这种错乱,我们需要使用到锁机制。根据应用场景不同,分为偏向锁、轻量级锁、重量级锁、总线锁、缓冲锁、公平锁、非公平锁、可重入锁、独享锁/互斥锁、共享锁、读写锁、分段锁、自旋锁等,这些名词从不同的角度描述在不同场景下锁的使用方式。如果不想使用锁以及阻塞模型,可以考虑尝试异步并发分布式编程框架akka等。

不管我们的程序怎么写,都需要由操作系统调度执行。只要我们需要写文件,都会使用到系统提供的文件系统。一块硬盘只是一个一个bit的存储而已,操作系统根据不同的文件系统将磁盘格式化为特定的格式,以便程序使用。程序在计算机运行的过程成为进程,由操作系统调度。程序运行时有运行、就绪、阻塞状态。程序正在使用CPU的时候成为运行态,程序只在等待CPU时间的时候成为就绪态,程序主动阻塞或者需要等待其它硬件或操作的时候成为阻塞态。衡量系统繁忙的一个指标是系统负载load,当负载超过CPU核数的时候,表示系统中有程序处于就绪状态却得不到CPU时间执行,如果等待的进程越多表示我们的程序可能执行得越慢了。

用户头像

杉松壁

关注

还未添加个人签名 2018.03.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师课程第七周 作业