Skip to Content
基础设施即代码,第2版
book

基础设施即代码,第2版

by Kief Morris
May 2025
Beginner to intermediate
430 pages
4h 37m
Chinese
O'Reilly Media, Inc.
Content preview from 基础设施即代码,第2版

第 16 章 从组件构建堆栈 从组件构建堆栈

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

第 15 章阐释了精心设计的组件如何使基础设施系统更容易、更安全地进行变更。这一信息支持了本书的主题,即利用变革的速度来不断提高系统的质量,并利用高质量来实现更快的变革。

本章重点介绍基础架构栈的模块化,即把栈分解成更小的代码块。考虑将堆栈模块化有几个原因:

重复使用

将如何实现特定构造的知识放入组件中,以便在不同堆栈中重复使用。

组成

创建交换概念的不同实现方式的功能,以便灵活构建堆栈。

可测试性

在整合堆栈之前,先将其分解成可单独测试的部分,从而提高测试速度和重点。如果组件是可组合的,您可以用测试双件("使用测试夹具处理依赖关系")来替代它们,以进一步提高测试的隔离性和速度。

共享

在团队之间共享可组合、可重用和经过充分测试的组件,这样人们就能更快地构建更好的系统。

正如"堆栈组件与作为组件的堆栈 "一文所述将堆栈分解为模块和库可以简化代码,但并不能使堆栈实例变得更小或更简单。堆栈组件有可能使情况变得更糟,因为它们会掩盖堆栈实例中添加的基础架构资源的数量和复杂性。

因此,您应该确保了解您所使用的抽象、库和平台的底层是什么。这些东西是一种便利,可以让你专注于更高层次的任务。但它们并不能取代你对系统实现方式的全面了解。

堆栈组件的基础结构语言

第 4 章介绍了不同类型的基础架构代码语言。定义堆栈的两种主要语言是声明式语言(见"声明式基础架构语言")和命令式语言(见"可编程的命令式基础架构语言")。该章提到,这些不同类型的语言适用于不同类型的代码(见"声明式与命令式基础设施语言")

当人们使用错误的语言类型编写堆栈组件时,这些差异往往会与堆栈组件相冲突。使用错误的语言类型通常会导致声明式语言和命令式语言的混合,如前所述,这是一件坏事(参见"将声明式代码和命令式代码分开")

决定使用哪种语言往往取决于您使用的基础设施堆栈管理工具及其支持的语言。1

本章后面定义的模式将鼓励你思考你试图通过特定的堆栈及其组件来实现什么目标。为了利用这一点来考虑应使用的语言类型以及可能的堆栈工具类型,请考虑基于语言类型的两类堆栈组件。

使用模块重用声明式代码

大多数使用声明式语言的堆栈管理工具都允许您使用相同的语言编写共享组件。CloudFormation 有嵌套堆栈,Terraform 有模块。您可以向这些模块传递参数,这些语言至少具有一定的可编程性(例如 Terraform 的 HCL 表达式子语言)。但这些语言从根本上说都是声明性的,因此用它们编写的几乎所有复杂逻辑都是野蛮的。

因此,声明式代码模块最适合用于定义变化不大的基础架构组件。声明式模块适用于门面模块(参见"模式:门面模块")门面模块封装并简化基础架构平台提供资源。如果将这些模块用于更复杂的情况,它们就会变得很糟糕,会产生意大利面条模块(参见"反模式:意大利面条模块")

正如"挑战:声明式代码的测试往往价值不高 "一文中提到的声明式模块的测试应该相当简单。应用声明式模块的结果变化不大,因此不需要全面的测试覆盖率。但这并不意味着你不应该为这些模块编写测试。当一个模块结合多个声明创建一个更复杂的实体时,你应该测试它是否满足要求。

使用库动态创建堆栈元素

一些堆栈管理工具(如 Pulumi 和 AWS CDK)使用通用的命令式语言。您可以使用这些语言编写可重复使用的库,以便从堆栈项目代码中调用。库可以包含更复杂的逻辑,可根据使用情况动态调配基础设施资源。 ...

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

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

构建数据集成解决方案

构建数据集成解决方案

Jay Borthen
金融领域的机器学习与数据科学蓝图

金融领域的机器学习与数据科学蓝图

Hariom Tatsat, Sahil Puri, Brad Lookabaugh
可观察性工程

可观察性工程

Charity Majors, Liz Fong-Jones, George Miranda

Publisher Resources

ISBN: 9798341658493