DevOps 文化中的合规性

将合规控制和审计集成到 CI/CD 流程中

将必要的安全控制和审计功能集成到 DevOps 文化中以满足合规性要求,可以利用 CI/CD 管道自动化,但在组织规模扩大时会带来独特的挑战。了解所选实施带来的二阶影响和意外后果是构建有效、安全和可扩展解决方案的关键。

2021 年 11 月 2 日


Photo of Carl Nygard

Carl Nygard 是 Thoughtworks 的技术主管。Carl 拥有超过 20 年的经验,领导着从初创企业到大型企业的各种领域的工作,例如 GIS/遥感、供应链、实时控制、在线教育、零售和政府。他与组织合作制定技术战略,并确定最佳技术投资以实现数字化转型目标。


在许多行业中,存在着监管标准,这些标准要求遵守各种法规。例如,萨班斯-奥克斯利法案定义了财务系统控制,ISO-27001 定义了信息安全管理体系 (ISMS),或者政府组织中的授权运营 (ATO)。在这些环境中构建和部署软件的团队必须遵守相关标准和要求,然后才能将任何软件部署到生产环境中。

DevOps 的目标之一是通过“左移”更有效率地满足跨职能需求,本质上是将安全和质量问题纳入正常的开发人员反馈循环。但是,合规控制和审计活动对于满足监管标准仍然至关重要。

已经开发出各种方法来提供符合监管要求的证明,并且每种方法都有其自身的优点和权衡。在本文中,我们将探讨四种主要的实施方法,并检查每种方法在各种条件下的权衡和优势。

理论

让我们首先回顾一下合规流程的基本理论,以便我们对合规目标、流程组件和术语有一个共同的认识,以了解团队运作的背景。

目标

我们的目标是能够通过将版本部署到生产环境中,以符合适用于该系统的相关法规的方式安全地交付系统更改。这些法规可能是组织特定的内部要求,也可能是行业范围内的法规或政府强制性规定。

法规和合规结构旨在确保系统的质量和正确性,是一种风险管理形式。

背景

我们的开发团队在 DevOps 文化中运作,强调以团队为中心的的能力,例如团队自主权、频繁发布小单位价值以及低平均恢复时间 (MTTR),以最大程度地降低风险,同时加快软件交付。

流程负责人

我们的组织有一个合规办公室 (OoC),它定义了要实现的期望结果集(是什么而不是怎么做)以及系统在部署到生产环境之前必须经过验证的流程。这允许团队自行解决以满足结果,前提是 OoC 同意该解决方案会导致期望的结果。

例如,结果可能是“高质量软件”,对于该结果,团队可能会从 OoC 获得同意,即 CodeClimate 报告的代码覆盖率 > 80% 满足该结果。

作为一个更复杂的例子,结果可能是“所有更改都是必要的更改”,这可能导致一个解决方案,该解决方案要求所有提交都与相关的 JIRA 票证相关联,由产品负责人优先排序,并由另一位开发人员进行 PR 审查。除了 PR 审查之外,另一个团队可能会使用结对编程与主干开发相结合,并在提交日志中简单地识别两位开发人员和 JIRA 问题。

合规流程

从高层面上讲,评估合规状态涉及测量系统的属性,根据一组约束验证此证据,并记录结果。

  • 属性:系统的客观可测量属性
  • 测量:测量系统属性的测试
  • 证据:属性的测量结果。通常为真或假(真值)或数值。
  • 约束:属性值必须落入的限制,以满足要求。
  • 验证:将证据与特定约束进行比较,证明系统对于特定要求“符合”。

注意:适应度函数[1]的概念是两个任务的组合;测量以获得证据,以及验证证据是否满足特定阈值或值约束。

一个简单的例子可能是从 Kubernetes 配置中提取(测量)开放端口列表(证据)并验证只有端口 80 或 443 是开放的(约束)。

一个更全面的适应度函数可能是测量代码覆盖率(使用任何可用的工具,例如 JaCoCo、SonarQube、CodeClimate 等),检查报告(证据),并验证报告的值是否符合所需的 80% 代码覆盖率水平(约束)。

一个更复杂的例子涉及可变约束,例如常见漏洞和披露 (CVE) 列表,可能是扫描容器(测量)以查看是否存在 CVE(证据),并验证是否存在未被接受为已知风险的 CVE(可变约束)。

威胁模型

任何合规流程中的一个问题是结果的有效性和系统的完整性。换句话说,对合规流程的信任度有多高?

创建威胁模型以识别合规流程的特定风险非常重要。许多公司假设开发人员可能会被入侵,这会导致诸如“是否有方法将更改引入最终系统,而这些更改不可见或不可审计?”之类的问题。例如,如果开发人员可以访问构建基础设施,那么他们可以在构建过程中登录并以未反映在 SCM 或任何审计日志中的方式更改代码。

了解威胁模型将指导组织采取需要实施的策略以减轻风险(即实施适当的 CI/CD 基础设施安全)。但是,威胁模型将根据组织和使用的特定合规方法而有所不同,并且超出了本文的范围。

审计流程

审计流程是一种元合规形式,本质上是验证合规流程实际上是否在运行,并以一致、准确的方式遵循定义的要求。由于这是对合规流程本身的测试,因此它发生在更高层级,但遵循上面描述的相同模式。它有一组更小、更简单的规则和要求,通常通过评估随机样本来完成,而不是对每个合规活动进行详尽的验证。

模式

现在我们已经了解了合规流程的基本组件,我们可以用这种视角来检查一些常见的实施模式。了解每种模式如何映射回基础概念将帮助我们评估和比较每种模式,并了解每种实施中固有权衡的根本原因。

这些模式从简单开始,逐渐变得更加复杂,以处理组织和交付规模增长带来的二阶效应。我们从最简单的形式,手动合规性开始。随着组织的增长,合规活动可能会被纳入构建管道。随着运行业务所需的解决方案范围的扩大,通常会开始寻找利用共享功能的方法,这通常会导致利用符合的容器映像的组合。最后,我们将讨论单一职责原则如何导致合规域边界的完全重组,因为我们将合规验证转移到变更点。

手动合规性

人员执行合规性检查,通常借助清单。

手动合规性可能是最简单的合规流程形式。在这种方法中,合规办公室定义了要测量的属性集,并将测量实现为一组表格或问卷。这些调查问题可能具有简单的答案,例如是/否复选框、开放端口或 URL 列表,或者可能需要叙述性描述,例如安全访问规则或备份和恢复程序。

开发团队通过填写表格或问卷,以书面形式提供证据来响应每个项目,从而手动执行每个版本的系统属性测量。

验证证据的行为由合规官员执行,他们会查看提交内容,并将比较启发式方法应用于开发团队提供的证据。此评分标准可能因项目而异,例如确保表格中未列出除 80 和 443 之外的任何端口,或者表格中未列出任何“未接受”的 CVE。无论评分标准如何,所有此类验证都应该是客观的。

审计合规流程也是一项相当简单的练习,即审查随机选择的合规表格,以确保表格上的信息是现实的准确反映,并且所有答案都通过了验证评分标准。但是,由于此流程的高度手动性质,它在应用和结果方面可能高度不一致。可能需要更频繁地以更详细的级别执行审计流程,以实现所需的报告一致性水平。

何时使用它

如果要测量的属性集很小,版本发布不频繁,并且响应很简单,那么这可能是一个简单易行的流程。对于小型合规流程的实施,不需要大量资源或时间投资。它可以像为团队创建 Google 表格以填写和提交一样简单。通常,这种类型的实施还涉及手动审查流程,通常作为与审查会议相关的正式批准来实施。

随着组织的规模扩大,此流程很快就会变得很痛苦。额外的规模会带来挑战,这些挑战会由于工作量和复杂性的增加而体现在多个维度。

容量挑战源于组织规模扩大带来的工作量增加。随着组织的增长,运营合规流程的能力必须与之成比例地增长,以处理额外的合规批准请求。由于部署批准请求的随机性质,中央合规团队的工作流程变化很大,因此为快速响应而调整中央团队的规模成本很高。随着组织的增长,这个问题会加剧。

复杂性挑战随着组织的规模扩大而出现,创造了新的和令人兴奋的故障模式,进而推动了合规流程的改变。合规表格的大小和复杂性不断增加,需要开发团队和合规团队花费更多的时间和精力来完成流程。

当合规流程在规模上显示出其效率低下,并开始成为开发团队交付业务价值速度的限制因素时,可能会出现二阶效应。

团队可以通过将更改进行批处理来专注于成本效率,这样,发布的价值的开发工作将占部署这些更改到生产环境所需的总成本的很大一部分。

合规流程的交付周期也会决定批次大小,因为合规办公室的工作能力限制了在给定时间段内可以处理的部署请求数量。在部署数量有限的情况下,增加交付给客户的价值的唯一方法是增加批次大小。

如果合规办公室因任何原因超负荷,那么等待合规结果的团队队列就会增长——合规流程本身就是一个限制价值交付的瓶颈。通常,交付压力会压倒合规流程,开发团队会积极地滥用、破坏或完全规避合规流程,导致“影子 IT”、设计和架构决策受损,甚至伪造合规响应。

我们在商业和政府领域内的组织中都观察到了所有这些行为。我们已经看到了手动合规流程,这些流程实际上需要 6-9 个月才能完成,然后才能将新服务或系统部署到生产环境。在另一家客户那里,我们能够证明他们的流程不仅限制了组织交付的速度和规模,而且该流程在应用和最终结果方面高度不一致。

不幸的是,我们的经验表明,手动合规流程是一种“安全表演”,导致价值交付延迟,而没有实质性提高系统的安全性和安全性。我们还看到这些流程对交付流程以外的影响远远超过,影响了组织结构、架构决策、领域边界,甚至人员配置和人才保留。

管道合规

在部署管道中嵌入合规检查。

在这种方法中,合规流程作为一组适应性函数和管道阶段之间的手动关卡,嵌入到 CI/CD 部署管道 中。管道在构建管道中执行适应性函数,以获取证据并根据阈值进行验证。

对于适应性函数,例如检查开放端口、软件供应链验证或验证代码覆盖率,将其合并到管道中相当简单。但是,对于某些验证,自动化可能存在挑战(例如,如何决定哪些 CVE 对特定工件是“批准的”),这会导致管道中的手动关卡。

任何失败的适应性函数都会导致管道失败,实际上,如果任何合规验证失败,将阻止发布部署到生产环境。

通过这种方式,成功执行管道隐式地证明了系统发布已满足内置于管道中的可自动验证的合规要求。通过管道阶段之间的手动关卡,明确表明手动可验证的合规要求也已满足。

何时使用它

显然,合规测试的自动化对合规办公室和团队中的开发人员来说都是巨大的优势。

合规办公室可以确信正在执行适当的合规适应性函数,并且管道日志可以提供记录适应性函数执行和结果的审计跟踪。团队可以专注于交付业务价值,而不是通过确保管道执行所需的操作来控制单个更改。

团队中的开发人员可以更快地获得有关系统发布是否满足合规要求的反馈(至少对于已作为适应性函数自动化的那些要求而言),因为管道中的故障表明未能满足合规要求。

在同构开发环境中,每个团队都使用相同的堆栈,构建大致相同类型的系统(例如 REST 服务等),团队可以通过复制标准管道来实现效率提升。至少,共享相同的合规适应性函数将在同构环境中产生规模经济。

组织对生产环境中故障的常见反应是在部署流程中添加手动验证步骤。例如,适应性函数可以定义为“所有工作已完成并且存在回滚计划”,这必须由团队经理和安全官手动验证。这并不理想,因为它会导致对名义上对系统负责但实际上并不负责(即熟悉)他们批准的更改的角色的排队工作。 [2] 净结果是额外的延迟,但没有对系统的安全性或稳定性进行具体改进。

另一个典型的反应是希望锁定管道以保证合规性。当生产环境中出现某些故障时,这可能会发生,也许可以追溯到团队特定偏离标准管道的行为。组织将管道合规流程的责任转移到一个中央团队,目的是将每个团队的系统发布通过相同的“黄金”管道。

我们的经验表明,由于团队管道中变化的频率很高,因此管道中央所有权是开发流程中最大的摩擦来源之一。这种集中化会导致开发速度整体放缓,因为中央团队已成为限制团队改进其系统的瓶颈。

二阶效应类似于手动解决方案:“影子 IT”、设计和架构决策受损,或在没有更新的合规管道的情况下部署到生产环境。

我们知道,在某些情况下,这种中央“所有权”决策是出于明确的减缓发布速度的愿望而做出的。虽然很少公开说明,但组织已经意识到,更频繁的发布通常会暴露其开发流程中的系统性不成熟。转向中央控制通常是试图将交付质量的责任从工程和开发团队转移到合规组织。

随着时间的推移,产生的摩擦程度难以估量。管道存在的首要原因是在软件开发流程中提供一个中央工具。当它被征用并随后为正交目标控制时,开发人员的关注点往往会根据管道团队(通常是 DevOps 团队)的人员配置、组织、激励和运营方式而降低优先级。

组合合规

组合已经确定为合规的组件。

这种方法基于合规性是可分配的这一前提,这使得通过组合合规组件来构建合规系统成为可能。例如,数学中的分配性质指出,如果 C(A) + C(B) = C(A+B),则函数 C 是“对加法分配的”。同样,人们可以假设合规性以类似的方式对组合分配,允许组织利用容器化的可重用性和可组合性来有效地实现广泛解决方案的合规性。

在实践中,已经测试过“符合合规性”的业务或技术能力将作为容器映像提供给开发团队。随着时间的推移,组织的不同部分可能会向可用映像集添加或演化新功能。这些映像的合规性状态是通过传统的合规性流程(手动或基于管道的流程)实现的。这些“黄金映像”被锁定,并且在隔离状态下,每个映像都满足了当前时间点的合规性流程的要求。

预期是,通过培训,团队可以以特定方式组合这些“黄金映像”来构建和部署系统发布。例如,需要持久性的团队可以选择 PostgreSQL 映像或 Cassandra 映像。只要他们的需求符合“黄金映像”提供的范围(例如,没有 PII,静止加密),他们就满足了合规性要求。

确保“黄金映像”继续满足合规性要求的流程是此流程的关键部分。例如,可能会发现影响当前“黄金”映像的 CVE,需要更新映像以解决问题。这将要求所有使用(现在是非黄金)映像的团队更新并使用新发布的映像进行测试。

合规性审计是一个两阶段流程。从团队的角度来看,实现团队特定解决方案的合规性可以像验证基础设施配置仅使用“黄金映像”并且没有添加可能违反映像合规性状态的自定义配置一样简单。

“黄金映像”的审计将遵循一个单独的流程,具体取决于它们是通过手动流程还是基于管道流程认证的,并且是提供映像的团队的关注点。

何时使用它

对于具有符合构建块功能的要求的团队来说,这是一个很好的解决方案。这些“黄金映像”代表了团队原本需要实现的业务或技术能力,并且这些映像已经通过了合规性要求。例如,依赖黄金 PostgreSQL 映像意味着团队不需要考虑如何配置备份/恢复、数据库调优、部署、日志记录或操作注意事项。所有这些活动都已作为通过合规性的 PostgreSQL 构建块的一部分完成。

鉴于成熟的构建块集合、同构开发环境和需求变化较小的业务需求,这可以通过避免跨多个开发团队的重复工作来提高效率。

当这些基本假设和限制被违反时,与组件组合策略相关的摩擦就会出现。任何需要现有“黄金映像”范围之外的功能的产品开发也需要开发团队对其系统中的这些“非黄金”组件进行相同的繁琐合规性流程。一些团队可能会认为这样做存在相当大的进度风险,这可能会对系统的架构和设计产生不当影响。

此外,这是一个滑坡;在滑坡的底部,组织并没有变得更好,因为每个团队都在管理其自身特殊情况解决方案的合规性。有人可能会争辩说,使用合规映像作为定制的基础,将合规性工作限制在增量更改中。但是,由于这些共享的“基线”映像,团队之间的耦合增加了。合规性单位仍然是整个映像,因此随着时间的推移,合规性的边际成本可能比人们想象的要大。

将责任转移到中央团队以提供合规映像具有与上面提到的管道集中化时相同的特征。

随着组件组合解决方案在规模上显示出其效率低下,它也开始成为限制开发团队交付业务价值速度的因素。二阶效应类似于手动和基于管道的解决方案:“影子 IT”、设计和架构决策受损,或部署到生产环境中未通过合规性要求的组件。

我们观察到,遵循这种模式的系统在不同规模的组织中表现出不同的行为。在小规模或实施这种模式的早期阶段,很容易找到需求相似的团队,在那里依赖合规构建块的经济效益是显而易见的,并为团队提供了加速。但是,超过一定规模后,交付的解决方案的需求就会分化,导致在团队无法依赖合规构建块的地方出现熟悉的摩擦来源。

注意:我们故意回避了合规性是否实际上对一组合规容器映像的组合是分配的这个问题。假设这是真的,它可能只适用于完全不可定制的精确容器映像,这反过来可能会将解决方案空间限制到如此程度,以至于它没有实际效用。我们鼓励您认真思考在组合合规性的范围内可以实现哪些类型的可配置性,以及与您的用例相关的可配置性。

更改点合规

在进行更改时执行合规性检查。

在这个方法中,合规性在变更发生之前,即变更点就被强制执行。通过验证所有与合规性相关的约束和要求是否已满足,我们可以确保实现预期结果(质量、安全、可审计性等)。

为了将合规性验证转移到变更点,我们需要将我们的流程分解为基本步骤。我们将适应性函数的应用重构为其基本单一职责操作:测量和验证。正是这种拆分提供了我们创建新领域边界的缝隙,从而允许实施更灵活、更高效的合规性流程。

在这个流程中,开发团队负责收集证据(即传统适应性函数的第一部分),通常通过管道自动化。例如,团队可以在其管道中添加步骤来从 Kubernetes 配置文件中提取开放端口列表,测量代码覆盖率或执行 CVE 扫描。

我们引入了系统记录(SoR)的概念,用于存储开发团队收集的证据。可能存在一个或多个 SoR,具体取决于记录的数据或执行的测试。例如,代码覆盖率或 CVE 扫描可能由 SaaS 工具执行,该工具将是这些数据元素的 SoR 的逻辑选择。

合规性验证在变更点进行验证,例如由管理非 Kubernetes 基础设施组件的 Kubernetes 运算符或 Kubernetes 集群中的准入控制器进行验证。每个应用程序都有自己的一组对主控制列表的例外情况,由团队和合规性办公室共同管理,允许部署,即使证据可能表明不符合要求。例如,系统可能有一组针对不适用的控制的永久例外情况。它也可能有一组临时例外情况(例如,针对新发现的 CVE),这使团队有时间解决已接受的风险,而不会延迟价值交付。

由于我们将测量行为与验证行为分开,因此当测量行为不是由 SoR 直接管理时(例如,团队编写了一个管道步骤来从 Kubernetes 配置中提取开放端口),我们在流程中引入了一些不确定性。当查询 SoR 以获取证据时,我们如何知道证据的来源,或者证据是否可靠?当验证与管道适应性函数中的测量捆绑在一起时,我们知道测量是有效的。为了降低这种不确定性风险,我们引入了加密签名证据的概念,以提供验证数据来源的能力,并实现一个连贯、可信的分布式流程。

将所有内容整合在一起,合规性验证要求所有证据都存在于 SoR 中,在 SoR 之外收集的证据具有可加密验证的签名,并且所有对证据的合规性验证都成功。本质上,我们使用“代码即策略”原则将合规性验证流程外部化。此解决方案启用的一种强大功能是能够独立更改合规性策略,甚至可以评估针对 SoR 中存储的现有证据的新合规性策略,以了解策略更改对当前部署系统的的影响。

一个入门工具包或集中开发的基线管道可以提供一组已获准用于合规性流程的基线测量测试。这组基线资源为开发团队提供了规模经济,而不会将团队锁定在任何特定的流程约束中。

如果团队希望自行管理测量流程的某些部分,则必须由合规性办公室批准新的测量测试,并将其集成到团队的开发流程中,很可能集成到其管道中。希望使用新方法的团队需要拥有该批准流程,但增量工作减少到最小的变更单元(即单个测量测试,而不是容器映像)。任何打算由多个团队使用的测量都应以完全可 API 使用的方式实施,从而使消费者能够自助采用。

审计流程也变得简单,只需查看部署步骤的日志,确保所有结果都已通过经批准证书加密签名的证据验证。

何时使用它

此解决方案有助于最大程度地减少先前描述的解决方案中存在的瓶颈。它本质上比上面描述的解决方案更复杂,因此可能仅限于组织规模会创建此方法能够解决的瓶颈类型的环境。

通过分离合规性问题,我们可以实现避免与集中管理的合规性方法相关的摩擦所需的松散耦合。团队可以选择采用集中提供的管道控制集,同时仍然能够有效地自行管理团队可能具有的任何独特要求。

如果合规性约束经常发生变化,组织可以有效地确定对现有系统的影响,从而减少计划工作并简化实施流程。“代码即策略”原则保护团队免受额外工作的影响,因为应用测量测试来收集证据的流程没有改变。

由于合规性流程的所有输入都基于数据和配置,因此审计流程得到了显着简化。在任何给定时间点,都可以通过查询 SoR 来获取证据集和验证流程的结果。

如上所述,由于关注点的分离,该解决方案稍微复杂一些。但是,复杂性适当地存在于合规性办公室内部,而不是委托给整个组织的每个开发团队。

必须明确解决流程中的信任问题,作为 SoR 和相关密钥管理的一部分,这些必须由合规性办公室管理。虽然在批准新测量测试的流程中存在熟悉的瓶颈,但这些瓶颈的范围更有限,因为单个工作项(即就测量测试的适用性达成一致)明显更小,并且不会显着阻止团队进行开发。

仍然存在“影子 IT”或将未通过合规性要求的生产组件部署到生产环境的风险。但是,设计和架构决策被破坏的风险大大降低。

多年来,我们一直在多个客户中实施这种模式。对于一家大型企业组织,我们实施了一个自定义准入控制器,该控制器确保符合部署要求、安全性和证书,使用提供 CVE 扫描容器的可信容器注册表,并验证适当文档的存在(或创建)。在另一个组织中,我们实施了类似的功能,此外还集成了一个“代码即策略”解决方案,在部署之前对 Kubernetes 配置执行 CIS 基准测试。

观察和经验

当我们退后一步,查看各种解决方案时,一种模式开始变得清晰。我的同事 Zhamak Dehgani 使用“架构量子”[3]的概念来标记她在讨论支撑数据网格的概念时,一个架构单元的概念,我认为将类似的想法应用于我们的合规性领域很有趣。

手动合规性 流程中,每个系统都被视为架构量子和合规性量子。这意味着系统是独特的实体;无论它们可能有多相似,每个系统都需要自己的一组合规性工作/输出。系统之间的任何相似之处都代表了合规性工作中的浪费,尤其是在规模上。

管道合规性 流程中,开始区分架构量子和合规性量子。每个系统都是一个独特的架构量子,但现在我们将合规性量子拆分为由适应性函数封装的更小的单元。这使组织能够通过在(可能共享的)管道中共享的通用适应性函数来跨系统共享这些新的合规性量子,而团队仍然负责任何独特的团队特定适应性函数。

组合合规性 流程中,通过将系统分解为更小的可组合架构量子来进一步发展,每个架构量子都拥有自己的合规性。现在,由这些架构量子组成的系统不再负责完全执行验证流程,因为它现在以可组合的合规容器映像的形式共享合规性流程的结果。团队现在只负责其独特的团队特定容器映像的合规性。

最后,变更点合规性采取了最后一步,将合规性量子分解为预测结果的各个属性,并将适应性函数分解为单独的测量和验证步骤。通过这样做,我们最大程度地提高了合规性量子(测量和验证)的可重用性,同时最大程度地减少了每个开发团队需要独特管理的内容(自定义测量)。

每个解决方案都通过缩小每个流程所需的架构量子和合规性量子的范围,逐步缩小验证合规性所需的独特工作。随着独特工作的减少,二阶效应也随之减少。此外,由于重新组织的领域边界,出现了新的功能。在这个过程中,我们将管道的所有权返还给开发团队,同时在适当的情况下保留规模经济。

在 Thoughtworks 的数字平台战略参与中,我们密切关注开发人员摩擦的来源。在我们为客户引入的各种变化中,将管道所有权返还给开发团队的加速因素始终是工程组织可以做出的前三大价值回报投资之一。

结论

与所有架构决策一样,这更多地是关于评估权衡而不是找到完美的解决方案。评估成本和收益后得出的结论对于每个组织来说都是不同的,具体取决于所做的工作类型、组织的规模和规模以及交付给客户的解决方案的复杂性。

但是,从架构的角度来看,如果您在合规性架构中采用基本关注点分离,则可以使您的解决方案处于最佳位置,以满足组织的需求。您可以根据组织的需要,自由地将测量与验证捆绑在一起,以在管道中创建适应性函数。当您的组织达到一定规模时,这些原则使组织能够重构合规性解决方案,以实现促进团队效率规模的松散耦合。


脚注

1: 请参阅 构建演化架构 的第 2 章

2: 请参阅 加速 的第 7 章

3: 她的讨论 中,她指出架构量子最初来自 构建演化架构

致谢

这篇文章从许多同事的评论、建议和建设性批评中受益匪浅。感谢 Tim Cochran、Martin Fowler、Neal Ford、Nic Cheneweth、Dan Kunnath、Kief Morris、Ranbir Chawla、Brandon Byars、Andrew Buchanan、Jim Gumbley、Patrick McFadden 和 Shree Damani。

重大修订

2021 年 11 月 2 日:发布