基础架构即代码(IaC)是设想、配置和部署 IT 环境的一个强大范例。在 IaC 模式中,计算机系统不是手工构建的,而是用专门语言在文件中描述的。然后,自动化工具读取该文件,并按照用户的规格构建系统。IaC 的高效性和多功能性使其成为DevOps 和云计算革命的流行补充。
一些自动化平台支持IaC,每个平台都有许多不同的功能和好处。当你开始设想一个IaC解决方案时,你需要考虑这些功能中哪些最能满足你的需求。在比较IaC自动化平台时要记住的一个重要考虑因素是该工具是否支持命令式或声明式操作。
在IAC的讨论中,命令式和声明式这两个术语经常出现。这两个术语都是指用户如何向自动化平台提供指导。在命令式工具中,你定义要执行的步骤,以达到预期的解决方案。在声明式工具中,你定义最终解决方案的理想状态,而自动化平台则决定如何实现这一状态。
命令式系统最初往往更容易。你可以说,命令式系统的组织方式更像人类的思维方式。命令式系统允许你继续把配置看作是一系列的行动或步骤,每一步都使你更接近目标。命令式语言的另一个好处是,它允许你通过建立多层的命令来实现非常详细和复杂的配置的自动化。而且,由于命令式系统在如何完成任务方面给了用户更多的控制权,它通常比声明式系统更有效,更容易为特定目的进行优化。
有了命令式语言的所有优势,你可能会想为什么声明式语言会如此流行。声明式工具在几年前就已经开始流行,可以说是IaC自动化的主流格式。声明式工具受欢迎的一个原因是它们对用户的知识要求较低,至少在你了解了它们的工作方式之后。
对于一个命令式的工具,用户必须有足够的知识来告诉自动化平台该怎么做。有了声明式系统,用户只需要定义最终配置的状态,而平台则决定如何到达那里。逐步执行的复杂性对用户来说是隐藏的。
声明性语言的另一个好处是,它更具有empotent性。idempotence的概念是指一个过程可以被多次执行而得到相同的结果。因为声明式语言只是定义了最终的状态,所以无论你从哪里开始,你总是在同一个地方结束。另一方面,命令式语言将一项任务设想为一系列预定义的步骤,根据起点的不同,可以把你带到一个不同的终点。
领先的IaC自动化平台占据了从命令式到声明式的不同位置,尽管许多工具至少有一些能力来支持这两种方法。Chef通常被称为是一个命令式的工具。 Terraform和 Puppet被认为是声明式的。 Ansible和 Salt大部分是声明式的,但也提供一些对命令式的支持。
当你购买IaC自动化平台时,你会有很多因素需要考虑。命令式与声明式的选择只是众多选择中的一个标准。然而,当你开始设计你未来的IaC环境时,重要的是要花一些时间来设想一个命令式或声明式解决方案是否更适合你的组织。
注释