【性能优化】聊聊性能优化那些事

针对于互联网应用来说,性能优化其实就是一直需要做的事情,因为系统响应慢,是非常影响用户的体验,可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求,需要对所负责的系统进行性能提升。目前接口耗时基本在30S左右,争取可以提升到16S内。所以就先了解以下相关的性能优化,其实我理解性能优化,一个是在预防,一个是出现问题后进行解决。二前期主要在架构设计与编码层面,后期是如何找到性能瓶颈进行有效的优化。

衡量性能优化

QPS:通常指代的是查询操作
TPS :指代的是写操作
响应时间 :系统请求之后返回来的时间
吞吐量

架构设计

缓存、异步、集群 是性能优化的三板斧。缓存从一定程度上可以提升系统的读性能。异步可以提升系统写性能,而集群可以提升系统整体的吞吐量。

缓存:传统意义上的缓存,可以从客户端缓存->CDN缓存->网关缓存->负载均衡缓存->应用程序缓存->分布式缓存->数据库缓存->文件缓存->CPU缓存等进行一路拦截,通过将请求拦截在越前面,越能提升系统的整体读性能。
在这里插入图片描述

异步:异步主要是通过进行将穿行执行的过程,进行异步执行。然后通过回调结果就可以。比如JUC中的工具类,Go中的协程。消息队列等。
在这里插入图片描述
除了以上的架构层面,其实还需要在编码层面进行优化,比如使用并发编程、线程池复用、异步编程、更高效的算法等。
所以总结起来就是如下几点

  • 网络层面优化
  • 服务器硬件层面优化
  • 操作系统优化
  • JVM性能优化
  • 基础组建优化(MySQL、Kafka、Redis等)
  • 软件架构层面优化
  • 软件代码优化

如何进行性能优化

性能优化六大原则

在这里插入图片描述
在性能优化的时候,其实要先找到性能最大的瓶颈,是存储、计算、网络问题。然后根据数据分析进优化,而不应该两手一把抓。而大多数的时候,都是程序和数据库层面的问题,这个时候我们需要使用计时工具进行先记录各个流程的耗时,然后根据不同的耗时进行优化。
找到根本原因,然后进行平衡成本与工作投入比。任何的优化方案都可能是trade-off。所以我们需要平衡。根据不同性能指标权衡,找到一个最优解达到总体和整体最优。

而在性能优化的过程中,我们不能过度优化,比如一个系统只有几个人使用,而过去去优化,显然成本与收益不平衡。
在这里插入图片描述
所以,我们不能过早的优化,优化的时间点,一般都是在一个产品比较成熟的时候,为了进一步提升整体的性能而做的优化。

在这里插入图片描述

性能优化十大策略

在这里插入图片描述

时空转换

空间换时间
空间换时间的本质是,通过将空间增加存储,来提升时间。
对于一个全球业务,可以采用CDN进行多分数据的拷贝,覆盖每个地方的用户。
集群也是通过多台服务器的空间减少延迟的减少。

时间换空间
时间换空间的本质是通过,增加时间减少空间的存储,对于系统来说,CPU、内存是比较稀缺的空间资源。

  • 可以通过改变数据结构或者数据格式,减少存储数据的大小
  • 进行数据压缩。采用压缩算法。可以降低网络传输和外部存储。
  • 内存数据存储到磁盘中

而衡量一个压缩算法主要就是三个指标,压缩比例、压缩速度、使用内存。
案例:Kafka采用压缩算法进行压缩数据。生产者压缩,消费者解压缩。RPC通过自定义数据结构,减少调用方和被调用方的网络传输。

预先和延后处理

预先处理
预先处理,其实就是将数据或者三方调用进行提前调用。比如操作系统中文件、CPU和内存都会进行局部性原理数据读取,提前加载顺俗读取的数据,以及提升执行速度。

延后处理
延后处理,一般是在非要的时候才进行计算,操作。COW就是这个案例,当多个线程操作同一份共享数据的时候,如果只是读,那么可以直接操作,但是当有线程进行写的时候,就复制一份进行专门写,而不会影响别的线程进行读取。
在linux中,fork一个子进程就是写的时候会进行复制,还有java CopyOnWrite中也是如此。

并行/异步操作

并行
并行是通过一个任务处理慢,可以多个任务同时执行,以此来提升速度。可以在服务器、多线程、指令级别进行操作。比如JUC、Go中协程等。
异步
异步是相对于同步来说,异步可以不用等待结果的返回阻塞在哪里,比如IO多路复用就是通过异步操作,虽然增加来一点操作复杂度,但是性能提升非常明显。

缓存/批量合并

缓存
缓存其实是无处不在,CPU、内存、文件系统、存储系统、内容分发、数据库、框架、中间件等。本质是通过存储数据提升访问速度。

批量合并处理
其实主要是针对IO和网络IO的时候,将一批数据进行读写,可以提升吞吐量、提升性能。
比如Kafka中就是为了减少网络传输,一次发送一批的数据到Broker中。
MySQL也建议通过尽量合并读写。比较顺序的IO读写 速度更快。

算法和数据结构

算法
算法本质是为了解决不同的场景下的问题,可以通过利用不同算法提升性能。比如LRU可以数据淘汰算法、排序算法解决排序问题。
数据结构
而不同的结构,也有不同的适用场景,Set、List、Map等。去重、有序、key、value

在这里插入图片描述

小结

本篇主要从预防性能的架构设计和编码层面去聊性能优化,以及当出现性能瓶颈后,应该采用三要三不要,以及对应的十大优化策略进行优化。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【脑机接口】通过任务判别成分分析提高单独校准的 SSVEPBCI 的性能

题目:Improving the Performance of Individually Calibrated SSVEP-BCI by Task Discriminant Component Analysis **1. 摘要****2. 方法***A.任务相关成分分析**B.任务判别成分分析**C.评估* **- 结果****- 结论** 1. 摘要 脑机接口(BCI)为…

EXPLAIN概述与字段剖析

6. 分析查询语句:EXPLAIN(重点) 6.1 概述 定位了查询慢的sQL之后,我们就可以使用EXPLAIN或DESCRIBE 工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句…

Centos 7 通过Docker部署OnlyOffice

前言: 在本文中,我们将详细介绍如何使用 Docker 部署功能强大的协作办公套件 OnlyOffice。通过 Docker,您可以轻松构建、部署和管理 OnlyOffice,从而提高团队协作和企业办公的效率。 一、安装Docker 1、向系统添加Docker CE软件仓…

51单片机DHT11温湿度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机DHT11温湿度控制系统仿真设计 1.主要功能:2.仿真3. 程序代码4. 原理图元器件清单5. 设计报告6. 设计资料内容清单&下载链接 51单片机DHT11温湿度控制系统仿真设计( proteus仿真程序原理图报告讲解视频) 仿真图proteus8.9及以上 程序编译器&…

通过cpolar内网穿透,在家实现便捷的SSH远程连接公司内网服务器教程

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

中国手机新进程:折叠屏出海的荣耀,5G中回归的华为

最近,“华为5G回归”“自研麒麟芯片回归”的消息引爆网络。网友开心庆贺之余,也纷纷猜测,华为强势归来,哪家友商最慌? “华为的回归,让竞争充满了更多的可能性和更多的魅力”,与华为渊源颇深的…

mac常见问题(五) Mac 无法开机

在mac的使用过程中难免会碰到这样或者那样的问题,本期为您带来Mac 无法开机怎么进行操作。 1、按下 Mac 上的电源按钮。每台 Mac 电脑都有一个电源按钮,通常标有电源符号 。然后检查有没有通电迹象,例如: 发声,例如由风…

算法:合并两个有序数组---双指针[1]

1、题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&a…

MAC系统“无法验证开发者”问题

参考:https://blog.csdn.net/suxiang198/article/details/126550955 对于使用MAC电脑的同学而言,许多时候因为使用需要,从第三方源(比如github等)下载工具或软件,而在运行时会受到MAC系统的安全限制,老是弹…

【数据结构篇】线性表1 --- 顺序表、链表 (万字详解!!)

前言:这篇博客我们重点讲 线性表中的顺序表、链表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是…

Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 xlwings模块详解 1、快速入门1、打开Excel2、创建工作簿2.1、使用工作簿2.2、操作…

修复中间件log4j漏洞方案(直接更换漏洞jar包)

说明: 后台服务里面的log4j漏洞我们已经全部升级处理了,但是一些中间件镜像包里的log4j漏洞需要单独处理 解决办法以ElasticSearch7.6.2为例: 方法: (1)找到容器里面有哪些旧的log4j依赖包 (…

css网格布局

css网格布局 常用属性 display: grid; //开启网格grid-template-columns: 2fr 1fr 1fr 1fr 1fr; //设置多少列每列宽度grid-gap: 10px; // 设置表格之间间距grid-template-rows: 50px 50px 50px 50px; // 设置多少行 每行的高度grid-column : 1 //占据位置 占据1格grid-colu…

【LeetCode-中等题】207. 课程表

文章目录 题目方法一:bfs广度优先 有向图的拓扑排序(入度)方法二:dfs 深度优先搜索 题目 此题就可以转换为,求一个有向图是否存在环; 存在环,拓扑排序得出的结果是不完整的, 如果不…

数据结构与算法-插入希尔归并

一:排序引入 我们通常从哪几个方面来分析一个排序算法? 1.时间效率:决定了算法运行多久,O(1) 2.空间复杂度: 3.比较次数&交换次数:排序肯定会牵涉到两个操作,一个比较是肯定的。…

Java elasticsearch scroll模板实现

一、scroll说明和使用场景 scroll的使用场景:大数据量的检索和操作 scroll顾名思义,就是游标的意思,核心的应用场景就是遍历 elasticsearch中的数据; 通常我们遍历数据采用的是分页,elastcisearch还支持from size的方…

mybatis-generator-maven-plugin使用

前提说明 数据库&#xff1a;MYSQL57Mybatis : http://mybatis.org/generator/index.html 操作说明 引入插件 <plugins><!-- MyBatis 逆向工程 插件 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generat…

汽车电子系统网络安全解决方案

声明 本文是学习GB-T 38628-2020 信息安全技术 汽车电子系统网络安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 汽车电子系统网络安全范围 本标准给出了汽车电子系统网络安全活动框架&#xff0c;以及在此框架下的汽车电子系统网络安全活动…

E5061B/是德科技keysight E5061B网络分析仪

181/2461/8938产品概述 是德科技E5061B(安捷伦)网络分析仪在从5 Hz到3 GHz的宽频率范围内提供通用的高性能网络分析。E5061B提供ENA系列常见的出色RF性能&#xff0c;还提供全面的LF(低频)网络测量能力&#xff1b;包括内置1 Mohm输入的增益相位测试端口。E5061B从低频到高频的…

Xcode打包ipa文件,查看app包内文件

1、Xcode发布ipa文件前&#xff0c;在info中打开如下两个选项&#xff0c;即可在手机上查看app包名文件夹下的文件及数据。