2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

所有有趣的问题都是扩展性方面的问题

  • 2012-05-02
  • 本文字数:1537 字

    阅读完需:约 5 分钟

John Sloan Digital Aggregates Corporation 公司的技术咨询师,他关注超大型和超小型系统,包括分布式,实时、高性能、嵌入式、高度并行系统等多方面。他有一个名为 Chip Overclock 的博客,最近发布了一篇文章——《所有有趣的问题都是扩展性方面的问题》。

John 之前曾在美国国家大气研究中心工作,2006 年时,他绘制了一个图表:

这个图表的横轴是以年为单位的时间,纵轴是技术随时间演变的对数值。John 在 1997 年做了相关的数据挖掘,下面是他的一些假定:

微处理器速度每 2 年翻一倍。

内存密度每 1.5 年翻一倍。

总线速度每 10 年翻一倍。

总线带宽每 5 年翻一倍。

网络连接速度每 1 年翻一倍。

网络带宽每 10 年增加 10 倍。

第二存储密度每 10 年增加 10 倍。

每个微处理器上的 CPU 核每 1.5 年翻一倍。

虽然有些数据已经不再准确了,但是 John 的基本理念没有变:

所有的技术都在变,但是速率不同。这意味着:你之前基于掌握的技术做出了一些技术决策,但是这些决策对于你目前掌握的技术来说可能已经不再正确了。

……

我的经验告诉我:所有有趣的问题都是扩展性方面的问题。这张图展示出了可扩展性的时间因素。

2006 年,John 还展示了一张饼图,列出了软件开发生命周期中的各项成本占比。其中,维护成本占到 67%。也就是说,即使你能消除掉所有初期开发和测试的成本,软件生命周期的成本也只能缩减三分之一。John 还听说:有些要支持上百万行代码的组织认为,67% 还是太低了,有些甚至能达到 80%。

John 提到:

Les Hatton 发现:软件维护可以大概分为三类——修正(修复出问题的代码)、完善(改进某些没有问题的代码,比如提升性能或是降低维护成本)、适应。最后这一类将上述两个图结合在一起。适应性维护是说:因为你不能控制的某些东西发生改变,你必须要改变你的代码。

John 的嵌入式领域工作经验告诉他:他常常碰到适应性维护情况。因为某些厂商常常不再生产某些关键硬件组件,而且没有兼容的可替代品。

而他在企业级服务器端的开发经验也有同样情况。

大量的软件基于商业或开源框架和程序库。你会想要升级到最新版本,因为要修复关键的 bug,或者更新全新特性,因为这会影响你的最终交付时间,可最后却发现:你如此依赖的软件做出了“改进”,提供者调整了它的编程接口!这样的事情就会让产品经理急得像热锅上的蚂蚁。

John 认为,要应对这样的事情,可以从 Arduino 和其 8 位 Atmel megaAVR 微控制器学习。他对比了自己使用的 Mac Mini 和 Freetronics EtherMega 单板,指出:

当我在为 EtherMega 单板编写代码时,我之前编写桌面或者服务器平台的经验,包括如何在时间和空间之间权衡等等,都可以抛出窗外了。举个例子,根据应用情况,如果需要某个值,每次都重新计算可能更好,而不是计算一次然后存储起来,因为在 EtherMega 上,存储字节要远比 CPU 处理周期更为重要。

John 接下来提到:

为嵌入式系统开发软件和为高性能计算或大型分布式平台开发软件,二者需要的技能在很大称度上相同,我不是第一个发现这一点的人。

……

在高性能计算(之前成为超级计算)领域中有个趋势:“重新计算”,而不是“计算然后存储”或者“计算然后传输”。因为纯计算能力的增长要远远超过内存或通讯带宽的增长。为这些微控制器小不点编程,与为大型超级计算机编程,二者之间的相似之处比我们想象的多得多。

给微控制器小不点编写软件,这迫使你严肃对待资源限制,要先考虑时间和空间的权衡,要思考如何向上扩展,更要认真思考如何向下扩展。

最后,John 号召大家都尝试下嵌入式开发:

在我的 Amigo 项目中使用像 Arduino 和 FreeRTOS 这样的技术,让我成为了一个更优秀、更聪明、更能深入思考的软件开发者。我相信你也同样可以从中受益,不管你的问题所在领域及其规模如何。

InfoQ 的读者们,您在自己的项目中是否遇到了类似的问题呢?

2012-05-02 00:212975
用户头像

发布了 479 篇内容, 共 180.1 次阅读, 收获喜欢 53 次。

关注

评论

发布
暂无评论
发现更多内容

火山引擎 DataLeap下Notebook系列文章一:技术选型之路

字节跳动数据平台

notebook 数据研发 企业号 4 月 PK 榜

GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽

Java你猿哥

架构 分布式 分布式架构

安装Zookeeper和Kafka集群

Java你猿哥

Java kafka zookeeper SSM框架 Java工程师

Kurator v0.3.0版本发布!助力企业实现多云异构管理

华为云开发者联盟

开源 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

挑战 30 天学完 Python:Day9 条件语句

MegaQi

Python 挑战30天学完Python 三周年连更

阅读完synchronized和ReentrantLock的源码后,竟发现其完全相似

Java你猿哥

并发编程 并发 synchronized SSM框架 ReentrantLock

【堡垒机小知识】堡垒机能记录操作时间、操作数据等等吗?

行云管家

网络安全 堡垒机

从源码角度深入解析Callable接口

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

字节面试官:你没有高并发、性能调优经验,为什么录取你?

Java 高并发 性能调优

火山引擎DataTester:让企业“无代码”也能用起来的A/B实验平台

字节跳动数据平台

AB testing实战 无代码 A/B 测试 企业号 4 月 PK 榜 企业增长

BT!GitHub开源阿里Java性能调优百宝书仅3小时,标星竟超过30k

Java你猿哥

Java JVM 性能调优 SSM框架 Java工程师

ChatGPT无需API开发连接第三方系统,让舆情自动监控

集简云开放平台

数据集成 数据集成平台 Chat

全量通过,华为云GaussDB首批完成信通院全密态数据库评测

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

如何用scrum敏捷工具做迭代规划及迭代执行。

顿顿顿

Scrum Sprint 敏捷开发管理工具 敏捷工具 迭代规划

Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)

共饮一杯无

Java 线程 线程状态 三周年连更

热榜!Alibaba最新发布「10亿级并发系统设计文档」Git狂揽9000星

Java你猿哥

数据库 架构 分布式 架构设计 并发系统

Gradio:快速构建你的webApp

AIWeker

Python 三周年连更 Gradio

集简云开放平台是什么?

集简云开放平台

前端沙箱利用这些特性实现代码的隔离与限制

没有用户名丶

Scrum敏捷研发和项目管理

顿顿顿

Scrum 敏捷开发 敏捷开发流程 leangoo 敏捷开发管理工具

从零学习SDK(7)如何打包SDK

MobTech袤博科技

Linux:管道命令与文本处理三剑客(grep、sed、awk)

会踢球的程序源

Java Linux

硬核!万字神文精解高并发高可用系统实战,分布式系统一致性文档

Java 高可用 高并发 分布式一致性

阿里大神整理的Java核心知识点和面试官常问到的知识点,压压惊

会踢球的程序源

Java 面试 求职 java面试 Java构架

行云管家堡垒机有免费的吗?谁能告诉一下!

行云管家

高新企业 堡垒机 行云管家

GitHub和 Gitee联合编写最新版20w字Java全栈面试手册,简直无敌!

Java你猿哥

Java java面试 SSM框架 Java面经

阅读完synchronized和ReentrantLock的源码后,我竟发现其完全相似

Java 源码 synchronized ReentrantLock

带你一同认识和使用JPA框架进行开发你的应用服务

Java你猿哥

Java SSM框架 jpa Java工程师

华为云新一代iPaaS全域融合集成平台全新升级

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0 (Ⅲ)

字节跳动数据平台

数据仓库 云原生 白皮书 数据仓库服务 企业号 4 月 PK 榜

女朋友要我讲解@Controller注解的原理,真是难为我了

Java你猿哥

Java spring Spring 配置解析

所有有趣的问题都是扩展性方面的问题_架构_郑柯_InfoQ精选文章