性能优化的常见模式及趋势 | 陈显铭

简介: 本文介绍性能优化的两种模式,单应用优化及结构型优化。以及性能/应用优化的几个趋势。

性能优化的价值


从上图可以看出几个优点

  • 成本降低

  • 稳定性提升

  • 用户体验体验提升

性能优化的缺点也有

  • 维护成本增加:代码可能变复杂,结构可能变复杂,技术栈可能变复杂

性能优化的两种模式

个人总结,性能优化整体上可以分为两类:单应用优化结构型优化

  • 单应用优化,关注单系统瓶颈,通过解决单系统瓶颈提升性能。
  • 结构型优化,通过改造链路结构和配比,进行整体性能的优化。

单应用优化常见步骤

优化基本思路(闭环)

  1. 确定性能瓶颈/热点

  2. 确定优化方案

  3. 实施、反馈优化情况

确定性能瓶颈/热点的常见方法

  1. 性能压测:通过工具/人肉等方式量化运行时性能情况

  2. 业务/代码梳理:通过代码走读,发现资源消耗热点(牛B的人可以这么干);通过统计代码对资源的操作,量化代码对资源的消耗(比如一个业务操作会进行多少次数据库调用,会进行多少次服务运算等方式)

压测时常观察的内容及工具有(举例java应用)

  1. 压测工具:jmeter

  2. 内存的使用情况:mat,gc日志,vmstat

  3. IO情况:iostat

  4. 网络情况:netstat

  5. 热点代码:jprofile,btrace,jstack,jstat

  6. CPU情况:top

优化的常见手段或模式

  1. 静态化:动态数据和静态数据分离。

  2. 异步化:使用异步化减少主流程中的非关键业务逻辑。

  3. 并行化:使用多线程并发处理,缩短响应时间。

  4. 内存优化:减少对象大小,减少对象创造,数据模型优化

  5. 去重复运算:业务逻辑优化,或者使用缓存

  6. 减少数据库操作:数据冗余,数据缓存等

  7. 缩短数据库事务:短事务,异步化,最终一致性等方式可以考虑

  8. 精简代码逻辑:去除冗余代码,诸如过度设计检查等代码。

  9. 精简日志操作:日志大小要关注,注意IO上的瓶颈;日志太多,说明生成的string也会多,也增加了gc负担

  10. 等等

结构型优化常见步骤

此部分介绍的内容,在很多网站架构变迁的文章中介绍过,这里通过图的方式展现出来。

每个阶段都有适用的软件架构,基于成本、建设复杂度、维护成本的考虑,不必强求一开始建设很完整的技术体系。

个人认为,性能是驱动应用体系研究的重要驱动力,可以通过下面应用结构演进看出来。


1、单应用时代常见瓶颈先发生在DB


2、单应用时代常见第一个解法是使用缓存(偏向应用级别缓存)


3、单应用时代常见第一个解法是独立缓存服务(集中式缓存,如memcache)



3、单应用集中式部署带来应用集群处理能力提升


4、单应用集中式部署部署后的DB瓶颈


5、单应用集中式部署部署后的DB瓶颈解法(数据库拆分、读写分离)




6、服务化拆分应对更大范围请求量

服务化集群部署模式




两个结构优化的案例

处理单点/网络瓶颈的可行方式


处理数据库连接池瓶颈的可行手段



总结:性能/应用优化的几个趋势


作者:征途小丘,陈显铭,蚂蚁金服技术专家,分享性能优化的常见模式及趋势

原文链接性能优化的常见模式及趋势

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
网络协议 安全 网络安全
【UDP】——为什么 UDP 数据包不能超过 512 个字节
一开始了解的是 DNS 服务使用的是 UDP 协议,后面看到 DNS 服务主要使用 UDP 协议,在少数情况(传输的数据超过 512 个字节)下也会使用 TCP 协议,因为 UDP 数据包不能超过 512 个字节。那问题来了,为什么 UDP 数据包不能超过 512 个字节呢?
5220 0
【UDP】——为什么 UDP 数据包不能超过 512 个字节
|
Linux
Linux 文件权限详解
Linux 文件权限用于控制文件和目录的访问,分为读、写、执行三种权限,并针对文件所有者、所属组和其他用户分别设置。使用 `ls -l` 查看权限信息,`chmod` 修改权限。符号方式(如 `u+rwx`)和数字方式(如 755)均可设置权限。例如,`chmod +x filename` 添加执行权限给所有用户,`chmod 644 filename` 设置所有者读写、其他用户只读权限。
547 13
|
人工智能 Cloud Native 虚拟化
VMware vSphere 7.0 Update 3v 下载 - 数据中心虚拟化和云原生平台
VMware vSphere 7.0 Update 3v 下载 - 数据中心虚拟化和云原生平台
3142 4
|
Linux 数据安全/隐私保护 开发者
Red Hat下载ISO镜像的方法
简介:本文介绍如何注册或登录Red Hat账号,选择并下载Red Hat Enterprise Linux (RHEL)的免费版本,以及激活订阅的步骤。首先访问Red Hat官网注册或登录账号,然后在开发者页面选择免费下载RHEL,最后通过终端命令激活订阅,确保状态已订阅。订阅为期一年,到期后需重新注册以继续享受支持和权益。
5517 17
Red Hat下载ISO镜像的方法
|
API Python
Blender脚本开发
Blender脚本开发
798 1
|
人工智能 自然语言处理 安全
claude国内怎么用?教你两种claude国内使用方法!
Claude AI 是由 Anthropic 公司开发的一款新一代 AI 助手,旨在成为更安全、更友好、更可靠的 AI 系统。它基于 Anthropic 对 AI 安全性的深入研究,并采用 “Constitutional AI” (宪法式 AI) 的训练方法,使其行为更符合人类价值观,并减少有害输出的可能性。 🛡️
|
Docker Windows 容器
clash代理docker实现镜像拉取
clash代理docker实现镜像拉取
6845 1
|
开发者 Python
软件开发中的 DRY、KISS 和 SOLID 原则
**软件开发中的DRY、KISS和SOLID原则概览** - **DRY (Don't Repeat Yourself)**: 避免代码重复,确保每项知识在系统中有唯一表示,减少冗余,提高可维护性。例如,通过封装重复逻辑到函数或类。
501 0
|
SQL 分布式计算 关系型数据库
Hive与传统关系型数据库有什么区别?请举例说明。
Hive与传统关系型数据库有什么区别?请举例说明。
940 0

热门文章

最新文章