架构设计---性能设计的详解

news2025/2/23 13:45:00

前言:

系统性能是互联网应用最核心的非功能性架构目标,系统因为高并发访问引起的首要问题就是性能的问题,高并发访问的情况下,系统因为资源不足,处理每个请求的时间都会变慢,看起来就是性能的变差。

因此性能优化是互联网架构师的核心职责之一,通常我们想到性能优化,首先想到的就是优化代码,事实上,一个系统就是有多个方面组成的,所有这些方面都可以进行优化。

性能优化的一个大前提就是必须知道当前系统的性能状况,然后才能进行性能优化,而了解系统性能状况必须通过性能测试。

性能的指标:

性能测试就是模拟用户,对系统进行高并发的访问压力,观察系统的性能指标,系统性能指标主要有响应时间、并发数、吞吐量性能计数器。

响应时间,是指发出请求开发到收到最后响应数据所需要的时间,响应时间是系统最重要的性能指标,最直接反映了系统的快速。

并发数是指系统同时处理处理的请求数,这个数字反映了系统的负载压力情况,性能测试的时候,通常在性能压测工具中,用多线程模拟并发用户请求,每个线程模拟一个用户请求,这个线程数就是性能指标的并发数。

吞吐量是指单位时间内系统处理请求的数量,体现的是系统的处理能力,一般用每秒的HTTP请求数HPS、每秒事务数TPS、每秒查询数QPS这样的一些指标来衡量。

吞吐量、响应时间和并发数三者之间是有关联的,并发数不变,响应时间足够快,单位时间内的吞吐量就会相应的提高。比如说并发数是1,响应时间是100ms,TPS可以是10,。如果响应时间是1000ms,TPS吞吐量变成了1.

性能计数器指的是服务器或者操作系统性能的一些指标数据,包括系统负载System Load、对象和线程数、内存使用、CPU使用、磁盘和网络IO等指标。这些指标都是系统监控的重要参数,反映系统负载和处理能力的一些关键指标,通常这些指标和性能是强关联的。这些指标高的话,通常也预示着性能可能已经出现了问题,在实践中运维和开发人员会对这些指标设置一些报警和阀值。当监控系统发现性能计数器超过阀值的时候,就会向运维和开发人员进行报警处理。

性能测试:

性能测试是使用性能测试工具,通过多线程模拟用户请求对系统施加高并发的请求压力,得到以上这些指标。事实上,性能测试随着性能测试工具逐渐增加请求线程数,系统的吞吐量和响应时间会呈现出不同的性能特性,具体来说,整个测试过程又可以分为性能测试、负载测试、压力测试三个阶段。

性能测试:

性能测试是指系统设计初期规划的性能指标为预期的目标,对系统不断进行添加压力,验证系统在资源可以接受的范围内是否达到性能的预期指标,这个过程中,随着并发数的增加,吞吐量也在增加,响应时间变化不大的情况。

负载测试:

负载测试是对系统不断添加并发请求,增加系统的压力,直到系统的某项或多项指标达到安全的临界值。这个过程中,随着并发数的增加,吞吐量只有小幅度的增加,达到最大值以后,吞吐量还会下降,而响应时间会不断增加变大。

压力测试:

压力测试就是超过安全负载的情况下,增加并发请求数量,对系统继续添加压力,知道系统崩溃,或者不再处理任何请求了,此时并发数就是系统的最大压力承受能力,这个过程中,吞吐量迅速下降,响应时间迅速增加,一直到系统崩溃,吞吐量0。

性能压力测试工具不断增加请求线程数,持续对系统进行性能测试,负载测试、压力测试得到对应的TPS和响应时间。

性能优化:

一个系统是由很多方面构成的,程序只是这个系统的一个小部分,因此进行性能优化的时候,也需要从系统的角度出发,综合考虑方案。

用户体验优化:

性能优化的最终目的是让用户有更好的性能体验,所以性能优化最直接的其实是优化用户体验。同样500毫秒的响应时间,如果收到全部响应数据后才开始显示给用户,相比收到部分数据就开始显示,对用户的体验就完全不一样了,同样在等待响应结果的时候,显示一个空白的页面和显示一个进度条,用户感受性能也是完全不同的。

除了用户体验优化这种比较主观的性能优化,即使想要真正优化性能指标,进行客观的性能优化,也可以从系统的角度出发,全方位考虑系统的各个方面。

性能中心优化:

数据中心性能优化,开发软件是部署在数据中心的,对于一个访问的互联网应用而言,如果只有一个数据中心,那么最远的用户访问这个数据中心的时候,即使光速进行通信的话,一次请求的响应网络通信也需要130毫秒才能处理完毕。

所以现在大型互联网应用基本都采用多数据中心方案,在全球各个主要区域都部署自己的数据中心,就近进行用户提供服务,加快响应速度。

硬件的优化:

可以使用垂直伸缩、水平伸缩两种架构方案进行处理。有时候,硬件能力的提升对系统性能的影响是非常大的。

操作系统的优化:

不同系统以及系统内部的某些特性也会对软件性能有重要的影响。分布式计算的某些服务器上,操作系统自身消耗cpu的占比较高。

虚拟机的优化:

比如说Java这样的编程语言开发的系统是需要运行在Linux虚拟机上面的,虚拟机的性能对系统的性能也有较大的影响,特别是垃圾回收,可能会导致应用程序出现巨大的卡顿。

基础组件优化:

在虚拟机之下,应用程序之上,依赖的各种基础组件,比如说Web容器,数据库连接池,MVC框架等等,这些组件的性能也会对系统性能有较大的影响。

架构优化:

技术架构的优化方案,比如说:缓存、消息队列、集群等

缓存

通过从缓存读取数据,加快响应时间,减少后端计算的压力,缓存主要是提升读的性能。

消息队列:

通过数据写入消息队列,异步进行计算的处理,提升系统的响应时间和处理速度,消息队列主要是提升写的性能。

集群:

单一的服务器进行伸缩,构建成一个集群完成同一种计算任务,从而提高系统的高并发压力的性能。各种服务器都可以构建集群、缓存集群、数据库集群等等。

代码优化:

数据结构的优化、sql语句的优化、异步编程Io的处理等。

此外还可以使用线程池、连接池等对象池的技术,复用资源、减少资源的创建。设计模式的使用,开发清晰、易懂的代码。

小结:

性能优化的顺序:性能测试、根据性能测试结果进行性能的分析,寻找性能瓶颈点,针对瓶颈进行优化的处理,优化完成后继续进行性能测试,观察性能是否有改善,是否达到预期的性能目标,如果没有达到目标,继续分析瓶颈点,迭代优化处理。

性能优化的一个前提是进行性能的测试,了解系统的性能指标,才能有目标进行性能优化,必须要了解系统的内容部结构,能够分析得到引起性能问题的原因所在,并解决问题。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是随机森林?

什么是随机森林? 随机森林是一种有监督的机器学习算法。由于其准确性,简单性和灵活性,它已成为最常用的一种算法。事实上,它可以用于分类和回归任务,再加上其非线性特性,使其能够高度适应各种数据和情况。 …

JavaSE初阶篇:系统环境变量path|classpath|JAVA_HOME

环境变量是为了 “在命令行窗口下”编译和运行Java程序而配置一、系统变量:Pathpath环境变量作用:将命令所在的路径配置到path中去,就相当于在计算机中“注册”了一样,以后找这个命令,会直接去你配置的路径下寻找。达到…

Revit中怎么使两面墙拉近时不自动连接?柱断梁墙功能

一、Revit中怎么使两面墙拉近时不自动连接? 问题:同材质的墙体在同一条直线上只要将其端点拖拽至一起就会融合成一道整墙体(如图-1、2所示),但是在做一些较特殊的结构时我们不需要其连接成一道整墙,有没有什么办法能够设置呢? 我们可以通过…

避免Mysql插入重复数据的几种方法

1、前言 在平时对数据库操作时,有时候需要向数据库中插入一些数据,此时就需要使用数据库的插入语句,但是在向数据中库插入数据时,不能盲目插入,因为盲目的插入可能会造成数据重复,浪费数据库的资源&#x…

Pytest三种配置文件

😎😎原文出自:测个der,博主的公众号,格式美观一些。 配置介绍 pytest 的主配置文件,可以改变 pytest 的默认行为,执行 pytest -h,这里有很多配置均可用于 pytest.ini配置 (venv) …

HarmonyOS鸿蒙学习笔记(16)Canvas入门使用

Canvas入门指南1、Canvas代码结构2、简单案例2.1 fillStyle和fillRect 绘制蓝色矩形2.2 strokeRect和strokeStyle 绘制红色边框2.3 lineCap的使用2.4 lineJoin的使用2.5 closePath的使用3、参考资料1、Canvas代码结构 在使用Canvas的时候,需要向初始化RenderingCon…

第四十七讲:IPv6基础知识

一、IPv6网络元素及概念 IPv6的网络元素如下图所示。 节点:任何运行IPv6的设备,包括路由器和主机(甚至还将包括PDA、冰箱、电视等)。邻节点:连接到同一链路上的节点。这是一个非常重要的概念,因为IPv6的邻…

JS面试题--this指向+面试题

this其他补充 内置函数的绑定思考 01_一些函数的this分析 // 1.setTimeout原理 // function hySetTimeout(fn, duration) { // fn.call(window) // }// hySetTimeout(function() { // console.log(this) // window // }, 3000)// setTimeout(function() { // console.l…

EEG论文阅读和分析:《Differential entropy feature for EEG-based emotion classification》

论文阅读《Differential entropy feature for EEG-based emotion classification》 论文的核心是提出差分熵作为特征,并且对差分差分熵和比例差分熵等特征进行对比研究。 算法流程步骤: 采样过程: A.预处理 根据受试者的压力反应&#xf…

零基础转行软件测试可行吗?

如今,随着人们对软件质量的要求越来越高,软件测试已经成为最热门的IT行业之一。不少非科班出身的转业者也纷纷开始观望这个行业,因此不少人会问,零基础转行软件测试有前途吗?答案显而易见,如果你想成为最炙…

【C语言】数据类型(基本类型、构造类型、类型转换)

⏰打卡:DAY1 🏆今日学习目标:数据类型(基本类型、构造类型、类型转换) ✨个人主页:颜颜yan_的个人主页 🎉专栏系列:从0开始学C语言 文章目录前言基本类型整型浮点型字符型构造类型数…

Mybatis学习——增删改(mysql8.0)

目录 一、配置文件 (一)添加mybatis依赖: (二)resources资源目录的配置 1.database.properties文件的设置 2.mybatis-config.xml文件的设置 二、引入原始类 三、DogDao接口,定义增删改功能 (一)单条数据增删改 1.新增 2.删除 3.修改 (二)多条…

Makefile详细教程

Makefile详细教程 我编写本指南是因为我永远无法完全理解 Makefile。 他们似乎充斥着隐藏的规则和深奥的符号,提出简单的问题并没有得到简单的答案。 为了解决这个问题,我花了几个周末的时间坐下来阅读所有关于 Makefile 的内容。 我已将最关键的知识浓…

【链表】leetcode206.反转链表(C/C++/Java/Js)

leetcode206.反转链表1 题目2 思路2.1 双指针法(迭代)2.2 递归法2.2.1 递归--从前往后翻转指针指向2.2.2 递归--从后往前翻转指针指向3 代码3.1 C版本(迭代)3.2 C版本(迭代递归)3.3 Java版本(迭…

【OpenDDS开发指南V3.20】第十章:Java Bindings

介绍 OpenDDS提供JNI绑定。Java应用程序可以像C++应用程序一样使用完整的OpenDDS中间件。 有关入门的信息,包括先决条件和依赖项,请参阅$DDS_ROOT/java/INSTALL文件。 Java版本9和更高版本使用Java平台模块系统。要在这些Java版本中使用OpenDDS,请将MPC特性Java_pre_jpms…

QT Echarts 联动共享数据表图 使用详解

Echarts是百度的一款可视化界面开发的平台,里面的地图以及数据可视化内容十分丰富,适合用于一些大屏数据显示项目或者一些ui界面开发。每一个ECharts图表使用一个无边框的QWebView来展示,这样多个不同类型的ECharts图表就是多个封装不同类型E…

kettle 筛选数据 并根据关键字段去重 设计

文章目录前言kettle 筛选数据 并根据关键字段去重 设计实现:1、配置sqlite 数据库链接2、先从test表里抽取数据3、将表输入查询的数据插入到excel里4、将筛选出来的数据根据id去重5、插入本地excel6、ETL 整体效果:7、测试:前言 如果您觉得有用的话,记得给博主点个赞…

安全轻量化股票看盘盯盘软件需要实现的功能和基本要求是什么?

有很多投资者是上班族的,因此是不能无时无刻盯盘看盘的,那么为了解决这个问题就需要用上轻量化股票看盘盯盘软件,那么一个安全的轻量化股票看盘盯盘软件需要具备哪些功能和基本要求呢?接下来小编为大家分析分析! 1.一定…

小试跨平台局域网文件传输工具NitroShare,几点感想

随着电脑系统国产化的推进,单位用的OA系统已转移到国产电脑上了,但是国产电脑上的操作系统基于Linux,软件商店里可选的应用软件还不够多,功能也还有待提高。为了提高处理效率,经常需要把文件从国产电脑传到Windows平台…

信息收集过程WAF绕过详解

今天继续给大家介绍渗透测试相关知识,本文主要内容是信息收集过程WAF绕过详解。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未…