第 17 章 将堆栈用作组件 将堆栈用作组件
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
堆栈通常是基础设施系统中最高级别的组件。它是可以独立定义、配置和更改的最大单元。可重用堆栈模式(参见"模式:可重用堆栈")鼓励将堆栈视为共享和重用基础架构的主要单元。
由小型堆栈组成的基础设施比由模块和库组成的大型堆栈更加灵活。与大型堆栈相比,您可以更快速、更轻松、更安全地更改小型堆栈。因此,这种策略支持良性循环,即利用变化速度提高质量,利用高质量实现快速变化。
利用多个堆栈构建系统需要保持每个堆栈的大小适中、设计合理、内聚且松散耦合。第 15 章中的建议既适用于堆栈,也适用于其他类型的基础架构组件。堆栈面临的具体挑战是如何在不产生紧密耦合的情况下实现堆栈之间的集成。
堆栈之间的集成通常涉及一个堆栈管理另一个堆栈使用的资源。目前有许多流行的技术来实现堆栈间资源的发现和集成,但其中许多技术都会造成紧密耦合,从而增加更改的难度。因此,本章将从如何影响耦合的角度探讨不同的方法。
发现堆栈间的依赖关系
ShopSpinner 系统包括一个消费者堆栈application-infrastructure-stack ,它与另一个堆栈shared-network-stack 管理的网络元素集成。Network+ 堆栈声明一个 VLAN:
vlan:name:"appserver_vlan"address_range:10.2.0.0/8
应用栈定义了一个应用服务器,并将其分配给 VLAN:
virtual_machine:name:"appserver-${ENVIRONMENT_NAME}"vlan:"appserver_vlan"
该示例对两个堆栈之间的依赖关系进行了硬编码,从而产生了非常紧密的耦合。如果没有网络协议栈的实例,就无法测试对应用协议栈代码的更改。对网络协议栈的更改受到另一个协议栈对 VLAN 名称的依赖性的限制。
如果有人决定增加更多的 VLAN 以提高弹性,他们需要消费者在改变消费者的同时改变代码的实现。1否则,他们就会保留原来的名称,从而增加代码和基础架构的混乱程度,使其更难理解和维护:
vlans:-name:"appserver_vlan"address_range:10.2.0.0/8-name:"appserver_vlan_2"address_range:10.2.1.0/8-name:"appserver_vlan_3"address_range:10.2.2.0/8
硬编码集成点会增加维护多个基础架构实例(如不同环境)的难度。这可能取决于基础架构平台针对特定资源的 API。例如,也许你会在不同的 Cloud 账户中为每个环境创建基础架构栈实例,这样就可以在每个环境中使用相同的 VLAN 名称。但更常见的情况是,您需要为多个环境集成不同的资源名称。
因此,应避免硬编码依赖关系。相反,可以考虑使用以下模式之一来发现依赖关系。
模式:资源匹配
消费者堆栈通过查找与名称、标记或其他识别特征相匹配的基础架构资源,使用资源匹配来发现依赖关系。例如,提供者堆栈可以根据 VLAN 中的资源类型和 VLAN 的环境来命名 VLAN(见图 17-1)
图 17-1. 用于发现依赖关系的资源匹配
在本例中,vlan-appserver-staging 用于暂存环境中的应用程序服务器。application-infrastructure-stack ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access