陈显铭(山丘)

读完需要

6分钟

速读仅需 2 分钟

陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构、服务化、性能优化等有深入的理解。参与支付宝支付链路核心系统,设计、调优应用系统关键能力, 高效、稳定保障系统平稳支撑大促。曾历经多年双十一大促,对于性能调优、构建高可用系统有丰富的实战经验。熟悉常见的性能优化模式,比如应用结构优化、链路级、单系统优化等多种优化方式。对于常见的压测模式,如单机压测、链路级压测都有深厚的积累。作为一名性能专家,以追求性能最大化为己任,与之相伴的自然是高技巧、高难度的代码优化。这也是一名性能专家的毕生追求。

本章希望通过对性能优化的模式进行总结,使读者了解常见的性能招式,并能通过这些招式,找到自己系统中的性能瓶颈点,或者当前应用所处的发展阶段及下一步可能演进的模式。

性能是驱动应用结构演进的主要动力之一,本文会通过应用结构的变化揭示性能是如何在不同阶段、以不同的结构驱动应用结构朝着下一个结构演进的。通过应用结构的发展也可以揭示,如何不做过度的设计,在应用尽量简化且不浪费企业资源的情况下支撑企业业务的发展。首先说明性能优化的价值。

1

性能优化的优缺点

对性能进行优化有如下几个优点:

  • 降低业务成本。

  • 提升系统稳定性。

  • 提升用户体验。

性能优化的缺点是可能会使维护成本增加,增加代码、结构及技术栈的复杂度。以上所讲到的性能优化的优缺点如图 17.1 所示。

图 17.1

2

性能优化的两种模式

纵观性能优化案例,性能优化整体上可以分为两类:单应用优化和结构型优化。

  • 单应用优化:关注单系统瓶颈,通过解决单系统瓶颈提升性能。

  • 结构型优化:通过改造链路结构和配比进行整体性能的优化。

3

单应用优化

3.1

优化基本思路

图 17.2

如图 17.2 所示,优化基本思路包含如下几个方面。

  • 确定性能瓶颈/热点。

  • 确定优化方案。

  • 实施优化方案并反馈优化情况。

3.2

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

确定性能瓶颈点/热点的常见方法有如下两种。

  • 性能压测:通过工具、人工等方式量化运行时的性能情况。

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

3.3

压测时通常观察的内容及其所使用的工具

以 Java 环境为例,压测时通常使用 JMeter 及 LoadRunner 发起压力测试并收集压测指标,使用 nmon 来检测 Linux 的性能情况。nmon 是一种在 AIX 与各种 Linux 操作系统上被广泛使用的监控与分析工具。除此之外,压测时通常观察的内容及其所使用的工具如下:

  • 内存的使用情况:MAT、GC 日志、vmstat。

  • I/O 情况:iostat。

  • 网络情况:Netstat。

  • 热点代码:JProfiler、BTrace、JStack、JStat。

  • CPU 情况:Linux top 命令。

3.4

常见的优化手段及模式

常见的优化手段及模式大概有如下几种。

  • 静态化:动态数据和静态数据分离。

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

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

  • 内存优化:减小对象所占空间,减少对象创建的数量,优化数据模型。

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

  • 减少数据库操作:为此,需要减少数据冗余、数据缓存等。

  • 缩短数据库事务:可以考虑使用短事务、异步化、最终一致性等方式。

  • 精简代码逻辑:去除冗余代码,诸如重复判断的代码。

  • 精简日志操作:要关注日志大小,注意 I/O 上的瓶颈。日志太多,说明生成的 String 也会很多,会增加 GC 的负担。

4

结构型优化

此部分介绍的内容在很多网站架构变迁的文章中都会提到,下面通过图示的方式展现出来。每个阶段都有适用的软件架构,出于对建设复杂度、维护成本的考虑,不必强求一开始就建设出很完整的技术体系。个人认为,性能是驱动应用体系演进的重要驱动力,可以通过下面的应用结构演进看出来。单应用时代的常见瓶颈先发生在数据库上。由于所有的业务都存储在一个数据库(DB) 上,因此数据库的读写和性能是可能遇到的第一个问题,如图 17.3 所示。

图 17.3

单应用时代对此问题的第一个常见解决办法是使用缓存(偏向应用级别的缓存)。为了防止所有的数据读写都集中在数据库上进行,首先想到的就是通过缓存减少对数据库的压力,比如将配置数据全部加载到缓存(某些场景可以使用类似 LRU 的缓存)中,如图 17.4 所示。

图 17.4

单应用时代解决此问题的第二个办法是使用独立缓存服务(集中式缓存,如 MemCache),如图 17.5 所示。

图 17.5

单应用集中式部署带来了应用集群处理能力的提升,可以使应用进行水平扩展,如图 17.6 所示。

图 17.6

单应用集中式部署后的数据库瓶颈如图 17.7 所示。

图 17.7

单应用集中式部署后的数据库瓶颈的解决办法是对数据库进行拆分及读写分离,如图 17.8 所示。

图 17.8

为了应对更大范围的请求量,需要进行服务化拆分,由此进入多应用分布式服务化时代,如图 17.9 所示。

图 17.9

随着业务及数据的规模不断扩大,又逐渐进入多应用分布式服务集群化时代,此时依然存在一些问题需要解决,如图 17.10 所示。

图 17.10

5

两个结构优化的案例

5.1

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

通过去分布式调用进行去中心化,可以规避网络设备成为瓶颈和单点故障,如图 17.11 所示。

图 17.11

5.2

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

增加数据处理中间层可以缓解数据库连接池的瓶颈,最好的处理方式是对架构进行服务化和单元化,将数据量大的数据库进行拆分,分散压力,如图 17.12 所示。

图 17.12

6

总结

对于小型企业的业务,通过进行较为简单的单系统优化,并辅助结构性优化,便能满足大部分企业的要求,如图 17.13 所示。但随着企业的业务量不断增加,单独的单机优化已经不能满足需求。分布式部署是中大型企业的必经之路,水平扩展、垂直拆分、服务化等方式是实现分布式部署的方式。

图 17.13

近年来,像阿里巴巴这类的大型一线互联网公司已经不再满足固定模式的水平扩展, 那么当一个机房的容量不足时要如何应对呢?一个城市的机房容量不足时又要如何应对?综合不断增长的业务述求,阿里巴巴这类公司正在实施单元化进程,根据一定的数据分片规则,使特定分片规则下的用户访问到特定单元化的应用系统,并通过不同城市的单元实现流量的自由切换和容灾。技术总是在不断更迭,今天的解决办法是明天的问题,也许单元化也不是最终的解决办法,总会涌现出越来越多的新挑战和应用模式。

- EOF -

想要加入中生代架构群的小伙伴,请添加群合伙人大白的微信

申请备注(姓名+公司+技术方向)才能通过哦!

扩展阅读

   

阿里专家马飞翔:一文读懂架构整洁之道2020-10-16DDD专家张逸:构建领域驱动设计知识体系2020-10-13京东架构师闫文广:订单系统高可用架构及演变过程2020-10-12架构师,是否需要写代码?2020-09-18阿里高级技术专家箫逸:如何画好一张架构图?2020-09-07大神手把手教你设计秒杀架构模型2020-09-06阿里巴巴闲鱼架构负责人王树彬:万亿交易规模技术架构实践2020-09-05阿里高级技术专家张建飞:应用架构分离业务逻辑和技术细节之道2020-08-31波波老师大解密:如何成为优秀的架构师?2020-06-25微信支付软件架构重构之旅2020-06-08一个思维习惯,让你成为架构师2020-06-03阿里P9专家右军:以终为始的架构设计2020-04-27

   END     

#架构师必备#

点分享点点赞点在看

kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势相关推荐

  1. 蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点

    陈显铭(山丘) 读完需要 6 分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高 ...

  2. 蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6 分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高 ...

  3. cnn 一维时序数据_蚂蚁集团智能监控的时序异常检测:基于 CNN 神经网络的异常检测...

    1 背景在蚂蚁集团智能监控领域,时序异常检测是极重要一环,异常检测落地中,业务方参考业界标准输出 Metrics 指标数据,监控不同业务.应用.接口.集群的各项指标,包含 Metrics 指标(总量. ...

  4. 数据库 蚂蚁_蚂蚁集团把夺得世界第一数据库的 OceanBase 独立公司化

    技术编辑:宗恩丨发自 SiFou Office SegmentFault 思否报道丨公众号:SegmentFault 6 月 8 日消息,蚂蚁集团宣布,将自研数据库产品 OceanBase 独立进行公 ...

  5. 模型描述的关系模式_你的项目该用哪种编程模式?

    哎,一个1970年的问题,争论了快50年了,还有那么多引战的. 客观一点讲,对于玩过不少语言.大体上几种模式都上过项目的我来讲,几种编程模式的本质问题都是管理问题. 01 面向过程,本质是" ...

  6. java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...

    说起"飞行模式" 很多朋友们都会说 我又不坐飞机,要它有啥用? 当然有用! 而且用处可多了 不纠结手机辐射问题 很多朋友担心晚上不关机手机会有辐射,但是又觉得关机开机很繁琐,真是很 ...

  7. java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这5个功能

    说起"飞行模式" 很多朋友都会说 我又不坐飞机,要它有啥用 飞行模式最初的用意确实是为了在飞机飞行途中,让手机处于不发射不接受信号状态,这样不会干扰到飞机上面的仪器. 除此之外 飞 ...

  8. shell开启飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能

    说起"飞行模式",很多朋友们都会说,我又不坐飞机,要它有啥用? 当然有用!而且用处可多了~~ 不纠结手机辐射问题 有很多朋友担心晚上不关机睡觉手机会有辐射,但是又觉得关机开机很繁琐 ...

  9. html修改原生checkbox选中的颜色_[三分钟小文]前端性能优化-HTML、CSS、JS部分

    阅读本文您将收获: 性能优化的整体思路 在HTML.CSS.JavaScript层级的性能优化 为什么要进行性能优化 用户: 提升用户体验,改善页面性能 开发者: 体现公司意志和开发人员技能 性能优化 ...

最新文章

  1. Hibernate缓存原理与策略 Hibernate缓存原理:
  2. 如何在NLP中有效利用Deep Transformer?
  3. 为什么中国程序员工作不轻松,加班多?
  4. professional asp.net 4 with c# and VB.net 阅读笔记
  5. cahrt框架 ios_iOS Charts框架集成及使用
  6. jsp中设置自动换行_办公技巧—Word中如何设置自动生成序号
  7. Apache2.2与Tomcat7集成方案详解
  8. 计算机专业能评电子工程师吗,计算机工程师职称 评定条件
  9. 结对-贪吃蛇-最终程序
  10. python windows系统管理_利用Python脚本管理Windows服务
  11. UDP --01--基本开发设计
  12. 【RecSys】推荐系统和计算广告经典算法论文及实现总结
  13. 单门课程成绩管理系统用c语言,[转载]C语言课程设计——学生成绩管理系统
  14. SPSS因子分析经典案例分享
  15. Python检查批量URL是否可以正常访问
  16. 美国如何保护关键信息基础设施
  17. 计算机监控系统举例,计算机监控体系举例.ppt
  18. 34、CSS高频前端面试题之CSS基础
  19. Eclipse - 更换新的工作空间后,怎么把上一个工作空间的配置复制过来
  20. 【银河麒麟V10】【服务器】IO调度算法与性能分析

热门文章

  1. 2022-2028年中国纺织服装专业市场深度调研及前景预测报告(全卷)
  2. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息
  3. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
  4. 程序员必备注释模板---佛祖保佑
  5. OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
  6. javaSE8的流库总结
  7. TVM性能评估分析(三)
  8. MindSpore算子支持类
  9. mybatis常见错误
  10. hook情况下,解决内联没有:hover的方案