蚂蚁金服技术专家对性能优化的常见模式及趋势的思考

简介: 本文中蚂蚁金服技术专家陈显铭将分享关于性能优化的常见模式及趋势的一些技术干货。

发表自《中生代》微信公众号。作者是陈显铭,从事研发工作七年,蚂蚁金服技术专家。对于性能优化的思考,很有价值,分享给大家。



1cad191cec1499d6b86ad0b6c98719825488edc3

从上图可以看出几个优点

  • 成本降低
  • 稳定性提升
  • 用户体验体验提升

性能优化的缺点也有

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


性能优化的两种模式

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

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


单应用优化常见步骤

优化基本思路(闭环)

  •     确定性能瓶颈/热点
  •     确定优化方案
  •     实施、反馈优化情况

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

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

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

  •     压测工具:jmeter
  •     内存的使用情况:mat,gc日志,vmstat
  •     IO情况:iostat
  •     网络情况:netstat
  •     热点代码:jprofile,btrace,jstack,jstat
  •     CPU情况:top

优化的常见手段或模式

  •     静态化:动态数据和静态数据分离。
  •     异步化:使用异步化减少主流程中的非关键业务逻辑。
  •     并行化:使用多线程并发处理,缩短响应时间。
  •     内存优化:减少对象大小,减少对象创造,数据模型优化
  •     去重复运算:业务逻辑优化,或者使用缓存
  •     减少数据库操作:数据冗余,数据缓存等
  •     缩短数据库事务:短事务,异步化,最终一致性等方式可以考虑
  •     精简代码逻辑:去除冗余代码,诸如过度设计检查等代码。
  •     精简日志操作:日志大小要关注,注意IO上的瓶颈;日志太多,说明生成的string也会多,也增加了gc负担

等等

结构型优化常见步骤

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

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

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

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

d9b41efea8be940b761f3e2c5b9afdad0270c82f

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

a28589c829b7d713879539d1d2e118df46e6c8ab

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

6fe669c2f4e636ce569e16961b4de5b1c54b185a

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

ffb82180d13153d0e109a306095d7ac432f07893


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

4c08ae11b70584f1cffa379150c0d97c23fa6242


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

9beb9e83c72cce5c99ca9f36515bfe2850312db0


服务化集群部署模式

78d30b1d8cd9c170d6dd3d1c3dff42bb8f069c4e

6、服务化拆分应对更大范围请求量两个结构优化的案例

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

b0603b3a65b364af1fe00559ca77c2acb1c35fea

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

275dd6acf5907d154ff43ebd69022e890d195059


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

a000440790307fb1396f3a7d3f76f366908128e7



关于作者

59ef457cee0f3fc5ab315629354deef4043c0302

陈显铭,从事研发工作七年,蚂蚁金服技术专家,爱思考



                                                    中生代技术分享群微信公众号

                                               
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
分布式计算 算法 搜索推荐
阿里巴巴内部:2022年全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心技术栈:覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 大数据:Spark、Hadoop
|
4月前
|
分布式计算 算法 搜索推荐
阿里巴巴内部:全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心技术栈:覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 大数据:Spark、Hadoop
|
10月前
|
缓存 前端开发 小程序
钉钉协作Tab前端进化之路【极致性能优化总结】
做业务要为最终结果负责,而前端角色从技术/产品思维到业务思维的一跃有很多天然的瓶颈与鸿沟,技术人应当发挥对业务前瞻性的理解,好的架构设计背后一定是对于业务的高度认知与抽象,过程中要对业务关键指标有正确的理解,而不是简单纯功能的堆砌。
|
11月前
|
弹性计算 Kubernetes Cloud Native
带你读《云原生架构白皮书2022新版》——作业帮原生降本增效实践之路(上)
带你读《云原生架构白皮书2022新版》——作业帮原生降本增效实践之路(上)
|
11月前
|
存储 人工智能 运维
带你读《云原生架构白皮书2022新版》——作业帮原生降本增效实践之路(下)
带你读《云原生架构白皮书2022新版》——作业帮原生降本增效实践之路(下)
104 1
|
11月前
|
运维 Cloud Native 安全
带你读《云原生架构白皮书2022新版》——业务发展视角
带你读《云原生架构白皮书2022新版》——业务发展视角
195 1
|
11月前
|
消息中间件 缓存 容灾
金融系统性能优化之道
系统设计得再好,如不能及时完成业务处理也不行。为什么不同业务有不同优化需求,以及常见的优化方式和问题有哪些。
62 0
|
自然语言处理 运维 监控
阿里云中间件发展历程和开源现状 | 学习笔记
快速学习阿里云中间件发展历程和开源现状
482 0
阿里云中间件发展历程和开源现状 | 学习笔记
|
Cloud Native 数据库
《云原生演进趋势下传统数据库升级实践-v1.3》电子版地址
云原生演进趋势下传统数据库升级实践-v1.3
66 0
《云原生演进趋势下传统数据库升级实践-v1.3》电子版地址
|
架构师 前端开发 流计算
阿里10年沉淀|那些技术实战中的架构设计方法
上周我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问题的方式对了,往往可以帮助大家少走弯路。
阿里10年沉淀|那些技术实战中的架构设计方法