写点什么

架构师训练营 week7 学习总结

用户头像
花果山
关注
发布于: 2020 年 12 月 06 日

性能测试的主要指标

响应时间:完成一次任务花费的时间

并发数:同时处理的任务数

吞吐量:单位时间内系统处理的请求数量,TPS 每秒事务数、HPS 每秒 HTTP 请求数、QPS 每秒查询数,吞吐量=(1000/响应时间 ms)*并发数

性能计数器:性能指标阈值,cpu、内存、硬盘、system load

全链路压测的挑战

数据构造:线上数据 dump--筛选脱敏--压测基础数据中心--数据构造--压缩--流量平台

数据隔离:

逻辑隔离,直接把测试数据和正常数据写到一起,通过特殊的标识能够区分开。 • 可能污染线上数据,破坏线上数据安全性。

虚拟隔离,在所有写数据的地方做 mock,并不真正的写进去。 • 这个方案不会对线上产生污染,但是 mock 对压测结果的准确性会产生干扰。 

物理隔离,所有写数据的地方对压测流量进行识别,判断一旦是压测流量的写,就写到 隔离的位置,包括存储、缓存、搜索引擎等等。

流量构造:天猫双十一全链路压测的流量平台 是一个典型的 master+slave 结构, master 作为压测管控台管理着上千 个 slave 节点;slave 节点作为压测 引擎,负责具体的请求发送。 Master 作为整个压测平台的大脑, 负责的整个平台的运转控制、命令 发送、数据收集、决策等。Slave 节 点部署在全球各地的 cdn 节点上, 从而模拟从全球各地过来的用户请 求。整套全链路压测的流量平台在 压测过程当中平稳输出 1000+w/s 的用户请求、同时保持过亿的无线 用户长链接。

性能优化的分层思想

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

 • 服务器与硬件性能优化

 • 操作系统性能优化

 • 虚拟机性能优化

 • 基础组件性能优化 

 • 软件架构性能优化

 • 软件代码性能优化

软件架构性能优化三板斧 • 缓存 • 异步 • 集群

软件代码性能优化 

遵循面向对象的设计原则与设计模式编程,很多时候程序性能不好不是因为性能上有什么技术挑战,仅仅就是因为代码太烂了。

并发编程,多线程与锁 

资源复用,线程池与对象池 

异步编程,生产者消费者 

数据结构,数组、链表、hash 表、树

操作系统:计算机如何处理成百上千的并发请求

进程分时执行

线程栈、线程安全、临界区

避免阻塞引起的崩溃 

限流:控制进入计算机的请求数,进而减少创建的线程数。 

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

反应式:异步;无临界区(Actor 模型)

锁:锁原语 CAS 与各类锁

锁原语 CAS CAS(V,E,N)

 • V 表示要更新的变量

 • E 表示预期值 

 • N 表示新值 如果 V 值等于 E 值,则将 V 的值设为 N,若 V 值和 E 值不同,什么都不做。

CAS 是一种系统原语,原语的执行必须是连续的,在执行过程中不允许被中断。

偏向锁 轻量级锁 重量级锁 

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

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

重量级锁:指当锁是轻量级锁时,另一个线程虽然自旋,但自旋不会一直持续下去,当 自旋到一定次数时,还没获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁会 让其他申请的线程进入阻塞,性能降低

总线锁与缓存锁

公平锁 非公平锁

可重入锁

独享锁/互斥锁 共享锁 读写锁

乐观锁 悲观锁

分段锁: 分段锁的设计目的是细化锁的粒度,当操作不需要更新整个数组的时候,就仅仅针对数 组的一段进行加锁操作。 JDK ConcurrentHashMap 是通过分段锁的形式来实现高效并发操作的。

自旋锁

案例:异步并发分布式编程框架 akka

Core concept: Actor


发布于: 2020 年 12 月 06 日阅读数: 24
用户头像

花果山

关注

还未添加个人签名 2019.05.09 加入

还未添加个人简介

评论

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