《后端架构设计·架构基础与边界》附录 A 术语表

卷一术语表:按领域建模、架构风格、数据一致性、接口通信、运行可用性、组织治理六组收录常用词,给出英文、本书用法和常见混淆;单列十组最容易混用的概念、五个容易过时的定义、常见缩写与章节对照,并在写作 ADR、接口文档和评审记录时提供统一口径,方便阅读时快速定位。

怎么用这份术语表

这份表不追求词典式的完整定义,只回答三个问题:

  1. 这个词在本书里指什么;
  2. 它最容易和哪个词混;
  3. 第一次系统展开在哪一章。

同一个词在不同团队可能有不同含义。本书的选择是:第一次出现时给英文和用法,之后保持一致;如果某个团队的习惯与本表不同,以团队内部约定为准,但要在 ADR 或接口文档里写清楚。

术语按主题分组,不按拼音排序。想查某个词,用页面搜索比从头翻更快。

一、领域建模

中文英文本书用法常见混淆
子域Subdomain业务问题空间的一块划分,按业务能力而非代码分层不等于微服务,也不等于团队
核心域Core Domain形成业务差异化、最值得投入自研的部分不等于“最重要的技术模块”
支撑域Supporting Subdomain必要但不差异化的业务能力,可自研也可采购容易被误当成核心域过度设计
通用域Generic Subdomain身份、通知、计费等通用能力,优先用成熟方案不等于“不重要的域”
限界上下文Bounded Context一个模型保持一致的边界,通常对应一个模块或服务不等于子域;一个子域可有多个上下文
上下文映射Context Map上下文之间的合作关系与集成方式不是组织架构图
聚合Aggregate一组必须保持一致的对象,作为事务和并发的最小单位不等于数据库表,也不等于模块
聚合根Aggregate Root聚合对外唯一入口,外部只能持有它的引用不是“主表主键”的同义词
实体Entity有身份、生命周期内身份不变的对象与值对象的区别在身份,不在有没有字段
值对象Value Object由属性值定义、不可变的对象不是“没有 ID 的实体”这么简单
不变式Invariant聚合在任何合法状态下都必须成立的规则不等于数据库约束;有些只能在领域层保证
领域事件Domain Event表达“领域里已经发生的事”,用过去式命名不等于消息队列里的所有消息
领域服务Domain Service不属于单个实体、但属于领域逻辑的操作容易退化成“什么都能放的 service 层”
仓储Repository以聚合为单位提供持久化访问的抽象不是 DAO;不应暴露查询构造器
事件风暴Event Storming用命令、事件、聚合、策略快速探索业务边界的 workshop不是画流程图,也不是需求评审会
防腐层Anti-Corruption Layer隔离外部模型、翻译为内部模型的适配层不是简单的 DTO 转换
共享内核Shared Kernel两个上下文共同维护的一小部分模型很容易变成隐式耦合,需明确 owner
客户-供应商Customer-Supplier下游依赖上游、但上游需考虑下游需求的合作关系与“遵奉者”的区别在话语权
遵奉者Conformist下游直接采用上游模型,不做翻译适合上游模型稳定且下游无议价权时
开放主机服务Open Host Service上游提供稳定协议供多个下游使用常与“发布语言”一起出现
发布语言Published Language上下文集成时共享的、有文档的模型语言不等于内部领域模型

二、架构风格与边界

中文英文本书用法常见混淆
单体Monolith一个部署单元、一个进程的应用不等于“坏架构”;模块化单体也是单体
模块化单体Modular Monolith单进程部署、内部按业务模块划分并约束依赖不是“先随便写,以后再拆”
微服务Microservices按业务能力独立部署、独立数据所有权的一组服务不等于“模块多”或“用了容器”
事件驱动Event-Driven Architecture通过事件异步传播状态变化的结构风格不等于“用了 Kafka”
ServerlessServerless由平台管理伸缩与运行的函数/托管服务形态不等于“没有服务器”
C4 模型C4 Model上下文、容器、组件、代码四级视图不是四张必须全画的图
容器Container (C4)可独立运行或部署的单元,如进程、数据库与 Docker container 不是同一个概念
组件Component (C4)容器内的一组职责,通常是包或模块不等于微服务
端口Port领域需要的抽象接口,由外层实现不是网络端口
适配器Adapter把端口连接到具体技术实现的代码不是“适配器模式”的全部
六边形架构Hexagonal Architecture以领域为中心、通过端口隔离外部的结构与“整洁架构”有重叠,不必强行区分
依赖倒置Dependency Inversion内层定义接口,外层实现,依赖指向内层不是“把接口放最外层”
架构适应度函数Fitness Function用自动化检查衡量架构约束是否被满足不等于单元测试覆盖率
绞杀者模式Strangler Fig Pattern用新实现逐步替换旧系统,外层路由逐步切流不是“一次性重写”
分支抽象Branch by Abstraction用抽象层隔离新旧实现,支持并行开发与切换与“双写”不是一回事
双写Dual Write同时写新旧两套存储或服务必须配对账,否则会静默不一致
双读Dual Read同时读新旧两套实现并比对结果常用于迁移验证,不用于生产主路径
架构决策记录ADR记录一次架构决策的背景、备选、结论与后果不是会议纪要
质量属性Quality Attribute可用性、性能、安全性等可度量的系统属性不是形容词;必须写成场景
质量属性场景Quality Attribute Scenario刺激源、刺激、制品、环境、响应、度量六要素缺度量就不可验收
技术债Technical Debt为短期目标做出的、需要未来偿还的设计取舍不是“所有没写的测试”

三、数据与一致性

中文英文本书用法常见混淆
本地事务Local Transaction单个数据库内 ACID 的事务不是“本地代码里的事务”
出站表Outbox与业务状态同事务写入、由 relay 异步投递的事件表不是消息队列本身
最终一致Eventual Consistency允许短时间不一致,但最终收敛到同一状态不是“可以一直不一致”
强一致Strong Consistency读写都能看到最新已提交状态代价通常落在可用性与延迟
幂等Idempotency同一请求执行多次与执行一次效果相同不等于“去重”;去重是实现幂等的一种手段
去重窗口Deduplication Window只在一个时间范围内识别重复请求窗口外的重复仍可能发生
乐观锁Optimistic Locking用版本号或条件更新检测并发冲突不是“不加锁”;冲突时要处理
版本号Version聚合每次变更递增的整数,用于条件更新不是 API 版本号
CQRSCommand Query Responsibility Segregation读写模型分离,可分别优化不等于必须用事件溯源
读模型Read Model为查询优化的投影,允许与写模型不同步不是“数据库从库”的同义词
投影Projection从事件或变更流构建读模型的过程不是数据库视图
事件溯源Event Sourcing以事件序列作为状态事实来源不等于“记录操作日志”
SagaSaga用一系列本地事务加补偿实现跨服务一致性不是分布式事务的银弹
补偿Compensation为已完成的步骤执行反向操作补偿不一定能完全还原,需业务确认
对账Reconciliation定期比对两套数据并修复差异不是“出问题后再查”
幂等键Idempotency Key客户端生成的、用于识别同一请求的键不是业务主键

四、接口与通信

中文英文本书用法常见混淆
资源ResourceAPI 中被命名的业务对象或集合不是数据库表
命令语义Command Semantics表达“要做一件事”的接口,通常非幂等与查询语义相对
契约优先Contract First先定义接口契约,再实现服务与客户端不是“先写文档再写代码”的形式主义
OpenAPIOpenAPI Specification描述 HTTP API 的机器可读契约不是框架,也不是文档站
兼容性Compatibility新版本不破坏既有调用方的能力不等于“接口不变”
弃用窗口Deprecation Window旧接口从标记弃用到移除的过渡期不是“发个通知就删”
错误码Error Code调用方可分支处理的稳定标识不是错误消息文本
超时预算Timeout Budget端到端允许的总耗时,分配到每一跳不是每跳独立设一个超时
重试Retry对可恢复失败再次发起请求不是所有失败都能重试
退避Backoff重试间隔逐步增大不等于固定间隔
抖动Jitter在退避上加入随机量,避免同时重试不是“随机失败”
熔断Circuit Breaker下游持续失败时快速失败,避免拖垮调用方不是限流
限流Rate Limiting控制单位时间内的请求量不是“降低优先级”
舱壁Bulkhead用独立资源池隔离故障影响不是线程池的别名
降级Degradation关闭非核心功能,保住核心路径不是“出错就返回空”

五、运行与可用性

中文英文本书用法常见混淆
部署单元Deployment Unit一次构建、发布、回滚的最小单位不等于代码模块
故障域Failure Domain一个故障可能影响的最大范围不等于机房
单点Single Point of Failure失效会导致整体不可用的组件不是“只有一个实例”就算单点
冗余Redundancy用多个副本降低单点风险不等于高可用,需配合故障转移
主备Active-Standby一个主实例处理流量,备实例待命与“双活”不同
健康检查Health Check判断实例是否可接收流量的探测不是“进程还活着”
流量摘除Traffic Drain发布或故障前把实例从负载均衡中移除不是直接 kill 进程
灰度Canary Release让小比例流量先走新版本不等于蓝绿
蓝绿Blue-Green两套环境切换,回滚快但成本高不等于滚动发布
回滚Rollback把版本或配置恢复到上一稳定状态数据迁移通常不可简单回滚
配置漂移Configuration Drift环境之间配置逐渐不一致不是代码分支差异
密钥轮换Key Rotation定期更换密钥并保证新旧过渡不是改密码

六、组织与治理

中文英文本书用法常见混淆
康威定律Conway’s Law系统结构会反映组织沟通结构不是“组织决定一切”
团队拓扑Team Topologies按认知负荷与交互方式组织团队不是组织架构图的别名
决策权Decision Rights谁有权批准哪类架构决策不是“谁官大谁决定”
团队契约Team Contract团队之间对接口、SLA、变更流程的明确约定不是法律合同
架构治理Architecture Governance让决策可追踪、例外可管理的最小流程不是审批流程越多越好
例外流程Exception Process允许在明确条件下偏离标准的机制不是“特批”
平台团队Platform Team为业务团队提供自助能力的产品团队不是运维值班组

十组最容易混用的概念

子域与限界上下文

子域是问题空间的划分,回答“业务上有哪几块”;限界上下文是解决方案空间的边界,回答“哪一块模型必须保持一致”。一个子域可以对应多个上下文,一个上下文也可能横跨多个子域。第 3 章会用 arch-lab 的订单、库存、支付说明两者的对应关系。

聚合与模块

聚合是事务和并发的一致性边界,模块是代码和部署的组织单位。一个模块可以包含多个聚合;一个聚合也可能被多个模块读取。把聚合画成模块,通常会导致“一个大聚合管所有事”。

端口与接口

在本书里,端口特指领域需要的抽象,由外层实现;接口是 Go 语言层面的类型。端口一定是接口,但接口不一定是端口——内部的策略接口、测试替身接口都不承担隔离外层的职责。

事件与消息

事件表达“已经发生的事”,消息是传输载体。命令是“请求做一件事”,也常通过消息传输。三者可以共用一套基础设施,但语义和责任不同;第 7 章会给出对照表。

幂等与去重

幂等是效果承诺:执行多次与执行一次相同。去重是实现手段:识别并丢弃重复请求。去重窗口有限,窗口外的重复仍可能发生,所以关键操作还需要业务层的幂等设计。

最终一致与不一致

最终一致承诺“最终会收敛”,不承诺“永远不一致”。如果一个流程没有对账、没有补偿、没有收敛期限,它只是“不一致”,不是“最终一致”。

超时与重试

超时是放弃等待的边界,重试是再次发起的动作。没有超时的重试会把故障放大;没有预算的重试会让上游先崩。第 7 章和卷二会把两者放在同一条调用链上讨论。

熔断与限流

限流控制进入系统的流量,熔断控制对下游的调用。限流保护自己,熔断保护调用链。两者经常一起用,但解决的不是同一个问题。

部署单元与模块

模块是代码边界,部署单元是运行时和发布边界。模块化单体有很多模块,但只有一个部署单元;微服务通常一个模块一个部署单元,但不是必须。

架构决策与设计决策

架构决策影响多个团队、难以回退、需要跨模块协调;设计决策通常局限在一个模块内,可以由团队自行决定。不是所有决策都值得写 ADR,判断标准是“三个月后会不会有人追问为什么”。

五个容易过时的定义

有些词的定义会随行业宣传快速漂移。本书不追新口号,只保留可操作的判断。

微服务

过时定义:把应用拆成很多小服务。可操作定义:一组按业务能力组织、独立部署、独立拥有数据、通过明确契约通信的服务。判断一个系统是不是微服务,看数据所有权和发布独立性,不看容器数量。

中台

过时定义:把所有公共能力抽出来做成一个大平台。可操作定义:一组被多个业务线复用、有明确服务契约和 owner 的共享能力。没有复用方、没有契约、没有 owner 的“中台”,通常只是多了一层审批。

云原生

过时定义:上云、用 Kubernetes。可操作定义:以容器、声明式配置、可观测性和自动化发布为基础,让系统能按需伸缩和快速恢复的一组实践。用了 Kubernetes 但发布仍靠手工改配置,不算云原生。

领域驱动设计

过时定义:画很多 UML 图、写很多实体类。可操作定义:用限界上下文划分模型边界,用聚合保护业务不变式,用统一语言让业务和技术对齐。图是副产品,不是目的。

平台工程

过时定义:把运维团队改名为平台团队。可操作定义:把重复的交付、观测、安全能力做成自助产品,降低业务团队的认知负荷。判断标准是业务团队能否不排队地完成发布和排障,不是平台团队写了多少文档。

术语不是标准答案

这份表给的是本书的统一口径,不是行业标准。不同团队、不同框架、不同教材对同一个词可能有不同定义,这很正常。

重要的是三件事:

  1. 在一个项目里保持前后一致;
  2. 第一次出现时给出定义,而不是假设读者知道;
  3. 发现定义冲突时,先对齐“要解决什么问题”,再争论词。

如果某个词在你的团队里含义不同,不必强行改口。把差异写进 ADR 或接口文档,比背一份“正确术语表”更有用。

术语与章节对照

术语组首次系统展开
质量属性、场景、ADR第 1–2 章
子域、限界上下文、聚合、事件风暴第 3 章
模块、端口、适配器、防腐层第 4 章
资源、契约、错误码、兼容性第 5 章
本地事务、outbox、CQRS第 6 章
同步、异步、事件、命令、幂等第 7 章
绞杀者、双写、适应度函数第 8 章
康威定律、团队拓扑、治理第 9 章
信任边界、数据分级、密钥第 10 章
部署单元、故障域、有状态服务第 11 章

常见缩写

缩写全称本书用法
APIApplication Programming Interface系统对外提供的接口,不特指 REST
ADRArchitecture Decision Record一次架构决策的记录
ACLAnti-Corruption Layer隔离外部模型的防腐层
CQRSCommand Query Responsibility Segregation读写模型分离
DDDDomain-Driven Design领域驱动设计
SLAService Level Agreement对可用性或延迟的对外承诺
SLOService Level Objective内部可量化的目标
RPORecovery Point Objective可接受的数据丢失时间窗口
RTORecovery Time Objective可接受的恢复时间
P9999th Percentile99% 请求不超过的延迟值
QPSQueries Per Second每秒请求数
TTLTime To Live缓存或凭据的有效期
RESTRepresentational State Transfer一种 HTTP API 风格,不是唯一选择
SDKSoftware Development Kit供调用方集成的客户端工具包

使用建议

第一,遇到不确定的词,先看它在本书里的用法,不要直接套用其他团队的语境。同一个词在不同公司可能完全相反。

第二,写 ADR 或接口文档时,第一次出现的术语给英文和一句定义。读者不需要猜。

第三,团队内部如果有不同叫法,选一个作为正式名称,其他作为别名记录,不要在代码和文档里混用。

第四,不要把这份表当成考试范围。术语的价值在于让讨论更精确,不在于背定义。

第五,发现某个词在书里前后用法不一致,按“第一次出现时的定义”理解,并把位置记下来。那通常是需要修订的地方。

小结

这份术语表覆盖了卷一会用到的六组概念:领域建模、架构风格、数据一致性、接口通信、运行可用性和组织治理。每个词给出英文、本书用法和常见混淆,并在最后列出十组最容易混用的概念。

读正文时不必先背完;遇到拿不准的词,回来查一下,再继续。术语是讨论的工具,不是讨论的目的。

同一个词在招聘启事、论文、厂商文档里的含义也可能不同,看到时先判断语境,再决定是否套用本书定义。

这份表只覆盖卷一实际出现的词,不追求收录行业全部缩写。卷二、卷三遇到新词时,会在首次出现处单独说明,不要求读者来回翻附录。
如果某个词在书中出现却没有收录,说明它更接近通用编程概念,而不是本书定义的架构术语。
表格中标注“本书用法”的条目优先于通用定义;没有标注的条目按行业通用含义理解。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《互联网产品的 AI 架构·平台化与治理》附录 C 平台化评审清单
  2. 《互联网产品的 AI 架构·平台化与治理》附录 B 能力目录与配额字段速查
  3. 《互联网产品的 AI 架构·平台化与治理》附录 A 治理角色与职责速查