摘要
- Mary Shaw 把过程调用称为软件互连的“汇编语言”:它是有用的低层机制,却常被迫手工编码远比调用丰富的系统关系。
- 她的框架严格区分组件、连接器、参与点、角色、协议、配置、架构风格、模块接口与系统级属性。
- “一等连接器”指被明确规定的架构关系,并不等同于微服务、服务网格、API 网关或自动形式化验证。
画两个方框,再在中间连一条线。方框很快会得到名称:解析器、存储、控制器、索引器。那条线却往往没有语法。它是在传输数据流,还是在触发操作?消息能否重排、重放、阻塞或广播?谁发起交换,故障发生后还剩下什么承诺?图形本身没有答案。
这正是 Mary Shaw 在 1994 年 1 月的软件工程研究所报告《Procedure Calls Are the Assembly Language of Software Interconnection: Connectors Deserve First-Class Status》中抓住的问题。软件工程已经擅长描述单元内部的计算与数据,却常把单元之间的关系散落在胶水代码、隐含约定和匿名箭头之中。当编程语言只提供少数原生连接机制,设计者就会用一串过程调用去手工编码其他关系。
“汇编语言”不是贬低过程调用。它强调的是抽象层级。管道、事件系统、客户端—服务器会话与共享表示分别承担不同义务。把它们都压缩成“A 调用 B”,会抹去顺序、交付、同步、绑定以及系统整体行为中最值得审查的信息。
线条没有说明的事
模块接口会列出导出的过程、类型或变量。它对描述一个代码单元很必要,却不一定说明多步交互的完整协议、每个参与方的责任,或组装后的系统要提供什么属性。
以数据流为例。过滤器可以承诺按某种规则消费和产生数据。把它包装成过程,并不会使这段架构关系变成普通调用:缓冲、调度、背压与流结束仍然需要明确责任。如果这些义务只存在于零散的连接代码中,架构里最重要的契约反而没有名字。
事件广播、共享仓库与网络交换同样如此。机制实现连接,却不等于连接的全部含义。Shaw 所说的“一等”,是让一段关系能够被命名、指定、实例化并直接检查,而不是事后从实现中猜出来。
架构层级的八个概念
组件是计算与状态发生的地方。组件对架构暴露的具名参与点称为 player(参与点),它可以是过程、端口或数据流端点。
连接器是组件间关系发生的地方,它调解交互而非承担主要计算。连接器的协议规定允许的交互模式及保证;它的角色说明参与者的职责,例如客户端与服务器、生产者与消费者、发布者与订阅者。
配置是组装后的设计,它把组件的参与点附着到连接器的角色上。这不是行政式“接线”,而是可以检查参与点是否满足角色、协议是否兼容、拓扑是否支持目标行为的位置。
架构风格更为一般。它以可复用方式约束组件类型、连接器类型及其拓扑。管道—过滤器、客户端—服务器、分层和黑板系统是风格,不是某个具体配置。
模块接口描述代码单元暴露什么;系统级属性则由组装和交互产生,例如容量、吞吐、一致性、可靠性与兼容性。端点签名可以通过类型检查,会话仍可能死锁;两个服务都可以实现有效 API,却对重试安全的理解完全不同。此时错误可能不在组件接口,而在连接器协议或参与点—角色的附着关系。
从论点到语言与语义
Shaw 的报告属于 Carnegie Mellon 的一项集体研究计划。David Garlan 与 Mary Shaw 把软件架构界定为关注大规模组织、交互与重复风格的设计层级。他们关于更高层架构语言的研究也说明,模块机制和非正式图示难以充分表达协议、组织与设计备选项。
Robert Allen 与 David Garlan 则把连接器推进到形式语义层面。他们在 1994 年 ICSE 论文《Formalizing Architectural Connection》中,把连接器视为一组围绕角色组织的协议,并以近似类型检查的方式研究兼容性。这是 Allen 与 Garlan 的贡献,不能被笼统吸收到 Shaw 的个人传记里。它的重要意义在于证明:方框之间的线可以拥有足以分析的语义。
UniCon 进一步把这套词汇落到语言中。论文署名为 Mary Shaw、Robert DeLine、Daniel V. Klein、Theodore L. Ross、David M. Young 与 Gregory Zelesnik。UniCon 把组件和连接器作为并列的架构构造:组件有接口与参与点,连接器有协议与角色,配置把两者附着起来;数据流和调度也能与过程调用处在同一设计层级。
UniCon 同时诚实地写出了边界。当时的连接器类型是内置原语,还不能任意定义或组合;某些通用逃生口会削弱工具检查,部分分析依赖外部设施。这恰好说明,显式规范不等于自动证明。它先让自动化能做什么、不能做什么变得可见。
一等连接器不是什么
把历史概念直接翻译成今天的产品类别,反而会降低精度。
微服务是围绕计算、部署和所有权划出的边界,更接近组件。服务网格可以实现传输、身份、遥测和重试;API 网关可以处理入口、路由与策略。它们都可能实现连接器的一部分,却不因此成为连接器的完整定义。业务顺序、幂等性、状态转换和跨服务不变量仍可能位于基础设施之外。
“一等”也不保证形式化验证。精确的连接器规范可能支持兼容性检查、契约测试或外部分析,也可能只是一份严谨、可审查的设计说明。结论有多强,取决于语义、被声明的属性和实际使用的工具。命名契约可以是验证的前提,但不是验证本身。
连接器也不只是中间件。Shaw 的例子横跨语言机制、共享数据表示、远程调用、管道、文档交换和网络协议;实现可以是库、表、缓冲区、进程、系统调用、初始化参数甚至链接器指令。架构身份存在于关系及其义务中,而不固定在某一技术层。
把注意力重新分配给关系
Carnegie Mellon 后来的学科史把这些工作放在一个始于 20 世纪 80 年代末的计划中:软件架构由此逐渐成为系统研究对象。Shaw 自己的研究表述也一直强调,工程进步来自重复设计知识的逐步编码,以及让表示层级匹配问题层级。
因此,1994 年报告最持久的动作是重新分配注意力:不要让方框占有所有名词,而让线只充当标点。给关系一个名字、一份协议和若干角色;说明参与点如何附着;指出哪项系统属性依赖这个组装;同时诚实标注实现和工具真正能保证什么。
许多系统并不是因为某个组件不会计算而失败,而是两个局部合理的组件通过一段从未被明确写下顺序、时序、状态或恢复语义的关系相遇。Shaw 要求设计者把那段关系放回设计桌面中央。
来源
- Mary Shaw,《Procedure Calls Are the Assembly Language of Software Interconnection》
- 1994 年 SEI 报告 PDF
- David Garlan 与 Mary Shaw,《An Introduction to Software Architecture》
- Robert Allen 与 David Garlan,《Formalizing Architectural Connection》
- Shaw、DeLine、Klein、Ross、Young 与 Zelesnik 的 UniCon 论文
- Carnegie Mellon 软件架构发展史
- Mary Shaw 的 Carnegie Mellon 官方简介
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
