前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构设计---性能设计的详解

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

作者头像
小马哥学JAVA
发布2023-02-27 14:55:43
5840
发布2023-02-27 14:55:43
举报
文章被收录于专栏:JAVA开发专栏JAVA开发专栏
前言:

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

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

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

性能的指标:

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

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

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

吞吐量是指单位时间内系统处理请求的数量,体现的是系统的处理能力,一般用每秒的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的处理等。

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

小结:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小马哥学JAVA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 性能的指标:
  • 性能测试:
    • 性能测试:
      • 负载测试:
        • 压力测试:
        • 性能优化:
          • 性能中心优化:
            • 硬件的优化:
              • 操作系统的优化:
                • 虚拟机的优化:
                  • 基础组件优化:
                    • 架构优化:
                      • 缓存
                      • 消息队列:
                      • 集群:
                    • 代码优化:
                    相关产品与服务
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档