React是领导基础架构的代码运动吗?

react

什么是“基础架构即代码”? 如果有人将一堆YAML文件检入Git存储库,它们会突然变成代码吗? 在我看来,这更像是“基础设施即文件”。 我认为这要比基础结构更好,因为它们是一群shell脚本和一些命令,这些命令在半夜里以咖啡为燃料,但是手工编写,但与代码相去甚远。 系统如何定义真正类似于代码的基础架构呢?

系统如何定义真正类似于代码的基础架构呢?

实际代码(编写良好的代码)所使用的概念在当今的基础架构即代码技术中基本上不存在。 这些概念是抽象,模块化,可组合性和可重用性。 在代码中,您可以导入一个库(可重用性)并使用其功能来构建自己的库(可组合性)。 而且,您不需要知道使用该库的实现(抽象)。 您甚至可以通过就接口(模块化)达成一致意见,在不同团队之间分配编码工作。

如果我们真的有基础设施即代码,我们将不会看到每一个
部署系统滚动其自己的复杂部署实现。 但是今天,每个人都自己滚动。 使用AWS Fargate吗? 大! 它具有内置的蓝绿色部署机制。是否要使用相同的逻辑来使未使用Fargate的事物蓝绿色? 太糟糕了!

使用适当的“基础结构即代码”,您应该有一个抽象的,可重用的组件,该组件知道如何蓝绿色部署满足特定接口的任何内容。 然后,您应该能够实例化该蓝绿色组件,并指定要蓝绿色的组件( Kubernetes Pods , AWS EC2实例等)。 就像您在真实代码中一样。

我们着手通过创建开源来解决这个问题
系统,您可以通过它指定整个应用程序体系结构
可重复使用的库组件,同时仍使缝合容易
在需要时将自定义组件组合在一起。 您知道,就像处理实际代码一样。

我们希望这些库是模块化的,可组合的和可重用的。
我们希望每个人都能够贡献力量,以便您可以
将最好的与自己的缝合在一起,以创建自己的独特之处
建筑。 我们希望它易于上手并且易于使用,但对于任务关键型应用程序仍然足够强大。

我们称此系统Adapt ,本质上是ReactJS ,但用于基础设施。

为什么要使用Web前端技术? 因为对良好的“基础结构即代码”系统的要求与对良好的前端框架的要求非常相似:

  • 关于实例化的说明性规范。 (反应式应用程序使用DOM 。)
  • 声明式语法(如果可能)。 (React使用JSX 。)
  • 命令性代码将声明性片段拼接在一起。 (React允许JavaScript汇编JSX代码段。)
  • 基于状态的基础结构更新的规范,例如蓝绿色部署或故障转移。 (React是为了简化此过程而创建的。)
  • 可以封装这些基于状态的更新的组件。 ( React钩子让组件可以做到这一点。)
  • 易于编写,易于使用且易于组成的组件。 (React组件的要点。)
  • 强大的模块系统,用于分发和重用组件。
    (React基于具有丰富模块生态系统的JavaScript。)
  • 从开发到生产都可以使用的单一规范。 (Adapt为此提供了一些新技术。)

让我们快速看一下所有这些事情如何在Adapt中工作(或者您可以开始使用 ,不需要React经验)。

适应

Adapt中的所有基础结构规范都是JavaScript程序,就像React一样。 (或者,如果愿意,可以使用TypeScript程序。)这可以解决所有其他复杂的问题,例如:

  • 您如何定义模块?
  • 您如何对模块进行版本控制?
  • 您如何分配模块?

此外,它在您的规范中提供了完整编程语言的全部功能,因此您可以执行诸如仅根据特定条件创建基础结构,轻松与外部API和服务进行交互或进行任何您可以梦想得到的事情。 您拥有JavaScript的全部功能以及整个NPM库。

JavaScript程序的执行产生一个虚拟DOM,最终DOM中的每个元素代表整个基础结构的一部分。 例如,连接到Postgres数据库的基本Node.js应用程序将如下所示:

就像在React中一样,功能App是一个组件。 它的返回值是代表您的基础结构的元素的集合,在此示例中,其处于相当高的抽象水平。 在这里,有关如何构建和部署Node.js服务的所有详细信息都隐藏在<NodeService>组件中。 与<Postgres>相同。

这种抽象允许对基础结构和操作行为进行相当简单但功能强大的规范。 例如, <NodeService>组件可能非常简单,如下所示:

该组件将从源代码本地构建Node.js应用程序到本地Docker映像(通过<LocalNodeImage>组件),然后在本地容器中运行该映像。 在这里, <docker.Container>是一个基本元素,其行为由插件定义。 这就像浏览器确定基本元素<div><p>的行为一样。 由于所有原始组件的行为均由插件定义,因此Adapt可以扩展为与代码所需的任何基础结构或应用程序服务一起使用。

由于所有原始组件的行为均由插件定义,因此Adapt可以扩展为与代码所需的任何基础结构或应用程序服务一起使用。

幸运的是,由于Adapt云库提供了一个<NodeService>组件,因此无需实际编写它,但是如您所见,如果需要的话,构建自定义版本并不难。

状态与重建

如果您熟悉React,那么您知道React不仅有一些类似于HTML的巧妙语法来汇编Web页面,还有很多其他功能。 实际上,React最强大的部分是其状态模型以及状态改变时如何处理网页的重新呈现。 Adapt具有相同的功能,允许它根据外部环境变化(例如服务器负载增加,区域中断或推送到GitHub存储库)触发的状态更改来更改基础结构。

例如,在上面简单的<NodeService>组件中,我们真的要等待<LocalNodeImage>组件准备就绪,然后再部署<docker.Container>。 为此,我们使用某种状态来跟踪<LocalNodeImage>何时准备好,并且只有在准备好之后,才渲染<docker.Container>元素。 就像React一样,我们可以像这样使用useState钩子:

当然,这是一个如此常见的操作,Adapt已经提供了<Sequence>组件来执行此操作:

<Sequence>组件甚至处理棘手的情况,我们希望<docker.Container>继续运行旧容器,直到新容器准备好为止,并进行其他一些优化。 这里重要的是我们如何抽象出复杂的序列并使用组件来推广行为。 此外, <Sequence>可以处理满足某些基本接口要求的任何组件的推出和更新。 这意味着围绕顺序部署和更新的所有逻辑都是可重用的。

随着Adapt的发展,您将能够基于长期运行的观察来更新状态。 例如,如果主分区出现故障,您可能能够动态启用备份可用性区域。

您还可以通过定期更新控制蓝色和绿色的状态来构建封装复杂功能的组件,例如蓝绿色部署:

您甚至可以监视来自其他应用程序的数据。 例如, <BlueGreen>组件可以等待代码审查应用程序的手动批准,然后继续使用新代码推出超过5%的系统。

当然,所有这些功能和复杂性都可以从库的<BlueGreen>组件中获得,就像上面示例中的Sequence一样,因此您不必自己实现复杂的功能。

但是等等,还有更多...

我们认为,结合简单,可组合的声明性规范以及部署对环境进行动态响应的能力已经足以使Adapt令人兴奋,并且与其他解决方案大不相同。 但是Adapt也可以解决其他部署难题。

Adapt使您可以创建一个应用程序体系结构规范,然后使用样式表为每个环境使用不同的基础组件来部署该体系结构。 例如,在开发人员样式表中,您可以用<TestPostgres>组件替换上例中的<Postgres> ,该组件启动Docker容器并预加载一些测试数据。 您的产品样式表将其替换为<PostgresProvider>组件,该组件指向在Adapt外部管理的生产数据库。 在更复杂的应用程序中,您甚至可以在Adapt版本的<ReactApp>组件的自定义版本中进行样式设置,该组件通常仅部署到一个Docker容器中,该容器可以构建React应用程序,将其推送到S3并使用AWS Cloud Front作为CDN 。

在更复杂的应用程序中,您甚至可以在Adapt的<ReactApp>组件的自定义版本中进行样式化,该组件通常仅部署到Docker容器中,并构建一个React应用程序,将其推送到S3并使用AWS Cloud Front作为CDN。

当然,Adapt还可以处理您希望部署系统处理的所有典型问题,例如跟踪每个部署的历史和状态,部署日志,以及随着时间的推移。

我们的目标是采取所有困难,重复和平凡的部署方式,并使它们变得容易……甚至很有趣。 这样,您可以专注于交付应用程序,而不是管理基础结构。

试试看!

如果您想尝试Adapt,请转到Adaptjs.org 。 不用担心,您不需要了解React即可上手。 这里有示例和入门指南 ,可让您在5分钟内启动并运行第一个应用程序。

From: https://hackernoon.com/react-for-infrastructure-n84n2dw7

以上是 React是领导基础架构的代码运动吗? 的全部内容, 来源链接: utcz.com/z/382663.html

回到顶部