前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【性能优化方法论系列】二、性能优化方法论的思想源泉

【性能优化方法论系列】二、性能优化方法论的思想源泉

作者头像
明明如月学长
发布2022-07-12 16:28:46
2850
发布2022-07-12 16:28:46
举报

本小节介绍自己对性能优化方法论的思想来源。

1 核心思想

1.1 开源和节流

既然,性能问题是“良好的用户体验和有限的资源之间的矛盾” 导致的。

那么,我们如何解决这个矛盾呢?换句话说,资源不足怎么办

我们可以将问题进行转化,换个问法:“如果你这个月钱不够花怎么办”

可能很多人会说:想办法多挣点,比如多加点班(如果有加班费的话)、多干一些兼职、可以向朋友借点,可以省着点花。

这些方法的背后闪烁着两个重要思想:“开源和节流”!!

在这里插入图片描述
在这里插入图片描述

开源,即投入更多的资源。如增加更多服务器、提高服务器的配置,投入更多的开发人员等。

节流,即提高资源利用率,减少资源浪费。如采用时间复杂度更低的算法,通过压缩来降低存储和传输的数据量等。

1.2 堆“硬件”、升“软件”

从宏观上讲,计算机是由硬件和软件组成的。

那么,如何让一个计算机性能更好呢?

一般来说,需要:堆硬件、升软件。如提高硬件配置,对软件进行优化。

其实性能优化的主要方法也来源于此,性能优化的宏观思路就是 “堆硬件,升软件”。

这里的硬件指机器的数量和机器的配置等;软件包括优化算法、架构等。

本质上和开源节流的思想是一致的。

1.3 权衡 (trade-off)

大家找工作很难找到“钱多、事少、离家近”的工作。然而现实情况是,通常只能得其中一二。

在这里插入图片描述
在这里插入图片描述

性能优化很多时候也是一种权衡,在性能优化的路上,通常要做:用户体验和成本的权衡投入产出比的权衡

在这里插入图片描述
在这里插入图片描述

很多团队在产品研发初期人力资源有限,加上快速上线的压力,一般看重满足功能要求,只要不出现难以接受的性能问题即可。此外,项目也有优先级,可能另外一个项目优先级非常高,性能优化的事情可能就暂时延后。不管是通过“堆硬件” 还是通过“升软件” 的方式进行性能优化,都会面临着低延时和高成本的矛盾。

然而一般来说,用户体验和成本成反比,架构师或者开发人员要做的是,根据产品发展阶段和资源的情况去考虑性能优化的问题。

不管是从产品的发展阶段,还是团队内项目的优先级,还是技术角度上性能优化的投入和产出比来说,性能优化都不是简单地追求“最优化”,而是需要结合实际情况寻找优化的平衡点。

2 具体来源

前面讲到性能优化的核心思路是:开源和节流,堆硬件和升软件,对很多人来说太宏观。

那么如何寻找靠谱的具体的性能优化方法呢

2.1 经典论断

一些计算机科学、软件工程的一些经典论断,如 David Wheeler 的经典论断:

"“All problems in computer science can be solved by another level of indirection” (the fundamental theorem of software engineering)

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决 (软件工程的基础理论)

在这里插入图片描述
在这里插入图片描述

如在数据库和用户访问之间增加缓存层,可以极大加快访问速度;在写操作和磁盘中间增加内存缓冲区这个中间层,极大提高了 IO 的性能;再比如在应用程序和数据库之间,增加分库分表中间件作为中间层,突破了单库限制,提高了读写性能。如下图所示,在应用服务层和数据访问层中间增加领域层,可以更好地表达业务,更好地封装变化,实现更好高内聚、弱耦合的目标。

在这里插入图片描述
在这里插入图片描述

2.2 百花齐放

此外,专业基础是性能优化灵感的重要来源,如 CPU 的多级缓存思想、文件缓冲区的思想、进程调度算法等。

不同的数据结构都有自己的特点,都是为了解决某一类问题,适合某些场景,有其优缺点。选择合适的数据结构也可以实现性能优化。

不同的算法的时间和空间复杂度也各不相同,选择性能更优的算法也可以提高性能。

在这里插入图片描述
在这里插入图片描述

很多架构就是为了性能优化而设计的,如读写分离、分库分表、分布式架构;

很多中间件的设计中体现出诸多性能优化的思想,如 ES 的倒排索引、索引刷盘机制;

JDK 源码和很多优秀的开源项目也包含着很多性能优化的典型实践,如内存缓存、分段加锁、写时复制等。


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 核心思想
    • 1.1 开源和节流
      • 1.2 堆“硬件”、升“软件”
        • 1.3 权衡 (trade-off)
        • 2 具体来源
          • 2.1 经典论断
            • 2.2 百花齐放
            相关产品与服务
            消息队列 TDMQ
            消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档