什么是不可变基础设施?

介绍

在传统的可变服务器基础设施中,服务器不断更新和修改,使用这种基础设施工作的工程师和管理员可以 SSH 到他们的服务器中,手动升级或降级包,在服务器对服务器的基础上调整配置文件,并将新代码直接部署到现有的服务器上。

一个不可变的基础设施是另一个基础设施范式,服务器在部署后永远不会被更改. 如果需要更新,修复或以任何方式进行更改,则由一个共同的图像构建的新服务器将提供相应的更改,以取代旧的服务器。

不可变的基础设施的优点包括基础设施的更一致性和可靠性,以及更简单、更可预测的部署流程. 它可以减轻或完全防止在可变基础设施中常见的问题,如配置驱动和雪花服务器。

这篇文章的其余部分将:

  • 解释可变和不可变基础设施之间的概念和实际差异
  • 描述使用不可变基础设施的优势并定义复杂性
  • 提供高层次的实施细节和不可变基础设施所需的组件概述

可变和不可变基础设施的区别

可变和不可变的基础设施之间的最根本的区别在于它们的核心政策:前者组件的设计是为了在部署后进行更改;后者组件的设计是为了保持不变,最终被更换。

要深入了解,基于服务器的可变和不可变基础设施之间有实际和概念上的差异。

从概念上讲,这两种类型的基础设施在如何处理服务器(例如创建,维护,更新,破坏)的方法上大有不同。

实际上,可变基础设施是一个更古老的基础设施范式,它早于虚拟化和云计算等核心技术,使不可变的基础设施成为可能和实际的。

接下来的两个部分将更详细地讨论这些差异。

实际差异:拥抱云

在虚拟化和云计算成为可能和广泛可用之前,服务器基础设施围绕着物理服务器。这些物理服务器的创建是昂贵的和耗时的;初始安装可能需要几天或几周的时间,因为需要多长时间才能订购新硬件,配置机器,然后在colo(LINK0)或类似的位置安装它。

可变基础设施起源于这里. 由于更换服务器的成本如此之高,所以在尽可能短的停机时间下继续使用您运行的服务器是最实用的。 这意味着经常部署和更新,以及偶尔修复,调整和补丁的更改非常多,而经常手动更改的后果是服务器很难复制,使每个服务器成为整体基础设施的独特和脆弱组成部分。

虚拟服务器的出现(https://andsky.com/tech/tutorials/an-introduction-to-cloud-hosting)代表了服务器架构的转折点。虚拟服务器更便宜,甚至在规模上,并且可以在几分钟内创建和摧毁,而不是几天或几周。这使得新的部署工作流程和服务器管理技术首次成为可能,例如使用配置管理云API快速、程序和自动地提供新服务器。

传统的可变基础设施最初是在物理服务器的使用决定了其管理的可能性时开发的,并随着技术的改进而不断发展。部署后修改服务器的范式在现代基础设施中仍然很常见,相反,不变的基础设施从一开始就被设计为依赖于基于虚拟化的技术来快速提供架构组件,如云计算的虚拟服务器。

概念差异:宠物与牲畜,雪花与凤凰

云计算的根本概念变化是,服务器可以被认为是可一次性服务器,考虑取消和更换物理服务器是不切实际的,但在虚拟服务器中,这样做不仅可能,而且容易和高效。

传统的可变基础设施中的服务器是不可替代的,独特的系统,必须在任何时候都保持运行。以这种方式,它们就像宠物:一种类型,不可模仿,并倾向于用手。 失去一个可能是毁灭性的。

引用Randy Bias,谁首先应用了宠物与牲畜对云计算的模拟:

在做事的旧方式中,我们对待我们的服务器就像宠物一样,例如Bob邮件服务器。如果Bob下跌,那么所有人都在甲板上。首席执行官无法得到他的电子邮件,这是世界的尽头。

另一种类似的方式来说明服务器的处理方式之间的差异是雪花服务器和凤凰服务器的概念。

雪花服务器类似于宠物. 它们是手动管理的服务器,经常更新和调整,导致一个独特的环境。

不可变的基础设施几乎完全由牲畜或凤凰服务器构成,而可变的基础设施允许一些(或许多)宠物或雪花服务器。

不变基础设施的优点

要了解不变基础设施的优势,需要对不变基础设施的缺点进行背景化。

可变基础设施中的服务器可能会遭受配置驱动,即当未经证实的、即时的变化导致服务器的配置越来越不同,并且越来越不同于审查、批准和原先部署的配置,这些越来越像雪花的服务器很难复制和更换,这使得规模化和从问题中恢复等事情变得困难。

服务器的不同配置的重要性或必要性在许多手动修改后变得不清楚,因此更新或更改其中任何一个可能会产生意想不到的副作用. 即使在最好的情况下,对现有系统进行更改并不保证工作,这意味着依靠这样做的部署可能会失败或使服务器处于未知状态。

考虑到这一点,使用不变基础设施的主要好处是部署简单性,可靠性和一致性,所有这些都是最终减少或消除许多常见的疼痛点和失败点。

已知的良好服务器状态和更少的部署故障

不可变的基础设施中的所有部署都通过基于验证和版本控制的图像提供新服务器来执行,因此这些部署不取决于服务器的以前状态,因此不能因为它而失败 - 或仅部分完成。

当提供新的服务器时,可以在投入使用之前进行测试,从而将实际部署过程减少到一个更新以使新服务器可用,例如更新负载平衡器。

这使得部署更加可靠,并确保基础设施中的每个服务器的状态始终知晓,此外,这个过程使实施蓝绿部署(https://andsky.com/tech/tutorials/how-to-use-blue-green-deployments-to-release-software-safely)或滚动发布(https://en.wikipedia.org/wiki/Rolling_release)变得容易,这意味着没有停机时间。

没有配置驱动或雪花服务器

不可变的基础设施中的所有配置更改都是通过检查更新的图像到版本控制与文档,并使用一个自动,统一的部署过程来部署具有该图像的替换服务器来实现的。

这可以防止复杂或难以重复的设置,通过消除雪花服务器和配置浮动的风险,这还可以防止某人需要修改不太理解的生产服务器的情况,这会导致高风险的错误并导致停机或意外行为。

一致的舞台环境和轻松的水平扩展

由于所有服务器都使用相同的创建流程,因此没有部署边缘的情况,这会防止混乱或不一致的阶段环境,使重复生产环境变得微不足道,并通过无缝地允许您将更多相同的服务器添加到您的基础设施来简化 水平扩展

简单的回归和恢复过程

使用版本控制来保留图像历史也有助于处理生产问题. 用于部署新图像的相同过程还可用于滚回旧版本,增加了弹性并减少了处理停机时的恢复时间。

不可变的基础设施实施细节

不可变的基础设施在其实施细节中提出了一些要求和细节,特别是与传统可变基础设施相比。

从技术上讲,通过简单地遵循不可变的关键原则,实现独立于任何自动化、工具或软件设计原则的不可变的基础设施是可能的。

  • ** 云计算环境中的公务员**,或另一个虚拟化环境(类似集装箱,尽管这改变了下文中的一些其他要求。 这里的关键是拥有从自定义图像中快速供给的孤立实例,以及通过API或类似的创建和破坏的自动化管理. (_ ( )* ** 整个部署管道完全自动化**,最好是包括创建后图像验证。 建立这种自动化大大地增加了实施这种基础设施的先期成本,但这是一种一次性成本,可以迅速摊还。 (_ ( )* a ** [面向服务的架构] (https://en.wikipedia.org/wiki/Service-oriented_architecture) ,将您的基础设施分离成模块化,逻辑上离散的单元,通过网络进行通信. 这使您能够充分利用云计算提供的类似面向服务的(例如IaaS, PaaS). (- ) a ** [无音 (https://en.wikipedia.org/wiki/Service_statelessness_principle),可挥发性应用层*,包括您不可变的服务器. 这里的任何东西都可以在任何时间(挥发地)被迅速摧毁并被重建,而不会丢失任何数据(无状态地). () ( )* 一个持久数据层,包括: -** 中央化记录**,包含服务器部署的更多细节,比如通过一个版本的图像识别或Git承诺SHA. 因为服务器在这个基础设施中是可支配的(并经常被处理),所以外部存储日志和公制可以允许调试,即使 shell 访问受到限制,或者服务器被破坏后也是如此. -** 外部数据储存**,用于数据库和任何其他状态或电子数据,如DBaaS/云数据库对象或块存储(由云提供或自行管理)。 当服务器波动时不能依赖本地存储,所以需要将数据存储到其他地方. () ( )* ** 工程和行动小组致力于协作并致力于这一办法。 对于最终产品的所有简单性来说,一个不可改变的基础设施中有很多可移动的部件,没有人会知道这一切. 此外,在这种基础设施内工作的一些方面可能是新的,或者是在人们的舒适区之外,例如调试或者在没有外壳进入的情况下执行一次性任务。 ( (英语)

选择一个主要取决于个人偏好和熟悉,以及你想建立自己的基础设施比依靠付费服务多少。

CI/CD 工具可以是部署管道自动化的一个很好的起点; Compose是 DBaaS 解决方案的选项; rsyslogELK是集中登记的热门选择; Netflix 的混沌猴子,随机杀死您生产环境中的服务器,是您最终设置的真正试验。

结论

本文涵盖了什么是不可变基础设施,它与旧式可变基础设施之间的概念和实际差异,使用它的好处,以及其实施的细节。

知道是否或何时应该考虑转移到不可变的基础设施可能很困难,并且没有明确定义的切断或扭转点。 开始的一种方法是实施本文推荐的一些设计实践,例如配置管理,即使您仍然在大多变化的环境中工作,这将使未来更容易过渡到不可变性。

如果您拥有大多数上述组件的基础设施,并且发现自己正在遇到扩展问题,或者对部署过程的复杂性感到沮丧,这可能是开始评估不可变性如何改善基础设施的好时机。

您可以從幾家公司(包括 Codeship, Chef, KoddiFugue])中學習更多,他們已經寫過他們的不變基礎設施的實施。

Published At
Categories with 技术
comments powered by Disqus