架构设计70-质量管理02-性能优化03-规范

简介: 架构设计70-质量管理02-性能优化03-规范

架构设计系列文章,请参见连接。

背景

一个架构师在平时工作中的重点注意的工作内容,就指明架构师所设计的产品架构的各方面特性。重点是数据库的架构师会将认为所有的工作核心就是数据库。重点在运营模式的架构师会认为所有的工作都是业务模式,运营方法。

再加上公司整体规划与方向有着非常明显的弱化技术的要求,架构师为了KPI、OKR放弃对产品架构的关心。就会造成整个公司少了架构师还是正常运转的情况。但是做一个真实的比喻,就如同下图一样:

少了技术型架构师的驱动的公司,就像上图一样。在不做变更的时候会使用的很正常,很稳定。但是如果稍微做一点变更整个系统就会进入崩溃状态。

每一个上线的产品,最主要的问题就是稳定性。为了应用能够稳定的提供服务,需要考虑很多内容。其中性能优化就是很重要的一个考虑项。性能优化是事后解决性能问题的方法,也有很多事前解决性能问题的方法。下面整体介绍性能优化的各个方面。

前期规划

在做一件事情之前,需要对这件事情有深入的认识与理解。然后基于认识和理解之后,对事情进行分析。分析后做出整体做事的规划或方法,然后再着手进行实施。

根据上面做事方式的指导。先对性能优化这件事情进行整体的规划。因为性能优化是项目实施过程中的一个步骤,所以在这里将说明在项目实施过程与性能优化之间的关系:
项目实施规划

上图中浅蓝色部分是项目管理过程中要做的。深蓝色部分是性能优化设计到的步骤。蓝黑色部分是项目研发过程中的内容。在上产品环境后,肯定还需要各种各样的性能调优工作。例如:最近几年淘宝,京东都在做《全链路压测》的事情。所以这件事情需要一直做下去。

  • 调研

在整体项目实施规划中,非功能需求是一个很容易被忽略的部分。我们在做设计的一个基本依据就是非功能需求。有了它之后就可以估算出系统的整体性能要求大概范围。根据这个范围以及成本、时间约束就可以对系统中需要使用的技术,不使用的技术做出一个前期规划与设计。

针对产品型的性能数据评估。因为产品是已经上线的,所以,就可以根据现有的数据以及即将来到的运营策划数据进行性能数据的评估。这里就需要了解现有系统的使用情况数据,性能、稳定性表现情况之后。在作出相关的评估与设计。

  • 设计

设计阶段中根据前面收集的功能需求,非功能需求以及约束进行分析。分析出问题域中的核心问题,周边问题并将这些问题域的问题使用解决域提供的工具进行解决。解决域中的工具取决于架构师准备了那些工具。所以,在同一个问题域下,架构师的解决域确定了解决的方式。

因为性能是设计的依据,而性能有事从非功能需求来的。所以,对性能的交付也是需要有验收过程与验收方法的。在设计过程中需要将性能的验收方法,验收标准一并进行设计。

在产品型的性能设计过程中是有相对应的《性能验收软件架构》需要同时进行设计的。因为性能验收也是一套独立的软件系统。不过这套软件系统的目标就是帮助业务系统达到更高的性能指标而存在的。

  • 开发

开发过程中需要有规范的流程。从代码质量到交付方式,都需要一套标准出来。这样就可以有效的保证产品可以按时按点保质的方式进行交付。

  • 监控

在产品上线后运维比较关注的是APM,开发比较关注的是Tracing。监控的主要目的是为整个产品提供运行时数据。因为之前使用各种方法评估的内容,都是通过不准确手段获取到的数据。真实的数据就可以体现出之前评估节点所做的评估的偏差。可以利用这个偏差对系统进行调整。也可以利用这个偏差对评估数据进行校正,以使之后的评估中的数据会更加准确。

在提供产品的性能优化数据之外,还需要在系统中制定多维度的《度量指标》用来帮助之后进行各方面的评估。例如:用户转化率,产品销售率,热点页面等等。这些数据对之后的运维,运营都是有着非常大的帮助。

  • 调优

这个是前期调优,在项目制或者产品制第一次上线之前进行调优。还有后期调优,即产品上线之后根据使用情况对系统进行有针对性的调整。这两类调整都是以性能指标为输入,以达到性能指标要求为输出的。所以,在下面会对其中每一步再做详细讨论。

  • 上线

在调优过程中可能会对系统的局部架构,部署设计,数据库设计等作出调整。所以,在上线时需要需要考虑针对这些变化怎样才能将变化推到生产环境。基本上就考虑三种类型的升级:部署升级,数据升级,服务升级。

  • 部署升级:部署过程进行了升级,比如说之前直接部署在逻辑环境上,现在变成部署在K8S上。
  • 数据升级:数据结构发生了变更,需要有数据结构上的升级工作。
  • 服务升级:服务内部实现发生了变化,需要同时运行老版本,并验证新版本的要求。

实施过程

性能调优和压力测试有很多内容都是可以重复利用的。例如测试时需要编写测试方案,测试计划。都可以在性能调优时使用。下面是性能调优的实施步骤:
具体实施

  • 性能目标

不管做什么,第一步都是要明确需要做什么。性能目标在上面已经可以通过评估,实际数据等获取到性能目标。

  • 环境准备

现在的项目基本上都是用微服务的方式进行发布。所以环境准备阶段需要知道服务的具体部署情况。需要知道哪些开源组件需要部署,哪些服务需要配置。并且还需要设置性能环境和发送性能请求的测试环境之间的部署结构,使性能验证过程中受到的外界干扰最小化。

根据之前的目标对性能环境进行部署设计。在性能环境中的部署设计最终可以推到生产环境,但是需要针对性能指标进行相关的节点数评估,服务器上的硬件环境的评估。

需要根据并发量考虑性能环境和测试环境之间的带宽。以及测试环境的配置,以保证并发量可以达到性能要求的水平。

  • 工具准备

工具准备需要准备压测工具和监控工具。一些压测工具顺带就可以做监控的事情但是很多时候还是要进行独立准备。可以使用JMeter、Load Runner作为压测工具。也可以使用分布式性能测试工具控制多台主机进行测试。

监控工具要满足即可以检测到APM又可以检测到Tracing的内容。并且可以监控多项数据,监控主机性能,监控数据库性能,监控中间件性能等。

  • 测试方法

即需要验证的场景,以及验证这些场景所需要的脚本过程。在测试计划中会编写要测试的场景,并对场景中的请求内容进行设计。

  • 优化确认

已经有了工具,有了测试方法,并且有运行环境。就可以进行测试了,测试会形成测试结果。再针对测试结果有针对性的优化。例如某个方法执行时间过长,就可以想办法降低这个方法的执行时间。数据库查询时间过长就可以优化数据库查询。

在优化完之后,在对优化的内容进行一遍性能验证。如果验证通过则进行下一步。如果没有通过则,在此优化。往复循环这个过程指导性能验证通过,就可以进行进入到下一步。

  • 功能测试

在做完性能调优之后,还是需要再进行一遍功能验证的。因为在优化过程中可能对之前的功能产生了未知的影响。所以需要在性能调优完成之后再进行一遍功能验证。

总结

选用性能指标是非常重要的,这样一眼看过去就知道哪里有问题。在有目标的情况下进行,针对目标进行优化的效率在开发过程中猜测可能有性能问题的点并优化的效率要高的多。在实施这套方法时,也可以享受性能提升带来的成就感。

参考:

如何制定 Java 性能调优标准?

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
8月前
|
消息中间件 缓存 测试技术
企业微信针对百万级组织架构的客户端性能优化实践
本文主要分享的是企业微信在百对百万级大规模组织架构(后文简称大架构)时,是如何对客户端进行性能优化过程的,希望带给你启发。
50 0
|
2月前
|
消息中间件 缓存 API
微服务架构下的API网关性能优化实践
在现代的软件开发中,微服务架构因其灵活性和可扩展性被广泛采用。随着服务的细分与增多,API网关作为微服务架构中的关键组件,承担着请求路由、负载均衡、权限校验等重要职责。然而,随着流量的增长和业务复杂度的提升,API网关很容易成为性能瓶颈。本文将深入探讨API网关在微服务环境中的性能优化策略,包括缓存机制、连接池管理、异步处理等方面的具体实现,旨在为开发者提供实用的性能提升指导。
|
2月前
|
设计模式 缓存 Java
Java新时代:微服务架构下的性能优化实践
【2月更文挑战第12天】 在当今快速发展的软件工程领域,微服务架构因其灵活性和可扩展性而成为主流。随着应用程序变得日益复杂,性能优化成为了开发者不可回避的挑战。本文将探讨在Java环境下,利用微服务架构进行性能优化的策略和实践。我们将从微服务的基本概念出发,深入分析如何通过设计模式、数据库优化、缓存机制以及并发处理等手段,有效提升Java应用的性能。此外,本文还将分享一些实际案例,以帮助读者更好地理解和应用这些优化技术。
|
3月前
|
SQL 缓存 关系型数据库
从架构师角度全局理解Mysql性能优化
从架构师角度全局理解Mysql性能优化
|
3月前
|
Java 调度 开发工具
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
194 0
|
3月前
|
SQL 缓存 关系型数据库
MySQL(终结篇一)- 性能优化(配置及架构)
MySQL(终结篇一)- 性能优化(配置及架构)
607 0
|
4月前
|
Kubernetes Java 数据库
Java性能优化: 什么是微服务架构,与单体架构相比有什么优势?
Java性能优化: 什么是微服务架构,与单体架构相比有什么优势?
58 1
|
7月前
|
负载均衡 安全 微服务
服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性
服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性
60 0
|
8月前
|
缓存 Java 应用服务中间件
搭建高可用系统架构与性能优化
搭建高可用系统架构与性能优化
79 0
|
9月前
|
NoSQL Redis 数据库
Redis性能优化与高可用架构探究
本篇全面探讨了Redis的性能优化与高可用架构,为读者提供了深入了解如何使Redis在高负载环境下实现卓越性能和可靠性的实际操作示例。我们首先介绍了内存优化策略,通过设置最大使用内存和数据淘汰策略,有效地管理内存资源,提高系统性能。接着,详细讨论了数据淘汰机制,以LRU(最近最少使用)策略为例,说明了如何清理不常用的数据,保持系统稳定。
294 0