架构师训练营 - 学习总结 第 7 周

用户头像
水边
关注
发布于: 2020 年 07 月 20 日

本周的学习内容,主要讲了性能测试和锁的一些概念、应用。



1、性能测试

性能测试有2个视角:

1.1、主观视角:

就是从人的主观感觉上,来判断是不是有了优化效果。

这个一般可以通过UI设计优化、调整业务操作流程,比如空白的等待页面,可以出现一些画面、图标、或提前展示一些不影响后续交互的信息给用户,让用户减小等待的感觉。

这个一般不属于技术架构范围,当然作为架构师,还是要有相关的观念,并能提出相关建议。

1.2、客观视角:

根据各种性能指标,对系统进行分析优化,这是架构师要重点关注的角度。

性能指标常见如下:

  • 响应时间:从发出请求的第一个字节开始,到收到最后一个响应数据为止经过的时长;

  • 并发数:同时提交请求到服务器的用户数,注:用户在浏览页面时,并不产生并发;

  • 吞吐量:在单位时间内,系统处理的请求数量,包括QPS、TPS、UV、PV、业务数/小时、HPS等。

QPS是每秒查询次数、TPS是每秒处理的事务数。

比如用户访问一个完整加载的页面就是1个TPS,这个页面包含的js、css、ajax请求总数就是QPS。

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

系统负载:就是Top里的Load Avg,3个浮点数的含义:1分钟 5分钟 15分钟的平均负载值

正在处理的线程数+等待执行的线程数。

  • 性能测试包含:性能测试、负载测试、压力测试 这样3个阶段

要根据响应时间、并发数,来测试出系统的3个边界:系统最佳运行点、系统最大负载点、系统崩溃点。

我们的系统,要保证它在系统最佳运行点左右,不能长期牌最佳运行点右侧。



2、测试工具

主要的测试工具有JMeter、ab、Gatling、LoadRunner等。

根据测试结果进行如下各层面的优化:

  • 机房与骨干网络的性能优化

  • 服务器与硬件性能优化

  • 操作系统性能优化

  • 虚拟机JVM性能优化

  • 基础组件性能优化

  • 软件架构性能优化

  • 软件代码细节性能优化

注:

不要优化一个未经测试的系统,都不知道系统的瓶颈点,

现实中无数次没经过测试,就直接优化系统的案例,因为我懂太多牛B的技术,即使有效果,也不推荐。

重构的目的是什么?为什么要重构,优化前后的对比指标有没有?



2、锁

常见的锁有:

  • 偏向锁:线程对共享资源尝试获取偏向锁,获取失败时,升级为轻量级锁;

  • 轻量级锁:线程通过短暂的自旋,继续尝试获取锁,失败后取消自旋,升级为重量级锁;

  • 重量级锁:进入等待资源的队列,性能较低。



  • 共享锁:也叫读锁,可以多个线程持有,大家都可以共享读取;

  • 互斥锁:也叫写锁,只能一个线程独占,必须等资源上没有共享锁或其它独占锁时,才能持有;



  • 乐观锁:认为资源总是有效的,简单实现就是根据一个增量标志位判断资源未修改时,进行更新,变化了就更新失败;

  • 悲观锁:认为资源总是冲突的,简单实现就是先加互斥锁,成功后再更新。



  • 可重入锁:如果线程A获取了资源的锁,在子函数或递归调用时,又能正确的再次获取该资源的锁,叫可重入锁,如果不能获取,将出现死锁:自己等待自己的锁。



3、最后重点讨论了AKKA响应式编程框架:

目前业界没有AKKA的最佳实践,所以应用比较少。

发布于: 2020 年 07 月 20 日 阅读数: 22
用户头像

水边

关注

还未添加个人签名 2019.04.14 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 学习总结 第 7 周