写点什么

第七周课后总结

用户头像
饭桶
关注
发布于: 2020 年 11 月 04 日

性能优化



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

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



响应时间、并发数、吞吐量、性能计数器。



响应时间:越快越好。

并发数:系统同时处理请求的数目。某个时间点,同时处理的请求数。

在线用户数:当前登录系统的用户数

系统用户:可能访问系统的总用户数

百万基本并发数就已经很了不起了



吞吐量:

单位时间中处理的请求数量。

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



用户头像

饭桶

关注

还未添加个人签名 2020.07.27 加入

还未添加个人简介

评论

发布
暂无评论
第七周课后总结