作者 | 张旭海
性能工程,是指通过设计、构建工具链和工作流,从而对系统性能进行持续改善和守护的一类实践方法 。
本文将从起源开始探寻性能工程出现的必然性 , 进而以软件研发流程中处理性能问题和实施性能优化时所遇到的挑战为出发点,来讨论性能工程的定义以及企业实践性能工程的目标 。
文章插图
性能后置时代落幕
近 30 年的互联网大爆炸,让各类传统业务领域通过数字化迅速在互联网蓝海中占领自己的位置 , 从而实现了业绩高增长和投资高回报 。
大量投资推动了计算机技术的极大发展,也反过来影响了在线业务的企业:只要乘着技术发展的东风 , 就能让单位服务成本越来越低,而速度越来越快 。
无论是通过调研数据还是从业者自身的感受,我们都会发现,性能是在整个研发流程中被不断后置的 。架构设计优先考虑功能,代码研发也是主要关心业务,测试环节除了验证业务正确性,留给性能测试的时间少得可怜,还经常遇到人力不足,那就“先上线再说” 。
然而 , 这种性能后置,甚至无需考虑性能的时代可能即将落幕了 。原因有三:
1. 计算机体系结构发展放缓
文章插图
图源:《计算机体系结构:量化研究方法》
上图展示了处理器性能在近 40 年间的发展趋势 。1986 年开始到 2003 年这段时间,处理器性能每年增加 52%,17 年性能翻了 25 倍 。然而由于登纳德缩放比例定律的终结,单核性能无法再增长 , 导致 2003 年开始性能增长的方向从单核转向了多核,性能增速有所降低,但也依然称得上高增长 。然而,随着摩尔定律的逐渐失效,2015 年开始年均性能增速仅剩 3.5% , 这种速度与先前相比可谓几乎停滞了 。
另外,在单核处理器主流的年代,处理器主要通过指令级并行来提升性能,这对软件开发来说几乎无感 。而多核时代到来后,主要通过数据级并行(例如 SIMD)和线程级并行(多任务)来提升性能,这种优化很依赖代码设计,因此对程序员也提出了更高的要求 。
总之 , 如果不发生大的技术变革,软件性能再也无法简单的通过硬件的更新而大幅增长了,然而随着各种新奇功能的出现,用户对性能提升的需求却丝毫未减 。
2. 复杂系统性能治理愈发困难
与硬件不同,得益于高度灵活的架构,软件一直朝着扩大规模的方向发展 。为了治理不断膨胀的软件规模,软件架构从早年的单体应用逐步发展到 SOA 架构,再到分布式、微服务架构和云原生技术等 。如今的软件系统规模越来越大 , 越来越复杂,只有通过不断的分层和分治才能有效的对其进行控制和演进 。
文章插图
文章插图
图源:Uber 的微服务架构图
然而,正因为对系统架构的拆分,导致服务间的交互早已不再是单个函数的调用 , 而是跨进程调用甚至远程调用 。正如上图所示的Uber 的微服务架构图,复杂的调用链路上任何一个环节都有可能存在性能瓶颈 。系统间依赖的复杂度越高,出现性能阻塞点的概率就越大,如果不加以治理,其结果就是运行低效和难以扩展 。
3. 无法忽视的成本增速
随着在线业务的逐渐饱和,叠加多变的经济形势 , 企业越来越感受到基础设施的巨大成本对经营产生的显著影响 。
文章插图
图源:2023 State of the Cloud Report
据_2023 State of the Cloud Report_显示,云成本管理十年来第一次超过了云安全,成为企业用云的头号挑战 。同时,公有云支出平均超出企业预算 18%,并且云成本仍在逐年增长 。成本的增长驱使人们想尽办法提升资源的利用率和分配效率,这也引领了近些年虚拟化技术和容器化技术的发展趋势 。
但在 CNCF 发布的 _FINOPS FOR KUBE.NETES_ 中显示,即便在容器技术大幅提升资源利用率的情况下 , 仍有 68% 的企业表示在迁移至 K8s 后其计算资源成本反倒增加了 。毕竟,迁移 K8s 给系统引入了新的复杂度,也引入了适配和学习的隐性成本 。
通过对系统进行更深层次的观测 , 发现性能劣化问题和性能阻塞点进而优化性能,能够在提供同样服务水平的前提下降低硬件开销,充分利用硬件算力,并改善用户体验,从而在多个角度降低成本 。因此在如今这样成本敏感的时代 , 性能优化意义非凡 。
推荐阅读
- 零信任不仅仅关乎安全,还是数字化转型的基础
- 很多主流项目都放弃了Java 8,背后的原因是什么
- 微服务是个坏主意吗?
- 为什么在 C++14 中删除了 get 函数?
- 优化Java代码效率和算法设计,提升性能
- 为什么84泡完反而黄了 84泡衣服泡多久最好
- 人工钻石是莫桑钻吗?莫桑钻可以人工合成吗?莫桑钻和钻石的区别是什么?
- 莫桑石是什么?值钱吗?
- 他能演会唱,是关海山徒弟罗嘉良好友,花百万为妻治癌,因爱复婚
- 28岁男星否认出轨!狗仔偷拍导致大乌龙,直指女友是出轨对象