首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是不可变基础设施

什么是不可变基础设施

作者头像
大漠天涯
修改于 2024-04-02 02:42:28
修改于 2024-04-02 02:42:28
3030
举报

介绍

在传统的可变服务器基础设施中,服务器会不断更新和修改。使用这类基础设施的工程师和管理员可以SSH到他们的服务器,手动升级或降级软件包版本,逐个服务器调整配置文件,并直接将新代码部署到现有服务器上。换句话说,这些服务器是可变的;它们可以在创建后进行更改。由可变服务器组成的基础设施本身可以称为可变的、传统的或手工的。

不可变基础设施是另一种基础设施模式,其中服务器在部署后永远不会被修改。如果需要以任何方式更新、修复或修改某些内容,就先对公共镜像进行修改,然后用镜像构建新服务器来替换旧服务器。经过验证后,新服务器投入使用,旧的服务器就会下掉。

不可变基础设施的好处是在基础设施中有更多的一致性和可靠性,以及更简单、更可预测的部署过程。它可以缓解或完全防止可变基础设施中常见的问题,如配置漂移(configuration drift)和雪花服务器(snowflake servers)。然而,想要高效地使用不可变基础设施,通常需要包括全面的自动化部署、云计算环境中的快速服务器配置,以及处理有状态数据或临时数据(如日志)的解决方案。

本文的其余部分将:

解释可变基础设施和不可变基础设施在概念和实践上的区别

结合具体场景介绍使用不可变基础设施的优点

给出不可变基础设施的实现细节和必要组件的概述

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

可变基础设施和不可变基础设施之间最根本的区别在于它们的中心策略:前者的组件被设计为在部署后可以更改;后者的组成部分被设计成保持不变,并最终被替换。本文主要讨论作为服务器的那些组件,但是还有其他实现不可变基础设施的方法,比如使用容器,它们适用于相同的高层级概念。

更深入地讲,基于服务器的可变基础设施和不可变基础设施在实践上和概念上都存在差异。

从概念上讲,这两种基础设施在如何处理服务器(例如创建、维护、更新、销毁)方面差异很大。这通常可以用“宠物 vs 牛”的比喻来说明。

实际上,可变基础设施是一个较早出现的基础设施模式;而虚拟化和云计算等核心技术后来才出现,这些核心技术使不可变基础设施成为可能。了解这段历史有助于了解两者之间的概念差异。

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

实践上的差异:拥抱云技术

在虚拟化和云计算成为可能和广泛使用之前,服务器基础设施是以物理服务器为中心的。创建这些物理服务器既昂贵又耗时;初始化设置可能需要数天或数周的时间,因为订购新硬件、配置机器、然后将其安装到一个colo数据中心(译者注:详细解释可参见Wiki)或类似的位置需要很长时间。

可变基础设施起源于此。因为更换服务器的成本非常高,所以最实际的做法是尽可能长时间地使用运行的服务器,而停机时间越短越好。这意味着需要对常规部署和更新进行大量适当的更改,但也需要在出现问题时进行特别的修复、调整和打补丁。频繁手动更改会使服务器变得难以复制,每个服务器都成为整个基础设施中唯一且脆弱的组件。

虚拟化和按需计算/云计算的出现代表了服务器架构的一个转折点。虚拟服务器更便宜,即使是大规模的,它们可以在几分钟内创建和销毁,而不是几天或几周。这使得新的部署工作流和服务器管理技术第一次成为可能,比如使用配置管理或云API以快速、编程和自动的方式提供新服务器。正是因为可以快速且低成本地创建新虚拟服务器,不变性原则才能够真正落地实践。

传统的可变基础设施最初是在这样的背景下发展的:物理服务器的使用决定了服务器管理过程中能够做到哪些事情,并随着技术的日益发展而持续开发。在部署后修改服务器的模式在现代基础设施中仍然很常见。相比之下,不可变的基础设施从一开始就依赖于基于虚拟化的技术来快速提供架构组件,比如云计算的虚拟服务器。

概念上的差异:宠物 vs 牛,雪花 vs 凤凰

云计算所带来的基本概念的变化是:服务器可以被认为是一次性的。考虑放弃和替换物理服务器是不切实际的,但是使用虚拟服务器,不仅是可能的,而且是简单和高效的。

传统的可变基础设施中的服务器是不可替代的、必须始终保持运行的独特系统。在这方面,它们就像宠物一样:独一无二,不可复制,手动维护。失去一个可能是毁灭性的。另一方面,不可变基础设施中的服务器是一次性的,易于使用自动化工具复制或扩展。在这种情况下,他们就像牛群:一个群体中没有一个个体是独特的或不可缺少的。

Randy Bias是第一个用宠物与牛的比喻来形容云计算的:

在过去的操作方式中,我们把服务器当作宠物,例如邮件服务器Bob。如果Bob倒下了,所有人都无法工作了。CEO收不到电子邮件,这就是世界末日。在新方式中,服务器被编号,就像一群牛。例如,www001到www100。当一个服务器故障了,它就会被下掉,然后换一个新的到线上。

另一种形容服务器之间区别的类比是使用雪花服务器(snowflake servers)和凤凰服务器(phoenix servers)的概念。

雪花服务器类似于宠物。它们是手工管理的服务器,经常更新和调整,从而形成独特的环境。凤凰服务器类似于牛。这些服务器总是从零开始构建,并且很容易通过自动化过程重新创建(或“浴火重生”)。

不可变基础设施几乎完全由牛或凤凰服务器组成,而可变的基础结构允许一些(或许多)宠物或雪花服务器。下一节将讨论两者的含义。

不可变基础设施的优点

要理解不可变基础设施的优点,有必要先了解可变基础设施的缺点。

可变基础设施中的服务器可能会遭受配置漂移,即未经记录的临时更改会导致服务器的配置彼此之间以及与审查、批准和最初部署的配置之间的差异越来越大。这些越来越像雪花的服务器很难复制和替换,这使得扩展和从故障中恢复变得困难。因为很难创建一个和生产环境相同的临时环境,所以遇到问题时也很难调试。

在多次手动修改之后,会慢慢忘记为什么服务器要设置不同的配置,因此更新或更改任何配置都可能产生意想不到的副作用。即使在最好的情况下,对现有系统进行更改也不能保证有效,这意味着依赖于此操作的部署有失败或将服务器置于未知状态的风险。

基于这一点,使用不可变基础设施的主要好处是部署的简单性、可靠性和一致性,这些特性会减少或消除许多常见的痛点和故障点。

易知的服务器状态和更少的部署失败

不可变基础设施中的所有部署都是通过使用镜像构建新服务器来执行的,这些镜像经过验证并且有版本控制。因此,这些部署不依赖于服务器以前的状态,因此不会出现故障,也不会出现仅完成部分部署。

在提供新服务器时,可以在投入使用之前对它们进行测试,从而将实际部署过程减少为仅进行一次更新,就能使新服务器可用,就像更新负载均衡器一样。换句话说,部署具有原子性:要么成功完成,要么没有任何改变。

这使得部署更加可靠,并确保始终知道基础设施中每个服务器的状态。此外,蓝绿部署或滚动发布的实现变得容易,这意味着没有停机时间。

没有配置漂移或雪花服务器

不可变基础设施中的所有配置更改都是通过以下两步实现:一是将更新后的镜像签入带有文档的版本控制中,二是用一个自动化的统一部署流程来根据该映像部署替换服务器。Shell对服务器的访问有时是完全受限的。

通过消除雪花服务器和配置漂移的风险,可以防止复杂或难以重现的设置。这还可以防止有人修改自己并不了解的生产服务器,这种高风险操作可能导致停机或意外行为。

一致的预发布环境和简单的水平扩缩容

因为所有服务器都使用相同的创建过程,所以不存在部署的特异情况。通过简化复制生产环境的工作,可以防止出现混乱或不一致的预发布环境,还可以通过无缝地向基础设施添加更多相同的服务器来简化水平扩缩容。

简单的回滚和恢复处理

使用版本控制来保存历史镜像也有助于处理生产问题。用于部署新镜像的相同过程也可以用于回滚到旧版本,从而易于处理停机问题并缩短恢复时间。

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

不可变基础设施在其实现细节上有一些要求和细微差别,特别是与传统的可变基础设施相比。

从技术上讲,只要简单地遵循不可变的关键原则,就可以实现独立于任何自动化、工具或软件设计原则的不可变基础设施。然而,为了在规模上切实可行,强烈建议使用以下组件(大致按优先顺序排列):

云计算环境的服务器,或其他虚拟化环境中的服务器(比如容器,尽管这改变了下面的一些其他要求)。这里的关键是拥有从自定义镜像快速创建的独立实例,以及通过API或类似工具对创建和销毁进行自动化管理。

完全自动化整个部署管道,理想情况下包括镜像创建后的验证过程。设置这种自动化会显著增加实现这种基础设施的前期成本,但这是一次性成本,可以很快摊销。

面向服务的体系结构,将您的基础设施分离为模块化的、逻辑上离散的单元,这些单元通过网络进行通信。这允许您充分利用云计算的产品,这些产品也是面向服务的(例如IaaSPaaS)。

一个无状态、易变的应用层,它包括不可变的服务器。这里的任何东西都可以在任何时候(易变的)迅速被销毁和重建,而不会丢失任何数据(无状态的)。

一个持久化数据层,包括:

集中式日志记录,包含关于服务器部署的额外细节,比如通过版本或Git提交SHA的镜像ID。因为在这个基础设施中服务器是一次性的(并且经常被销毁),所以即使在shell访问受到限制或服务器被销毁后,从外部存储日志和打点记录(metrics)也可以进行调试。

用于数据库和任何其他有状态或临时数据的外部数据存储,如DBaaS/云数据库和对象或块存储(云提供或自管理)。当服务器不稳定时,不能依赖本地存储,因此需要将数据存储在其他地方。

工程和运营团队致力于协作并致力于该方法的奉献精神。尽管最终产品非常简单,但在一个不可变基础设施中有许多可移动的部分,没有一个人会知道所有这些部分。此外,在这个基础设施中工作的一些方面可能是新的或超出人们的适应范围,比如调试或在没有shell访问的情况下执行一次性任务。

有许多不同的方法可以实现每个组件。根据个人偏好和熟悉程度,以及你想建立自己的基础设施,还是依赖付费服务,来选择一个组件。

CI/CD工具是实现部署管道自动化的好起点;Compose是DBaaS解决方案的一个选项;rsyslog和ELK是集中日志记录的流行选择;Netflix的Chaos Monkey随机杀死你的生产环境中的服务器,是你最终设置的真正考验。

总结

本文介绍了什么是不可变基础设施,它与老式的可变基础设施在概念和实践上的区别,使用它的优点,以及其实现的详细信息。

知道是否或者何时应该考虑迁移到不可变基础设施可能很困难,而且没有明确定义的判断标准。一种开始的方法是实现本文推荐的一些设计实践,比如配置管理,即使您仍然在一个很大程度上可变的环境中工作。这将使将来更容易过渡到不变性。

如果您有一个包含上述大多数组件的基础设施,并且发现自己遇到了扩缩容的问题,或者对部署过程的笨拙感到沮丧,那么现在可以开始评估如何使用不可变性改进基础设施。

不可变基础设施是一种理念,具体落地的技术非常依赖容器或虚拟机,以及分布式存储等配套设施。我们没有必要把它作为一种技术标准去强制执行,而应该结合现状,选择性地朝着这个方向不断优化。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「云计算」什么是不可变的基础设施?
在传统的可变服务器基础架构中,服务器会不断更新和修改。使用此类基础架构的工程师和管理员可以通过SSH连接到他们的服务器,手动升级或降级软件包,逐个服务器地调整配置文件,以及将新代码直接部署到现有服务器上。换句话说,这些服务器是可变的;它们可以在创建后进行更改。由可变服务器组成的基础设施本身可称为可变,传统或(贬低)手工艺。
架构师研究会
2018/10/23
1.2K0
「云计算」什么是不可变的基础设施?
为什么云基础设施应该是不可变的?
本文最初发布于 Stroobants 博客,经原作者授权由 InfoQ 中文站翻译并分享。
深度学习与Python
2021/12/31
6000
为什么云基础设施应该是不可变的?
使用 Packer、Ansible 和 Terraform 构建不可变的基础设施
在容器编排领域,Kubernetes 已成为事实上的标准,而容器镜像 (Docker Image) 作为容器技术栈中最关键的创新之一,极大的推动了企业内部 Devops 运动的进程。
青年夏日
2021/04/11
2.4K0
基础设施和环境管理
基础设施(infrastructure)代表了你所在组织中的所有环境,以及支持其运行的所有服务,如 DNS 服务器、防火墙、路由器、版本控制库、存储、监控应用、邮件服务器,等等。
新亮
2022/12/05
5390
为什么不可变的基础设施「译」
假设我们有一个应用程序。为了生成可交付成果,我们需要从源代码构建它。这包括编译源代码,处理和复制资源,以及可能的更多步骤。
后场技术
2020/09/03
6310
为什么不可变的基础设施「译」
【周一电台】2022年每个开发者必知的云原生概念以及趋势
云原生(Cloud Native),从字面上理解就是云计算和土著的意思——云计算上的原住民。
翊君
2022/03/15
5020
【周一电台】2022年每个开发者必知的云原生概念以及趋势
云计算基础设施集成与部署
云计算基础架构在传统IT基础架构的基础上,对计算、存储和网络三类底层物理资源进行了虚拟化实现和统一的整合管理,将物理硬件抽象为有机的、可灵活调度和扩展的资源池。
neal zhang
2020/07/15
3.8K0
云计算基础设施集成与部署
基础设施即代码:IaC简介
IaC:自动化您的IT,消除错误并更快扩展。学习Terraform和Ansible。拥抱当今基础设施的未来!
云云众生s
2025/01/11
3420
下一代超融合基础设施解锁混合云的潜力
超融合基础设施(HCI)通过提供一种打破计算和存储之间的传统孤岛的新方法而引起人们的关注。尽管越来越多的组织正在采用它,但大部分部署都是在数据中心的外围,或虚拟桌面基础设施(VDI)等应用中。但是,由于HCI进入第二阶段的应用,因为在未来一年云计算将会发生重大变化,这对于云计算行业说具有深远的意义。 初始的HCI产品主要针对那些寻求更简单,更具成本效益的希望替代传统企业存储的客户。HCI通过将存储数据平面和控制平面从传统存储控制器移动到管理程序来实现此目标。因此,人们现在可以通过将直接连接在同一行业标准的x
静一
2018/03/27
7520
如何控制云基础设施漂移
基础设施漂移不仅仅是技术上的小麻烦;它是一个普遍存在的问题,如果不加以控制,会危及整个组织。
云云众生s
2024/12/04
1600
如何控制云基础设施漂移
平台团队:自动化基础设施需求收集
通过使用自动化的资源规范来弥合开发和运维团队之间的差距,您可以创建一个更加和谐和高效的部署流程。
云云众生s
2024/07/22
1330
Uber 容器化 Apache Hadoop 基础设施的实践
随着 Uber 的业务持续增长,我们用了 5 年时间扩展 Apache Hadoop(本文中称为“Hadoop”),部署到了 21000 多台主机上,以支持多种分析和机器学习用例。我们组建了一支拥有多样化专业知识的团队来应对在裸金属服务器上运行 Hadoop 所面临的各种挑战,这些挑战包括:主机生命周期管理、部署和自动化,Hadoop 核心开发以及面向客户的门户。
深度学习与Python
2021/12/01
5340
Uber 容器化 Apache Hadoop 基础设施的实践
基础设施即代码的利与弊
基础设施即代码虽然解决了自动化、一致性和可扩展性等传统挑战,却也引入了新的复杂性问题。
云云众生s
2024/03/28
1610
容器:现代计算的基础设施
在现代的软件开发和部署中,“容器”已经成为一个非常流行的词汇。那么,究竟什么是容器呢?它们为什么会如此重要?本文将带你深入了解容器的基本概念、工作原理以及它们在开发和运维中的重要角色。
人不走空
2024/06/12
1770
基础设施即代码让混合多云管理更为复杂
对于任何一个力,都存在着一个与其大小相等方向相反的反作用力。这个物理学上的牛顿第三定律也同样适用于IaC:虽然这一服务是有优势的,但它也带来了一些问题。 本文是针对混合云和多个云管理使用基础设施即代码
静一
2018/03/26
9890
基础设施即代码(IaC):自动化基础设施管理的未来
随着云计算和大规模分布式系统的迅速发展,手动管理和配置基础设施的传统方式已逐渐跟不上快速迭代的步伐。于是,基础设施即代码(Infrastructure as Code,IaC)作为一种创新实践,成为现代运维管理的基础。IaC不仅提高了基础设施的配置速度,还提升了系统的一致性和可重复性。本文将深入讲解IaC的基本概念、核心优势和实现方法,并通过实例展示其在实际工作中的应用。
Echo_Wish
2024/10/27
8960
基础设施即代码(IaC):自动化基础设施管理的未来
Terraform:多云、混合云环境下实现基础设施即代码
将基础设施代码化,使用代码对硬件进行管理,在运维领域借用软件领域的最佳实践,将基础设施的运维纳入软件工程的范畴,最终整体改善软件开发和软件交付的过程。
yeedomliu
2024/01/24
1.6K0
Terraform:多云、混合云环境下实现基础设施即代码
超越高级基础设施即代码的应用案例
许多基础设施即代码的解决方案要求你明确地管理所谓的“状态”。这个状态是一个产物,用于跟踪你通过基础设施即代码定义的基础设施样式,以便可以轻松地将其与实际基础设施进行比较。这是实现差异和更新的方法。每个基础设施即代码工具都会存储这个基础设施状态,实际上它只是关于所有云资源、属性和依赖关系的元数据。然而,工具将其暴露给你的程度各不相同。
云云众生s
2024/03/28
1950
超越高级基础设施即代码的应用案例
基础设施即代码:你需要知道的一切
基础设施是软件开发过程的核心原则之一——它直接负责软件应用程序的稳定运行。这种基础设施的范围从服务器、负载平衡器、防火墙和数据库一直到复杂的容器集群。
陈哥聊测试
2022/05/13
9220
基础设施即代码:只是漂移管理还不够
作者 | Roxana Ciobanu 译者 | 平川 策划 | 丁晓昀 什么是配置漂移? 随着公司的发展,软件生产和交付系统往往会变得越来越复杂。随着而来也会发生配置上的经常变更。 在最理想的情况下,变更会以良好的方式进行全面跟踪。但是,我们的生产环境并不完美,比如其中的许多修改都没有记录。如果是无关紧要的修改,那么对系统的影响会很小。如果这些修改导致系统变得不稳定,那么就会出现所谓的“配置漂移”。 当新建并合并分支,以及将其他多个变更提交到主分支时产生某种冲突时,就会出现漂移。在小型团队中
深度学习与Python
2023/03/29
6320
基础设施即代码:只是漂移管理还不够
推荐阅读
相关推荐
「云计算」什么是不可变的基础设施?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档