> Photo by Viswanath V Pai on Unsplash
这是我关于现代软件开发实践的系列文章的第六部分。 在本系列文章中,我介绍了软件工程师可以通过改善流程和实践来改进软件的多种方法,这些都是我在ThoughtWorks担任软件顾问时所学到的,也可以在我在大型零售商店的工作中体会到。 公司在德国。
当今世界上建造的许多结构(例如桥梁)都是建立在基础上的,这些基础包括自然界中最坚固的形状:三角形。
我在Thoughtworks工作的一部分时间专门用作基础架构工程师,向其他软件团队咨询如何增强其基础架构……咨询如何将其圆形基础架构变为三角形。
此过程需要各种步骤,其中有些步骤因公司而异,但是始终保持不变的一个步骤是将基础结构实现为代码。
什么是基础架构即代码
基础架构即代码是一种实践,旨在应对基础架构团队应对的许多挑战。 它着重于可预配系统及其配置的例程。
想法是,基础架构应像其他任何软件一样对待,因为它应该灵活地进行频繁的更改和改进。 最常见的实现是用代码编写服务器,云实例,管道或”在此处插入基础结构组件”的定义,而不是通过用户界面进行配置,并且所有更改都在代码中实现,然后自动应用于 组件,只要它通过了各种检查(例如验证)。
由于资源的定义是代码,因此使用此代码配置的基础结构还可以受益于各种有益的开发工具,例如版本控制,CI / CD或TDD。
基础架构即代码旨在实现以下结果:
· 由于公司需求的增长,基础架构不是未来变化的障碍或约束
· 基础架构更改无压力,并且与其他任何软件更改一样容易应用
· 冗余和例行任务的自动化扩展到团队/公司的基础架构部分
· 基础架构的用户能够自行进行更改并将其应用于基础架构
· 团队的基础架构方面,平均恢复时间下降了
作为代码地址挑战基础架构
服务器和配置不一致
随着越来越多的团队迁移到云中并使用虚拟机,团队拥有频繁增加的衍生服务器的能力和可能性正在增加。 但是,这也意味着使所有这些机器保持最新状态并相互保持一致的挑战越来越频繁地出现。 如果机器开始彼此区分,则可能导致仅在某些机器上可运行各种程序或脚本。
想象一下,将更新部署到可以在一台服务器上运行而不能在另一台服务器上运行的软件中,这意味着用户必须”幸运”地登陆运行在该服务器上的服务器,以便在负载平衡的情况下拥有一个功能齐全的软件实例。 模式。
雪花机
雪花被认为是完全独特的,因为没有两个雪花是相同的,因为单个雪花是不可复制的,在软件机器上也可能发生同一件事。
许多系统管理员试图通过手动检查服务器来纠正不一致的服务器配置。 这样的结果是专门为解决特定问题而更新的服务器,并且没有更新历史记录。 (是的,有时在云的情况下仍然存在在线历史记录,但是如果用户在解决问题之前单击了100次,则历史记录也无济于事)。 唯一了解该服务器已完成操作的人是更新服务器的人。 然后,”魔术”是某些事物按预期运行的唯一原因,而当某些事物不起作用时,则不容易解释。
通常这不是故意发生的,但我们是人类,人类会犯错误,例如更新服务器1、2、3和4,但不知何故忘记了5 服务器。
“不要碰那个”
更改服务器并最终使其按需运行并运行软件后,最终结果几乎像一副纸牌屋。 可以,但是很脆弱。 因此,”请勿触摸”。
通常,任何进一步的更新或更改都不愿意进行,并且自动化变得使管理员有些担心,因为他们不确定更改是否会导致服务器正常运行。
基础架构即代码原则
单击按钮即可复制系统
如果已经通过代码配置了基础架构,而不是通过诸如Amazon Web Services或Jenkins之类的UI进行了点击,那么重现创建步骤就很简单了。 所有更改均已记录在案,没有任何步骤会被遗忘。
当执行诸如从数据中心迁移到云甚至从一个云提供者迁移到另一种云提供者之类的操作时,同一件事可能会很有用,因为创建资源的过程很容易重复。
一次性机器
由于基础结构配置步骤可以通过编程方式复制,因此您不必担心机器损坏或需要更换的长期后果。
云的主要好处之一就是所谓的”动态基础架构”,它是可以快速移动,更新,创建,替换,调整大小甚至删除资源的事实。 当您不必担心删除资源时可能丢失所需的设置以及潜在的未知设置时,可以充分利用动态基础结构必须提供的好处。
一致性和适应变化
如果通过代码而非UI来配置资源,则在更新和运行代码时,使用代码创建的所有资源也将被更新。
这意味着所有供应的资源(例如服务器)将保持一致,并且基本上是彼此的精确副本。 由于我们无法轻易预测随着系统的增长和变化基础架构需求将如何变化,因此在很大程度上可以快速,频繁地更改我们的系统是一种积极的情况。
使用基础结构作为代码,每个小的更改都可以以持续集成的方式直接应用,从而通过”经常进行小的更改”的口 来提高系统的弹性。
如何开始
定义文件
一个很好的工具是Terraform。
Terraform允许您使用HCL(Hashicorp配置语言)来配置和管理基础结构资源。 使用各种提供程序,您可以像在UI中使用关键字和变量那样配置资源。 运行代码时,将以编程方式供应代码中定义的资源。
关于Terraform的一个很棒的部分是,它允许将已经存在的资源导入代码中。
这是如何在Microsoft Azure中配置基本Linux虚拟机并将其分配给虚拟 络的示例。
版本控制
一旦用代码定义了资源,您的基础架构也可以从版本控制系统提供的优势中受益。
这还提供了一个可见的更改日志,所有用户都可以轻松查看已更改的内容。 对存储库的新推送还可以触发管道构建或其他操作,从而为基础架构中的CI / CD提供了机会
并且不要忘记:与所有代码一样,进行小的更改而不是进行大的更改具有很多好处。 较小的更改更易于测试和调试,并且更容易修复。 在基础架构中进行较小的更改也没有什么不同。
出色的基础代码工具
terraform
如上所述,terraform是用于为各种基础结构资源编写,管理和部署配置文件的工具。 该 站将其描述为:
” Terraform是一种用于安全高效地构建,更改和版本化基础结构的工具。 Terraform可以管理现有和流行的服务提供商以及定制的内部解决方案。
配置文件向Terraform描述了运行单个应用程序或整个数据中心所需的组件。 Terraform生成执行计划,以描述达到预期状态所需执行的操作,然后执行该计划以构建描述的基础结构。 随着配置的更改,Terraform能够确定更改的内容并创建可以应用的增量执行计划。”
Packer
Packer也是Hashicorp的工具,它允许快速自动创建机器映像。 过去创建虚拟机映像通常是通过创建虚拟机,手动配置(即安装所需的软件包和依赖项)然后复制其状态来完成的。 现在可以在单个位于中央的文件中定义该映像,并通过打包程序进行构建。 它甚至可以使用Chef和Puppet之类的工具将内容安装到图像上。
Concourse
具有用户界面的构建管道,用户只能在其中查看状态和日志。 整个管道必须通过配置文件进行配置。 我认为,它是市场上最酷的管道工具之一,并且是开源的。
有关基础结构作为代码的更多信息,我强烈建议您使用以下链接:
· https://www.hashicorp.com/resources/what-is-infrastructure-as-code-Hashicorp
· https://docs.microsoft.com/zh-CN/azure/devops/learn/what-is-infrastructure-as-code-Microsoft
· https://www.thoughtworks.com/de/insights/blog/infrastructure-code-reason-smile — Thoughtworks
我的有关现代软件开发实践的系列文章中的其他文章可以在这里找到
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!