基础设施即服务(Infrastructure as a Service,IaaS)、基础设施即代码(Infrastructure as Code,IaC)、以及最近的基础设施即数据(Infrastructure as Data,IaD)——当然,基础设施有多种形式、形态及规模。然而,尽管这些术语听起来很相似,看似很简单,但它们所表示的复杂概念却是完全不同的。
在基础设施即服务(IaaS)或云计算进入到这一阶段之后,软件工程界必须确定如何使用“基础设施即服务”(IaaS)了。
这篇博文讨论了一些最流行的方法,并为技术和非技术涉众提供了简明而准确的定义。
本文要点
- 基础设施即服务(IaaS)是指按需获取及释放资源的能力。
- 基础设施即代码(IaC)或基础设施即数据(IaD)是指按需获取及释放资源的方法。
基础设施即服务(IaaS)
基础设施即服务(IaaS)是指按需获取及释放资源的能力。
这篇博文基于基础设施即服务的最小模型:术语“基础设施即服务”是指资源使用者按需从资源提供者那里获取及释放一组资源的能力。
术语“资源”是指由使用者使用并由提供者据此提供的任何组件,例如,虚拟机、容器或负载均衡器。
基础设施即代码(IaC)
基础设施即代码(IaC)是指获取及释放资源的 方法。
这篇博文基于一个基础设施即服务(IaaS)模型的基础设施即代码(IaC)的最小模型:术语“基础设施即代码”是指按需获取及释放一组资源的配置方法。
基础设施即代码、即数据......
毫无疑问,基础设施即代码(IaC)是当今最知名、最常被讨论的配置方法了。然而,在这篇博文中,我们将讨论五种不同的获取及释放资源的方法。
资源使用者决定所需的资源集,即所需的状态。该配置方法决定如何表达所需状态,以及如何或何时计算或执行将当前状态转换为所需状态的命令序列。
例如,资源使用者可以决定除了三个计算资源之外,还需要一个负载均衡器资源来运行他们的应用程序。
但是资源使用者如何才能做到这一点呢?如果资源使用者遇到了任何由环境引发的不利影响(如计算资源不可用),那么会发生什么事情呢?
命令式资源配置方法
命令式资源配置方法指的是资源使用者没有正式编码所需的状态,并且由资源使用者来决定命令序列。
最值得注意的是,命令式方法是不可重复的,因此,也就无法自动执行,因为资源使用者必须为每个给定的当前状态确定导致所需状态的命令序列。
- 基础设施作为票据
图 1.1 基础设施即票据
基础设施即票据(Infrastructure as Tickets)是指在企业支持的票据系统中提交支持票据的方法。资源使用者提交所需资源的描述作为支持票据。支持代理代表使用者获取或释放资源,并与使用者共享连接信息和凭据。
图 1.2 基础设施即票据
- 基础设施即点击
基础设施即单击(Infrastructure as Clicks)是指使用资源提供者的用户界面来获取及释放资源的方法。
图 2.2 基础设施即点击
- 基础设施即脚本
图 3.1 基础设施即脚本
基础结构即脚本(Infrastructure as Scripts)是指使用资源提供者的命令行界面来获取及释放资源的方法。
图 3.2 基础设施即脚本
声明式资源配置方法
声明式资源配置方法指的是:资源使用者正式编码所需的状态,并且由组件来决定命令序列。
最值得注意的是,声明式方法是可重复的,因此可以实现自动化,因为组件可以确定任何可能导致当前状态所需状态的命令序列。
- 基础设施即代码
图 4.1 基础设施即代码
基础设施即代码(Infrastructure as Code)是指使用附加的组件来获取及释放资源的方法。资源使用者以特定于组件的格式对所需状态进行编码,然后组件确定并执行所需的命令序列。此外,“as Code”表示存在控制流语句。
到目前为止,这种组件的可用实现具有工具级的质量,当资源使用者触发时,该工具将执行一次——可以在持续部署或持续交付管道的上下文中手动或自动执行。
比较著名的示例包括 Hashicorp Terraform 和 Pulumi 的 Pulumi。
图 4.2 基础设施即代码
- 基础设施即数据
图 5.1 基础设施即数据
基础设施即数据(Infrastructure as Data)是指使用附加的组件来获取及释放资源的方法。资源使用者以特定于组件的格式对所需状态进行编码,然后组件确定并执行所需的命令序列。此外,“as Data”表示没有控制流语句。
到目前为止,这种组件的可用实现具有连续执行平台级的质量。
比较著名的示例包括云原生计算基金会(Cloud Native Computing Foundation,CNCF)的 Kubernetes Platform 以及 AWS 的 Fargate。
图 5.2 基础设施即数据
基础设施即代码 VS 基础设施即数据
基础设施即代码(IaC)的定义特性是在所需状态的编码中存在控制流,而基础设施即数据(IaD)的定义特性是在所需状态的编码中不存在控制流。
基础设施即代码通常与资源提供者手动触发的检测和状态漂移的缓解相关联。类似地,基础设施即数据通常与组件持续执行的检测和状态漂移的缓解相关联。
然而,手动触发或连续执行的对帐不是定义特性:
- 基础设施即代码与手动触发相关联是有原因的,这源于基础设置即代码的推广是通过手动触发工具(如 Terraform 或 Pulumi)来展开的
- 基础设施即数据与持续执行相关联,则源于能持续执行基础设施即代码的平台(Kubernetes)的普及。
结论
无论我们是将基础设施视为票据、点击、脚本、代码还是数据,我们都是在考虑基础设施的配置方法,即我们如何与基础设施即服务进行交互。