驴Reacciona liderando el movimiento Infraestructura como c贸digo?

驴Qu茅 es “Infrastructure as Code”? Si alguien comprueba un mont贸n de archivos YAML en un repositorio Git, 驴se convierten de repente en c贸digo? Eso me parece m谩s bien “Infrastructure as Files”. Supongo que eso es mejor que la infraestructura como una pandilla de scripts de shell y algunos comandos ejecutados a mano en medio de la noche en una neblina alimentada con caf茅, pero est谩 muy lejos del c贸digo. 驴Qu茅 tal un sistema para definir la infraestructura que realmente es como el c贸digo?

驴Qu茅 tal un sistema para definir la infraestructura que realmente es como el c贸digo?

El c贸digo real — c贸digo bien escrito — utiliza conceptos que est谩n en gran medida ausentes en la infraestructura actual como tecnolog铆as de c贸digo. Estos conceptos son la abstracci贸n, la modularidad, la componibilidad y la reutilizaci贸n. En c贸digo, puede importar una biblioteca (reutilizable) y usar su funcionalidad para construir su propia biblioteca (componibilidad). Adem谩s, no es necesario conocer la implementaci贸n de la librer铆a para utilizarla (abstracci贸n). Incluso se puede dividir el esfuerzo de codificaci贸n entre diferentes equipos acordando una interfaz (modularidad) Si realmente tuvi茅ramos Infraestructura como C贸digo, no ver铆amos cada

de despliegue con sus propias y complejas implementaciones de despliegue. Pero hoy, cada uno rueda lo suyo. Uso de AWS Fargate? 隆Genial! Tiene un mecanismo de despliegue verde-azul incorporado. 驴Quieres usar la misma l贸gica para hacer algo azul-verde que no est茅 usando Fargate? L谩stima, con la infraestructura adecuada como c贸digo, deber铆a tener un componente abstracto, reutilizable, que sepa c贸mo desplegar cualquier cosa que cumpla con una determinada interfaz. Y entonces deber铆a ser capaz de instanciar ese componente azul-verde, y especificar lo que quiere que sea azul-verde (KubernetesPods, AWS EC2 Instances, etc.). Al igual que en el c贸digo real, nos propusimos abordar este problema de frente creando un c贸digo abierto

que le permite especificar toda la arquitectura de su aplicaci贸n con

Componentes de biblioteca reutilizables, a la vez que se facilita la costura

componentes personalizados cuando los necesite. Quer铆amos que estas librer铆as fueran modulares, componibles y reutilizables.

Quer铆amos que todo el mundo pudiera contribuir con componentes para que usted pueda

coser los mejores junto con los tuyos para crear tu propio y 煤nico

arquitectura. A este sistema lo llamamos Adapt, que es esencialmente ReactJS, pero para la infraestructura, 驴por qu茅 usar una tecnolog铆a web front-end? Porque los requisitos para un buen sistema de Infraestructura como C贸digo se parecen mucho a los de un buen front-end:

  • Una especificaci贸n declarativa de lo que se debe instanciar. (React apps use un DOM.)
  • Una sintaxis declarativa cuando sea posible. (Reacciona usando JSX.)
  • C贸digo imperativo para coser fragmentos declarativos. (React permite que JavaScript re煤na fragmentos de JSX.)
  • Especificaci贸n de actualizaciones de infraestructura basadas en el estado, como la implementaci贸n azul-verde o la conmutaci贸n por error. (React fue construido para hacer esto f谩cil.)
  • Componentes que pueden encapsular estas actualizaciones basadas en el estado. (Reaccione los ganchos y deje que los componentes hagan exactamente esto.)
  • Componentes que son f谩ciles de escribir, f谩ciles de usar y de componer. (El objetivo de los componentes de React.)
  • Un robusto sistema modular para la distribuci贸n y reutilizaci贸n de componentes.
    >
    (React est谩 basado en JavaScript que tiene un rico ecosistema de m贸dulos.)
  • Una 煤nica especificaci贸n que puede funcionar desde el desarrollo hasta la producci贸n. (Adaptar tiene alguna tecnolog铆a nueva para este.)

Echemos un vistazo r谩pido a c贸mo funcionan todas estas cosas en Adapt (o puede empezar, no se requiere experiencia en Reacci贸n).

Adaptar

Todas las especificaciones de infraestructura de Adapt son programas JavaScript, al igual que React. (O programas TypeScript si lo prefiere.) Esto resuelve todo tipo de problemas complicados, como:

  • 驴C贸mo se define un m贸dulo?
  • 驴C贸mo se versiona el m贸dulo?
  • 驴C贸mo se distribuye el m贸dulo?

Adem谩s, proporciona toda la potencia de un lenguaje de programaci贸n completo en sus especificaciones, por lo que puede hacer cosas como crear s贸lo infraestructura basada en ciertas condiciones, interactuar f谩cilmente con APIs y servicios externos, o casi cualquier cosa que se le ocurra. La ejecuci贸n del programa JavaScript da como resultado un DOM virtual, donde cada elemento en el DOM final representa una parte de la infraestructura general. Por ejemplo, una aplicaci贸n b谩sica de Node.js que se conecta a una base de datos de Postgres tendr铆a el siguiente aspecto: Al igual que en React, la funci贸n App es un componente. Su valor de retorno es un conjunto de elementos que representan su infraestructura, que, en este ejemplo, se encuentra en un nivel bastante alto de abstracci贸n. Aqu铆, todos los detalles de c贸mo se construye e implementa el servicio Node.js est谩n ocultos en el componente

. Esta abstracci贸n permite una especificaci贸n bastante simple, pero potente, de la infraestructura y del comportamiento operativo. Por ejemplo, el componente 
 podr铆a ser muy simple, como este: Este componente construir谩 localmente la aplicaci贸n Node.js a partir del c贸digo fuente en una imagen Docker local (a trav茅s del componente 
) y ejecutar谩 esa imagen en un contenedor local. Aqu铆, 
 es un elemento primitivo cuyo comportamiento est谩 definido por un plugin. Esto es como el comportamiento de los elementos primitivos 
 o 
 son determinados por el navegador. Debido a que todos los comportamientos de los componentes primitivos est谩n definidos por plugins, Adapt puede ser extendido para trabajar con cualquier infraestructura o servicio de aplicaci贸n que su c贸digo necesite.
Debido a que todos los comportamientos de los componentes primitivos est谩n definidos por plugins, Adapt puede ser extendido para trabajar con cualquier infraestructura o servicio de aplicaci贸n que su c贸digo necesite.
Afortunadamente, no hay necesidad de escribir un componente
 ya que la librer铆a Adapt cloud proporciona uno, pero como puede ver, no es demasiado dif铆cil construir una versi贸n personalizada si es necesario.

Estado y reconstrucci贸n

Si est谩 familiarizado con React, sabe que React es mucho m谩s que una sintaxis inteligente de tipo HTML para crear una p谩gina web. De hecho, la parte m谩s poderosa de React es su modelo de estado y c贸mo maneja el re-env铆o de una p谩gina web cuando el estado cambia. Adapt tiene la misma capacidad, permiti茅ndole alterar la infraestructura en respuesta a cambios de estado, desencadenados por cambios en el entorno externo, como un aumento de la carga del servidor, una interrupci贸n de zona o un empuje a un repositorio GitHub. Por ejemplo, en el simple componente
 de arriba, realmente queremos esperar a que el componente 
 est茅 listo antes de desplegar el componente. Al igual que con React, podemos usar el gancho 
useState

de la siguiente manera: Por supuesto, esta es una operaci贸n muy com煤n, Adapt ya proporciona un componente

 para hacer esto: El componente

 incluso se ocupa del delicado caso en el que queremos que el

 siga ejecutando el contenedor viejo hasta que el nuevo est茅 listo, junto con algunas otras optimizaciones. Lo importante aqu铆 es c贸mo podemos abstraer secuencias complejas y desplegar el comportamiento usando un componente. Adem谩s,

 puede ocuparse del despliegue y las actualizaciones de cualquier componente que cumpla con algunos requisitos b谩sicos de la interfaz. Esto significa que toda la l贸gica en torno a las implementaciones y actualizaciones secuenciales son reutilizables y, a medida que Adapt evoluciona, podr谩 actualizar el estado bas谩ndose en observaciones a largo plazo. Por ejemplo, podr铆a habilitar din谩micamente una zona de disponibilidad de la copia de seguridad si la principal ha fallado. Tambi茅n podr铆a crear componentes que encapsulen funciones complejas, como la implementaci贸n de color azul-verde, actualizando peri贸dicamente el estado que controla la cantidad de color azul que tiene frente al verde: Incluso podr铆a supervisar los datos de otras aplicaciones. Por ejemplo, el componente

 podr铆a esperar la aprobaci贸n manual de una aplicaci贸n de revisi贸n de c贸digo antes de continuar implementando m谩s del 5% de los sistemas con c贸digo nuevo. por supuesto, toda esta funcionalidad y complejidad estar铆a disponible en un componente

 de una biblioteca, muy similar a Sequence en el ejemplo anterior, por lo que no tendr铆a que implementar caracter铆sticas complejas usted mismo.

Pero espera, hay m谩s....

Creemos que la combinaci贸n de especificaciones sencillas, componibles y declarativas, junto con la capacidad de los despliegues para reaccionar din谩micamente a su entorno, ya es suficiente para que Adapt sea emocionante y sustancialmente diferente de otras soluciones. Adapt le permite crear una 煤nica especificaci贸n de arquitectura de aplicaci贸n y, a continuaci贸n, utilizar hojas de estilo para implementar esa arquitectura utilizando diferentes componentes subyacentes para cada uno de sus entornos. Por ejemplo, en su hoja de estilo de desarrollo, puede reemplazar

 en el ejemplo anterior con un componente

 que inicie un contenedor Docker y precargue algunos datos de prueba. Su hoja de estilo de producto la reemplaza con un componente

 que apunta a una base de datos de producci贸n que se gestiona fuera de Adapt. En una aplicaci贸n m谩s compleja, puede incluso cambiar el estilo en una versi贸n personalizada del componente

 de Adapt, que normalmente s贸lo se despliega en un contenedor docker, con uno que construye la aplicaci贸n React, la empuja a S3 y utiliza el frente de nube AWS como una CDN.

En una aplicaci贸n m谩s compleja, podr铆a incluso cambiar el estilo de una versi贸n personalizada del componente de Adapt que normalmente se despliega en un contenedor de docker, con una que construye la aplicaci贸n React, la empuja a S3 y utiliza el frente de nube AWS como una CDN.

Por supuesto, Adapt tambi茅n se ocupa de todos los problemas t铆picos que se esperan de un sistema de implementaci贸n, como mantener un registro del historial y estado de cada implementaci贸n, registros de implementaci贸n y, a medida que pasa el tiempo, mucho m谩s. De esta forma, puede centrarse en la entrega de su aplicaci贸n, no en la gesti贸n de la infraestructura.

Int茅ntalo!

Si quieres probar Adapt, dir铆gete a adaptjs.org. No te preocupes, no necesitas saber React para empezar. Hay ejemplos y una gu铆a de introducci贸n que lo pondr谩 en marcha con su primera aplicaci贸n en menos de 5 minutos.

Etiquetas

ReactReactjsDesarrollosJavascriptNodejsDesarrollo de softwareProgramaci贸nCodificaci贸nContinuar la discusi贸n