架构师训练营 -week7 总结

发布于: 12 小时前
架构师训练营 -week7 总结

1 性能测试

性能优化结果的检查和度量标准,不同视角对性能有不同标准,

通常分为主观视角和客观视角

主观视角:用户感受到的性能

客观视角:性能指标衡量的性能

1.1 性能测试的指标

网站性能测试的主要指标有响应时间、并发数、吞吐量、性能计数器等;

响应时间

指应用系统从发出请求开始到收到最后响应数据所需要的时间。是最重要的性能指标,直观反映系统的“快慢”。

并发数

系统能够同时处理请求的数目,也反映了系统的负载特性。网站的并发数即为系统并发用户数,指同时提交请求的用户数目。对应还有在线用户数、系统用户数;

吞吐量

单位时间内系统处理请求的数量即为吞吐量,反映了系统的处理能力。网站通常用“请求数/秒” 或 “页面数/秒” 来衡量,也有 “访问人数/天” 或 “处理业务数/小时” 等;

衡量网站吞吐量 还有 TPS 每秒事物数 ,HPS 每秒HTTP请求数,QPS 每秒查询数 等指标。

以下公式表示了响应实际、并发数与吞吐量的关系:

吞吐量 = (1000/响应时间ms) x 并发数



性能计数器

描述服务器或操作系统性能的一些数据指标为性能计数器。包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标。这些指标也是系统监控的重要参数,对这些指标设置报警阀值,当监控系统发现性能计数器超过阈值的时候,就向运维和开发人员报警,及时发现处理系统异常。

System Load 可认为是cpu进程队列中进程的数量和cpu可处理能力的比值

如cpu最多同时能处理10个进程,

  • 如果队列中进程数量为5,load average为50%,说明cpu还没达到负载上限

  • 如果队列中进程数量为10,load average为100%,说明刚好达到负载上限

  • 如果队列中进程数量为15,load average为150%,说明超出了cpu的处理能力

单个cpu的load average为0.7以上时,需要注意是否快达到了服务能力的瓶颈。



1.2 性能测试方法

性能测试方法,可细分为性能测试、负载测试、压力测试、稳定性测试。

性能测试

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

负载测试

对系统不断地增加并发请求以增加系统压力,知道系统的某项或多项性能指标达到安全临界值,如某种资源已呈现饱和状态,这时候继续对系统施加压力,系统的处理能力不但不能体高,反而会下降。

压力测试

超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。

稳定性测试

被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一定较长时间,以此检测系统是否稳定。生产环境中,请求压力是不均匀的,呈波浪特性,因此为了更好地模拟生产环境,稳定性测试也应不均匀地对系统施加压力。



性能测试中TPS和响应时间曲线图:

图一

图二



a-b 阶段,随着并发数的增加TPS在线性增长。

b-c 阶段,b点的特征是b开始TPS上升曲线相对平缓了,负载的最高点就是c点。

c-d 阶段,c点是TPS的最高点,后面就TPS慢慢下降了,原因是并发数越来越多,大家都在等待和抢资源,处理不完了,虽然并发数在增加,但响应时间在增加,所以tps反而是下降的。

一直降到某个点,系统的某项资源耗尽,整个服务就挂掉了。



1.3 大规模分布式系统性能优化的7层协议及案例分析

软件性能优化的基本原则

  • 不能优化一个没有测试的软件

  • 不能优化一个不了解的软件



性能测试主要指标

  • 响应时间

  • 并发数

  • 吞吐量

  • 性能计数器



性能优化的一般方法

  • 性能测试,获得性能指标

  • 指标分析,发现性能与资源瓶颈点

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

  • 架构与代码优化,优化关键技术点,平衡资源例用

  • 性能测试,进入性能优化闭环



系统性能优化的分层思想

  • 机房与骨干网络性能优化:异地多活的机房架构

  • 服务器与硬件性能优化:CPU、磁盘、内存、网卡的选择,有时候远超过代码和架构的优化

  • 操作系统性能优化:资源利用分析

  • 虚拟机性能优化:JVM

  • 基础组件性能优化:更合适的基础组件版本

  • 软件架构性能优化:缓存、异步、集群

  • 软件代码性能优化:并发编程,资源复用,异步编程,数据结构



2 操作系统

2.1程序运行时架构

程序运行起来以后,成为进程

2.2 操作系统多任务运行环境

采用进程分时执行处理并发用户请求



2.3 进程的运行期状态

  • 运行 - 在cpu上运行

  • 就绪 - 获得了除cpu之外的一切所需资源,获得cpu资源就可以运行

  • 阻塞 - 等待其他事件发生,无法运行。



2.4 进程 VS 线程

系统创建进程,进程创建线程。线程共享进程的内存地址空间,线程拥有自己私有的内存地址范围与其他线程隔离

线程安全

当某些算法修改内存堆(进程共享内存)里的数据时,如果由多个线程同时进行,就会出现同时修改数据的情况。(new出来的对象一般放在堆里)

临界区

多个线程访问共享资源的这段代码称为临界区,解决线程安全问题的主要方法是使用锁,将临界区的代码枷锁,只有获得锁的线程才能执行临界区代码。

阻塞导致高并发系统崩溃

锁会引起线程阻塞,导致线程既不能继续执行,也不能释放资源。进而导致资源耗尽,最终导致系统崩溃

避免阻塞引起的崩溃

  • 限流:控制进入计算机的请求数

  • 降级:关闭部分功能程序的执行,尽早释放线程

  • 避免阻塞:异步I/O,无临界区(Actor模型)



3 锁

偏向锁

指一段同步代码一直被一个线程所访问,那么该线程会自动获取锁,降低获取锁的代价。

轻量级锁

指当锁是偏向锁时,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提高性能。(非公平锁)

重量级锁

指当锁是轻量级锁时,另一个线程虽然自旋,但自旋不会一直持续下去,当自旋到一定次数时,还没获取到锁,就会进入阻塞,该锁就膨胀为重量级锁,重量级锁会让其他申请的线程进入阻塞,性能降低。(公平锁,Mark Word记录排队信息)

总线锁

使用处理器的Lock信号,当一个处理器在内存总线上输出此信号的时候,其他处理器请求将被阻塞,该处理器独占内存。(悲观锁)

缓存锁

指缓存区域如果被缓存在处理器的缓存行中,且被Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上盛宴Lock信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会组织同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行数据时,会使缓存行无效。(乐观锁)

公平锁

多个线程按照申请锁的顺序来获取锁。

非公平锁

多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,可能会造成饥饿现象。

可重入锁

指某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。

独享锁/互斥锁

该锁一次只能被一个线程持有。

共享锁

该锁可以被多个线程所持有。

读写锁

多个读线程之间并不互斥,而写线程则要求与任何线程互斥。(读写互斥、写写互斥、读读不互斥)

乐观锁

认为对于同一个数据的并发操作,是不会发现修改的。在更新数据的时候,检查是否已经被修改过,如果修改过,就放弃。

悲观锁

认为同一个数据的并发操作,一定是会发生修改的,哪怕没有发生修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取枷锁的形式。悲观的认为,不加锁的并发操作一定会出问题。

分段锁

细化锁的粒度,指当操作不需要更新整个数组的时候,就仅针对数组的一段进行加锁操作。(JDK ConconrrentHashMap是通过分段锁实现高效并发操作的)

自旋锁

指尝试获取锁的线程不会立即阻塞,而是采取循环的方式去尝试获取锁。有点:减少线程上下文切换的消耗,缺点是循环会消耗CPU。



4 文件与硬盘I/O

机械硬盘

采用B+数的数据结构存储文件

固态硬盘

采用LSM树存储文件

RAID独立硬盘冗余阵列

  1. RAID0:读写快,一份数据分成N份,并发写入N块硬盘。缺点:其中一块坏了,所有磁盘的数据都会损坏。

  2. RAID1:将一份数据同时写入两个硬盘,保证了存储的可靠性。

  3. RAID10:结合RAID0与RAID1两种方案,读写快、可靠性高,但磁盘利用率低。

  4. RAID5:原理类似RAID3,但校验数据不再写入第N块磁盘,而是螺旋式写入所有磁盘。使得校验数据的修改被平均到所有磁盘上,避免了RAID3频繁写坏磁盘的情况。

  5. RAID6:类似RAID5,但是数据只写入N*2块磁盘,并螺旋式地在两块磁盘中写入校验信息。

分布式文件系统HDFS

系统在整个存储集群的多台服务器上进行数据并发读写和备份,可以看作在服务器集群规模上实现了类似RAID的功能。

HDFS以Block(64M)为单位管理内容,一个文件被分割成若干个Block,当应用程序写文件时,没写完一个Block,HDFS就将其自动复制到其他机器上,保证每个Block有多个副本。

在HDFS中有两个重要角色:NameNode(一个)和DataNode(多个)。

5 数据机构与算法



用户头像

尔东雨田

关注

预备用枪! 2017.12.12 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -week7 总结