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

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

性能优化的价值

640?wx_fmt=png&wxfrom=5&wx_lazy=1
从上图可以看出几个优点

  • 成本降低

  • 稳定性提升

  • 用户体验体验提升

性能优化的缺点也有

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

性能优化的两种模式

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

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

单应用优化常见步骤

优化基本思路(闭环)

  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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1


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

640?wx_fmt=png&wxfrom=5&wx_lazy=1


4、单应用集中式部署部署后的DB瓶颈640?wx_fmt=png&wxfrom=5&wx_lazy=1


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

640?wx_fmt=png&wxfrom=5&wx_lazy=1



6、服务化拆分应对更大范围请求量640?wx_fmt=png&wxfrom=5&wx_lazy=1

服务化集群部署模式

640?wx_fmt=png&wxfrom=5&wx_lazy=1



两个结构优化的案例

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1


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

640?wx_fmt=png&wxfrom=5&wx_lazy=1


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

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
消息中间件 缓存 NoSQL
如何做性能优化?
如何做性能优化?
|
27天前
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
54 0
|
25天前
|
缓存 测试技术 Android开发
构建高效Android应用:从性能优化到用户体验
在移动开发领域,创建一个流畅的Android应用并非易事。本文将深入探讨如何通过性能优化和提升用户界面(UI)设计,以增强整体应用性能和用户体验。我们将讨论内存管理、多线程处理、网络请求优化以及Material Design的应用,这些策略和技术的综合运用能够显著提高应用的响应速度和用户满意度。
|
8月前
|
缓存 算法 大数据
倚天710规模化应用 - 性能优化 - 软件预取分析与优化实践
软件预取技术是编程者结合数据结构和算法知识,将访问内存的指令提前插入到程序,以此获得内存访取的最佳性能。然而,为了获取性能收益,预取数据与load加载数据,比依据指令时延调用减小cachemiss的收益更大。
|
8月前
|
数据采集 算法 编译器
倚天710规模化应用 - 性能优化 -自动反馈优化分析与实践
编译器优化分成静态优化与动态优化,静态优化指传统编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预准确率
|
9月前
|
存储 缓存 NoSQL
性能优化方案及思考
周末闲暇在家,朋友让我帮忙优化一个接口,这个接口之前每次加载都需要40s左右,经过优化将性能提了10倍左右;又加了缓存直接接口响应目前为300ms左右,于是将自己的优化思路整理总结一下
|
9月前
|
存储 缓存 JavaScript
我工作中用到的性能优化全面指南(1)
在Web开发中,Web的性能优化是一个重要的话题。无论是页面加载速度,用户体验,或者是程序运行效率,都与Web的性能优化息息相关。 最小化和压缩代码 在构建过程中,为了减少文件的大小和加载时间,通常会对JavaScript代码进行最小化和压缩处理。这包括移除不必要的空格、换行、注释,以及缩短变量和函数名。工具如UglifyJS和Terser等可以帮助我们完成这个任务。
47 0
|
9月前
|
Web App开发 存储 缓存
我工作中用到的性能优化全面指南(2)
使用WebGL进行3D渲染 WebGL是一种用于进行3D渲染的Web标准,它提供了底层的图形API,并且能够利用GPU进行加速,非常适合于进行复杂的3D渲染。
63 0
|
缓存 前端开发 JavaScript
前端性能中重要概念之性能优化方案
前端性能优化方案 在现代Web应用中,前端性能是非常重要的一环。在开发过程中,开发者需要寻找和实施各种前端性能优化方案,以提升应用的性能和用户体验。下面介绍一些常用的前端性能优化方案:
118 0
|
运维 监控 网络协议
如何利用性能优化驱动用户体验提升|学习笔记
快速学习如何利用性能优化驱动用户体验提升。
234 0
如何利用性能优化驱动用户体验提升|学习笔记

热门文章

最新文章