第七周课后总结
性能优化
主要视角:用户感受到的性能
客观视角:性能指标衡量的性能
响应时间、并发数、吞吐量、性能计数器。
响应时间:越快越好。
并发数:系统同时处理请求的数目。某个时间点,同时处理的请求数。
在线用户数:当前登录系统的用户数
系统用户:可能访问系统的总用户数
百万基本并发数就已经很了不起了
吞吐量:
单位时间中处理的请求数量。
TPS和QPS
吞吐量=(100/响应时间ms)*并发数
性能计数器
System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等指标。对这些指标设置阈值,进行监控。
性能测试方法
性能测试、负载、压力以及稳定
稳定性测试
被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,已检测系统是否稳定。
成本和收益有一个平衡点,需要架构师考虑。
全链路压测的挑战
1,模拟数据与真实数据的贴近度;【1,dump用户真实的请求数据;2,对dump数据进行筛选、脱敏、ID隔离、订正等;使用模型预测算法,得到压测数据;】
2,怎样来保障对线上无影响;
(1)逻辑隔离,直接把测试和正常数据写到一起,通过特殊的表示能够区分开。
缺点:可能污染线上数据,破坏线上数据安全性。
(2)虚拟隔离,在所有写数据的地方做mock,并不正在的写进去;
缺点:mock对压测结果的准确性会产生干扰;
(3)物理隔离,所有写数据的地方对压测流量进行识别,判断一旦是压测流量的写,就写到隔离的位置,包括存储、缓存、搜索引擎等等;为压测专门配置一些服务器;
3,大型出校活动所带来的的巨大流量要怎么模拟出来;
利用运营商提供的cdn服务来模拟用户的请求;在cdn服务器上部署压测引擎
性能优化的两个基本原则
1,你不能优化一个没有测试的软件;
2,你不能优化一个你不了解的软件;
性能优化的一般方法:
1,性能测试,获取性能指标;【了解现状】
2,指标分析,发现性能与资源瓶颈点;【分析现状】
3,架构与代码分析,寻找性能与资源瓶颈关键所在;【找到问题】
4,架构与代码以及其他优化,优化关键技术点,平衡资源利用;【解决问题】
5,性能测试,进入性能优化闭环;【对优化结果进行分析,如果没有达到目标,则反复迭代1~5】
优化前和优化后都要进行测试
系统性能优化的分层思想
1,机房与骨干网络的性能优化
异地多活的多机房架构,专线网络与自主CDN建设
2,服务器与硬件的优化
使用更优的cpu,磁盘,内存,网卡,服务器等
3,操作系统
操作系统本身的问题,导致资源使用率较低
4,虚拟机优化
5,基础组件性能优化
6,软件的架构优化
缓存【优化读】
异步【优化写】
集群【负载均衡】
7,软件代码性能优化
遵循面向对象的设计原则与设计模式编程
并发编程,多线程与锁
资源复用,线程池与对象池
异步编程,生产者消费者
数据结构等
进程分时执行。
线程处理用户请求
每个线程有自己的栈空间,对局部变量来说是各个线程是独立的。
避免阻塞引起的崩溃
限流:控制进入计算机的请求数,进而减少创建的线程数;
降级:关闭部分功能程序的执行,尽快释放线程;
反应式:异步;无临街区(Actor模型)
偏向锁:单个线程cas
轻量级锁:多个线程cas
重量级锁:cas达到一定次数时,进入阻塞队列,通过唤醒机制唤醒阻塞线程。
Actor可以构建集群
Rooter for cluster
评论