写点什么

架构师训练营第一期 - 第七周学习总结

发布于: 2020 年 11 月 08 日

架构师在进行性能优化不仅需要关注架构和代码,还需要关注更高层面的中间件、虚拟机、操作系统、服务器硬件、网络等情况。

性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。性能评价的视角主要有两方面:

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

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

不同视角下有不同的性能标准,不同的标准有不同的性能测试指标,互联网应用性能测试的主要指标有响应时间、并发数、吞吐量、性能计数器等。

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

并发数:系统能够同时处理请求的数目,这个数字也反映了系统的负载特性。对于网站而言,并发数即系统并发用户数,指同时提交请求的用户数目,以此相对应的还有在线用户数(当前登录系统的用户数)和系统用户数(可能访问系统的总用户数)。

吞吐量:指单位时间内系统处理的请求的数量,体现件系统的处理能力。对于网站,可以用“请求数/秒”或是“页面数/秒”来衡量,也可以用“访问人数/天”或是“处理的业务数/小时”等来衡量。TPS(每秒事务数)也是吞吐量的一个指标,此外还有HPS(每秒HTTP请求数),QPS(每秒查询数)等。

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

性能计数器:是描述服务器或操作系统性能的一些数据指标。包括System Load、对象与线程数、内存使用、CPU 使用、磁盘与网络I/O 等指标。这些指标也是系统监控的重

要参数,对这些指标设置报警阀值,当监控系统发现性能计数器超过阀值的时候,就向运维和开发人员报警,及时发现处理系统异常。



性能测试主要针对的是某些接口接口进行测试,不管是我们的性能压测的并发数还是我们的关于结果的分析,都主要针对的是单一接口。如果要想要看整个系统是不是达到了性能的目标,那么必须要对整个系统进行全面的全链路性能压测。

全链路压测其实指的就是在特定的业务场景下,将相关的链路完整的串联起来同时施压,尽可能模拟出真实的用户行为,当系统整站流量都被打上来的时候,必定会暴露出性能瓶颈,才能够探测出系统整体的真实处理能力,以及有指导的在大促前进行容量规划和性能优化,这便是线上实施全链路压测的真正目的。

实施全链路压测的挑战主要在三个方面:

1.压测相关的业务系统上众多,并且牵涉到整条链路上所有的基础设施和中间件,如何确保压测流量能够通畅无阻,没有死角?压测的数据怎么构造(亿万级的商品和用户),数据模型如何与真实贴近?

2.全链路压测直接在线上的真实环境进行模拟,怎么样来保障对线上无影响?

3.大型促销活动所带来的巨大流量要怎么样制作出来?

全链路压测需要模拟各种访问场景下所有的用户请求数据,最好的办法是用用户真实产生的数据,将用户的请求数据dump出来。我们不能直接拿用户的数据进行压测,需要对数据进行清洗过滤、脱敏(支付数据)、id隔离、订正后构造出可以进行高并发压测的数据。在通过流量平台在压测开始的时候将这些数据放大并发的向整个系统进行请求,但这可能影响现有系统的正常运行,处理手段有三种:

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

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

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



软件性能优化有两个基本的原则:

1.你不能优化一个没有测试的软件

必须要先进行性能测试,了解它的性能指标是什么样的,响应时间、吞吐量、并发数、各种性能计数器(内存、cup消耗)是什么样的,发现它有性能瓶颈、性能问题、性能不符合预期然后才能对它进行优化。

2.你不能优化一个你不了解的软件

你必须先要了解软件是做什么的,整体架构是什么样的,内部的一些关键细节是如何实现的才能有的放矢的进行优化。

性能测试的主要指标

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

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

吞吐量:单位时间完成的任务数。

性能计数器:System Load,线程数,进程数,CPU、内存、磁盘、网络使用率。

性能优化的一般方法和步骤:

1.性能测试,获得性能指标。

2.指标分析,发现性能与资源瓶颈点。

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

4.架构与代码优化,优化关键技术点,平衡资源利用。

5.性能测试,进入性能优化闭环。



系统性能优化的分层思想

机房与骨干网络性能优化

异地多活的多机房架构是在不同城市多个机房部署应用系统,主要目标是为了高可用,但同时也就近为用户提供服务让用户访问离他最近的机房,减少了物理网络的传输时间,从而达到了提高性能的目的。专线网络与自主CDN 建设也可以减少物理网络的传输延迟来提高性能。

服务器与硬件性能优化

使用更优的CPU,磁盘,内存,网卡,对软件的性能优化可能是数量级的,有时候远远超过代码和架构的性能优化。更好的服务器本身的性能提升就可能达到数量级的,程序在上面运行提升的性能也是数量级的。

操作系统性能优化

调整操作系统内核处理参数,优化系统的处理方式从而提升性能。

虚拟机性能优化

不同的垃圾回收算法可能造成性能问题,调整回收算法。

基础组件性能优化

基础中间件软件本身也是在不断优化演进的,更换更高的中间件软件版本或者更优的同类中间件软件来优化系统性能。

软件架构性能优化

1.使用缓存:从内存获取数据,减少响应时间;减少数据库访问,降低存储设备负载压力;缓存结果对象,而不是原始数据,减少CPU 计算。缓存主要优化读操作。

2.进行异步处理:即时响应,更好的用户体验;控制消费速度,合适的负载压力。异步主要优化写操作。

3.采用分布式集群架构:负载均衡、分布式缓存、分布式消息队列、分布式数据库、NOSQL都是采用集群架构进行处理,用更多的服务器提供更多的处理能力来对外提供服务。互联网技术的发展路径就是:更多的用户访问需要消耗更多的计算资源,单一服务器计算资源的增加是有极限的,所以需要增加更多的服务器。关键是如何利用起来这些服务器。集群的技术目标只有一个:如何使很多台服务器对使用者而言看起像一台服务器。

软件代码性能优化

遵循面向对象的设计原则与设计模式编程;并发编程,多线程与锁;资源复用,线程池与对象池;异步编程,生产者消费者;选择合适的数据结构:数组、链表、hash 表、树。



用户头像

还未添加个人签名 2019.01.15 加入

还未添加个人简介

评论

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