博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能优化的常见模式及趋势 | 陈显铭
阅读量:5863 次
发布时间:2019-06-19

本文共 1174 字,大约阅读时间需要 3 分钟。

性能优化的价值

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

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

原文链接

转载地址:http://jggjx.baihongyu.com/

你可能感兴趣的文章
BZOJ 1912 巡逻(算竞进阶习题)
查看>>
谈谈企业的数据工作!——企业的数据分析能力金字塔
查看>>
js 添加事件 attachEvent 和 addEventListener
查看>>
git基础问题
查看>>
修改MFC主窗口界面标题和图标的方法
查看>>
android 系统重启与关机:java 代码实现
查看>>
html-切换360浏览器的极速模式
查看>>
Js点餐加减数量
查看>>
luoguP2664 树上游戏
查看>>
php不使用copy()函数复制文件的方法
查看>>
bat批处理运用
查看>>
使用android x86进行android应用开发.
查看>>
第二周作业
查看>>
Action获取请求参数的三种方式中的第一种
查看>>
使用SQL访问MongoDB
查看>>
function 与 => 的区别
查看>>
GitHub
查看>>
kali linux常用wifi攻击工具
查看>>
JS字符串数组转换
查看>>
2019年全国统一高考数学试卷理科新课标Ⅲ
查看>>