阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

关于不可变架构以及为什么需要不可变架构

  • 2016-01-06
  • 本文字数:2298 字

    阅读完需:约 8 分钟

2013 年 Chad Fowler 在博客中提出了“不可变架构”的概念。不可变架构(II)能够通过自动化和成功的编程模式为应用程序提供稳定性、高效性和保真度。虽然目前为止还不存在严格定义和标准化的不可变架构,但是基本的想法是使用不可变的编程概念来创建和操作你的架构:一旦实例化了一些东西,就永远不改变它。取而代之的是,你可以通过替换另一个实例来达到改变行为的目的。不可变架构需要你的运行时环境全面自动化。只有这样,计算环境才能拥有一个 API 来全方位地配置和监控它。因此,不可变架构只有在真正的云环境中才有可能完全实现。当然,也可以部分实现不可变架构来获取一些好处,但只有彻底地实现它才有可能获取真正的效率和弹性。

假设我们有一个应用。为了生产交付物,我们需要从源码编译。这就涉及了编译源码、处理和复制资源和其它的一些步骤。最终产生的可交付应用是:

  • 单一不可变单元
  • 编译一次并存储在仓库中
  • 每次改变后通过持续集成系统重新生成

当然应用不会直接运行在硅或者钢铁之上,通常服务器会有 OS Kernel、Libraries、Runtime 和 App Server 这些层。即使是最简单的项目,应用都需要运行在多台机器上,它们被组织成不同的环境,例如开发环境、测试环境和生产环境等等。需要将相同的应用部署到不同的机器上。通常需要系统管理员确保所有的机器都处于相同的状态。接着所有的修改、补丁、升级需要在所有的机器中进行。随着时间的推移,很难再确保所有的机器处于相同的状态,同时越来越容易出错。这就是传统的可变架构中经常出现的问题。这是我们有了不可变架构,它将整个机器环境打包成一个单一的不可变单元,而不是传统方式仅仅打包应用。这个单元包含了之前所说的整个环境栈和应用所有的修改、补丁和升级,这就解决了前面的问题。

手工架构的缺陷

从历史上看,我们认为机器的正常运行和维护是可取的,因为所有的服务和应用都与它们的健康息息相关。在数据中心,由于硬件非常的昂贵,随着时间的推移,我们需要小心翼翼地维护每个单独的服务器来保护我们的投资。从云计算的概念考虑,这显然是一个过时的观点,我们应该放弃它以创造更具弹性、更简单和更安全的服务与应用。种种原因表明,传统长寿的由手工维持的基础设施已经不足以运行现代在云端的分布式服务:

  • 增加操作复杂性。分布式服务体系结构的兴起以及使用了动态弹性导致了需要追踪监控更多东西。在成百数千个实例中使用可变的维护方法来更新和补丁配置是非常困难的,当然也是容易出错和需要耗费一定的时间。
  • 部署慢,易出错。当基础设施是由来自可变维护方法(无论是通过脚本或配置管理工具)产生的雪花组件时,会有更过出错的可能。偏离了一个从源直接控制的过程,意味着准确地知道你的基础设施的状态是不可能的。由于基础设施以不可预测的方式在运行和时间浪费在了追逐配置漂移与调试运行时,保真度就丢失了。
  • 识别错误和威胁,以减轻伤害。长时间运行和可变的系统依赖于识别出错误和威胁来防止损害。现在我们知道,近日高规格的公告和企业公布的损害都已经证明,这些是徒劳的。采用不可变架构和全自动重新生成计算资源,许多错误和威胁,不管是否能被检测到,都可以减轻他们的损害。
  • 消防演习。手工基础设施允许我们以走捷径的方式来自动化,但它会以意想不到的方式来咬我们,例如当一个云提供商重启相关示例来进行更新或者打补丁。如果我们手动简历和维护我们的基础设施,而不是常规的不可变架构自动化,这些事件就会成为消防演习。

不可变架构的优点

不可变架构与自然界如可保持先进的生物系统有诸多相似之处。保真度在人体内的主要机制是恒定的破坏和更换子组件。它强调了免疫系统,它通过破坏细胞来维持健康。它强调了增长系统,它允许不同的子系统随着时间的推移通过破坏和更换而逐渐成熟。人类个体保持了自我和意图感,而底层组件都在不停更换。使用不可变架构的系统管理并没有什么不同。

如果你的应用能够恰当使用并且完全自动化部署和恢复方法,不可变架构带来的好处将会是多方面的:

  • 简化操作。当使用完全自动化部署方式时,你可以使用新版本的组件替换掉旧的来确保你的系统永远保持在最初的良好状态。由于不需要追踪可变维护方法中出现的改变,维护成百上千个实例将会非常简单。
  • 持续部署,极少失败。有了不可变架构,你能够准确知道什么正在运行和它将怎样表现,在生产环境部署升级将是常规的和持续的,同时极少会发生故障。所有的变化都是通过源码控制和持续集成过程追踪的。
  • 减少错误和威胁。服务是建立在一个复杂的硬件和软件的堆栈之上,并且随着时间的推移,事情会出错。通过自动化替换,而不是维护实例,事实上我们将会常规地频繁重新生成实例。这就减少了配置漂移、脆弱性的表面和保持服务水平协议付出的努力水平。
  • 云重启?没问题。有了不可变架构,你就能够知道正在运行的东西,同时你的服务也就拥有了自动恢复方法,云重启正在运行的实例将会在最小的关机时间下被小心处理。

我们必须非常努力地工作来保持一些东西,当这些东西是一个架子上的物理盒子,由于我们手动配置硬件,这是必要的工作。但通过逻辑隔离计算实例可以通过 API 调用在有效率的无限的云中实例化它们,“维护盒子”是智力的枷锁。它将我们的注意力和精力捆绑在错误的东西上。将你的注意力从他们身上移开就能够使你把重点放在你的应用程序的成功身上,而不是被高维护成本和采用新模式的难度不断地拉下来。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016-01-06 18:003274
用户头像

发布了 32 篇内容, 共 18.5 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

耗时15天,我把“大厂面试指南”进行了重新梳理,V2.0版已上线

Java你猿哥

Java 数据库 计算机 java面试 java基础

浪潮信息 KOS 助力企业核心业务完成 CentOS 迁移替换,性能提升 10%|龙蜥案例

OpenAnolis小助手

操作系统 开源社区 CentOS迁移 浪潮信息 龙蜥案例

华为云网站安全解决方案:让企业上云后无忧开展网站业务

YG科技

外译笔记 | 比尔盖茨:AI与智能手机和互联网一样具有革命性

京东科技开发者

AI 京东云 企业号 5 月 PK 榜

华为云网站安全解决方案助力企业腾“云”驾“务”

YG科技

京东APP百亿级商品与车关系数据检索实践 | 京东云技术团队

京东科技开发者

数据库 京东云 企业号 5 月 PK 榜

多位P8大佬联合打造的Java面试八股文,堪称《Java驾考宝典》

Java你猿哥

Java MySQL redis spring 多线程

Android App开发超实用实例 | ​Broadcast

TiAmo

broadcast broadcastreceiver Android APP

全网好评!程序员面试必备的Java八股文,适合所有的Java求职者!

Java你猿哥

Java Spring Boot 多线程 java基础 Java八股文

GitHub最新爆火,2023年最新版互联网大厂Java八股文合集PDF版出炉

开心学Java

Java 面试 Java八股文

什么是人工智能领域的过拟合和欠拟合

Jerry Wang

人工智能 机器学习 深度学习 强化学习 三周年连更

AI系统伦理道德风险之可信任度验证

陈磊@Criss

AI 伦理道德

mosn基于延迟负载均衡算法——走得更快,期待走得更稳 | 京东云技术团队

京东科技开发者

负载均衡 京东云 企业号 5 月 PK 榜

kafka高性能设计之内存池

Java你猿哥

Java kafka ssm 架构师 内存池

Spring Data JPA:轻松实现数据持久化

Java你猿哥

Java spring ssm spring data

玩转服务器之Java Web篇:手把手教你搭建Java Web环境 | 京东云技术团队

京东科技开发者

Java 云服务器 京东云 企业号 5 月 PK 榜

惊艳的数据可视化案例 让可视化设计灵感迸发

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 前端数据可视化 数据可视化设计

京东小程序折叠屏适配探索 | 京东云技术团队

京东科技开发者

京东云 企业号 5 月 PK 榜 京东小程序

极光笔记 | 极光推出“运营增长”解决方案,开启企业增长新引擎

极光JIGUANG

营销 运营 用户运营

RabbitMQ - 1消息队列中间件AMQP协议、和主要角色

Java你猿哥

Java ssm AMQP Rabbit MQ

获得清晰、无噪点的图像:Topaz Photo AI 激活电脑版

真大的脸盆

Mac Mac 软件 图像降噪 图像噪点处理

昇腾实战丨DVPP媒体数据处理视频解码问题案例

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 5 月 PK 榜

架构师必备!阿里P8耗时6个月手码架构师进阶笔记真的香

Java你猿哥

Java 架构 ssm 架构师

为什么老有人想让我们“程序员”失业? | 社区征文

坚果

三周年征文

守护企业网站安全!选择华为云网站安全方案更准

YG科技

几种常见的Python数据结构

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

优雅!用了这两款插件,我成了整个公司代码写得最规范的码农

AI乔治

Java 架构 面试 IDEA java代码规范

All in AI,现在开始算不算太晚?

Baihai IDP

人工智能 AI 企业号 5 月 PK 榜 人工智能浪潮

华为云网站安全解决方案一站式护航

YG科技

Spring Boot:MyBatis分页

Java你猿哥

Java spring Spring Boot mybatis ssm

当Serverless遇到Regionless:现状与挑战

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

关于不可变架构以及为什么需要不可变架构_架构_百占辉_InfoQ精选文章