本文根据高效运维专家群友文章整理并发布。欢迎关注“高效运维”公众号,以抢先赏阅诚意满满的各种原创文章。
作者介绍
陈显铭(蚂蚁金服技术专家,艺名山丘,公众号:loopfork)
专注码砖七年之久,喜欢码砖,喜欢扔锤子(山丘之王出自寒冰王座)。常混迹中生代技术群(公众号:freshmanTechnology)、高效运维(公众号:greatops)等高大上社群。专注高可用、分布式、性能优化、稳定性、高效运维等方向。自我评价:不算出名,但是对于技术有一点点情怀,爱交友,欢迎技术讨论。
性能优化的价值
从上图可以看出几个优点:
性能优化的缺点有: 维护成本增加,代码可能变复杂,结构可能变复杂,技术栈可能变复杂。
性能优化的两种模式
个人总结,性能优化整体上可以分为两类:单应用优化和结构型优化。
单应用优化常见步骤
优化基本思路(闭环):
确定性能瓶颈/热点;
确定优化方案;
实施、反馈优化情况;
确定性能瓶颈/热点的常见方法:
性能压测:通过工具/人肉等方式量化运行时性能情况。
业务/代码梳理:通过代码走读,发现资源消耗热点(牛B的人可以这么干);通过统计代码对资源的操作,量化代码对资源的消耗(比如一个业务操作会进行多少次数据库调用,会进行多少次服务运算等方式)。
压测时常观察的内容及工具有(举例java应用):
压测工具:jmeter;
内存的使用情况:mat,gc日志,vmstat;
IO情况:iostat;
网络情况:netstat;
热点代码:jprofile,btrace,jstack,jstat;
CPU情况:top;
优化的常见手段或模式:
静态化:动态数据和静态数据分离。
异步化:使用异步化减少主流程中的非关键业务逻辑。
并行化:使用多线程并发处理,缩短响应时间。
内存优化:减少对象大小,减少对象创造,数据模型优化。
去重复运算:业务逻辑优化,或者使用缓存。
减少数据库操作:数据冗余,数据缓存等。
缩短数据库事务:短事务,异步化,最终一致性等方式可以考虑。
精简代码逻辑:去除冗余代码,诸如过度设计检查等代码。
精简日志操作:日志大小要关注,注意IO上的瓶颈;日志太多,说明生成的string也会多,也增加了gc负担。 等等。
结构型优化常见步骤
此部分介绍的内容,在很多网站架构变迁的文章中介绍过,这里通过图的方式展现出来。
每个阶段都有适用的软件架构,基于成本、建设复杂度、维护成本的考虑,不必强求一开始建设很完整的技术体系。
个人认为,性能是驱动应用体系研究的重要驱动力,可以通过下面应用结构演进看出来。
1.单应用时代常见瓶颈先发生在DB。
2.单应用时代常见第一个解法是使用缓存(偏向应用级别缓存)。
3.单应用时代常见第一个解法是独立缓存服务(集中式缓存,如memcache)。
4.单应用集中式部署带来应用集群处理能力提升。
5.单应用集中式部署部署后的DB瓶颈。
6.单应用集中式部署部署后的DB瓶颈解法(数据库拆分、读写分离)。
7.服务化拆分应对更大范围请求量。
8.服务化集群部署模式。
两个结构优化的案例
总结:性能/应用优化的几个趋势
运维如何不再苦逼?
来GOPS2016全球运维大会深圳站看看,您就了然于心了。超豪华阵容!四大运维体系在引爆上海之后,携手20多位顶级运维专家,和您相聚深圳,共同期待和规划运维之春。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|