paint-brush
La adopción de una arquitectura de microservicios para aplicaciones nativas de la nubepor@samsey
1,690 lecturas
1,690 lecturas

La adopción de una arquitectura de microservicios para aplicaciones nativas de la nube

por Donsamsey11m2023/12/19
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Estos desafíos pueden implicar lidiar con una mayor complejidad, administrar la latencia de la red de manera efectiva, manejar el descubrimiento de servicios de manera eficiente, abordar adecuadamente los problemas de administración de la configuración y garantizar que se implementen medidas de seguridad. En general, si bien los microservicios ofrecen beneficios, para las aplicaciones nativas es crucial abordar los desafíos asociados de manera efectiva para aprovechar todo su potencial.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Company Mentioned

Mention Thumbnail
featured image - La adopción de una arquitectura de microservicios para aplicaciones nativas de la nube
Donsamsey HackerNoon profile picture
0-item
1-item

En el mundo de la arquitectura de software, los microservicios son un estilo que involucra servicios independientes que trabajan juntos a través de interfaces bien definidas. Por otro lado, las aplicaciones nativas están diseñadas y desarrolladas específicamente para entornos de nube para aprovechar al máximo su escalabilidad, resiliencia y agilidad.


Cuando se trata de utilizar microservicios en aplicaciones, existen numerosas ventajas a considerar. Estos incluyen ciclos de desarrollo, procesos de prueba y depuración, flexibilidad y modularidad mejoradas, así como tolerancia a fallas y rendimiento mejorados. Sin embargo, es importante reconocer que este enfoque también conlleva desafíos.


Estos desafíos pueden implicar lidiar con una mayor complejidad, administrar la latencia de la red de manera efectiva, manejar el descubrimiento de servicios de manera eficiente, abordar adecuadamente los problemas de administración de la configuración y garantizar que se implementen medidas de seguridad.


En general, si bien los microservicios ofrecen beneficios, para las aplicaciones nativas es crucial abordar los desafíos asociados de manera efectiva para aprovechar todo su potencial.


Docker ha ganado popularidad como herramienta para desarrollar, ejecutar e implementar microservicios. Sirve como una plataforma que permite la creación y ejecución de contenedores que son entornos autónomos y que abarcan todos los componentes necesarios para ejecutar un servicio. Que incluye bibliotecas de códigos, dependencias y ajustes de configuración.


La mayor ventaja de Docker radica en su capacidad de empaquetar servicios en contenedores portátiles que se pueden implementar sin problemas en máquinas que soportan Docker, independientemente de sus sistemas operativos o infraestructura subyacente. Además, Docker ofrece una variedad de funciones y herramientas para gestionar el ciclo de vida de estos contenedores de forma eficaz.


Desde crearlos y ejecutarlos hasta detenerlos, reiniciarlos, eliminarlos o actualizarlos.

Existen ventajas al utilizar microservicios para aplicaciones nativas, que incluyen:

1. Ciclos acelerados de desarrollo e implementación: al dividir su aplicación en unidades manejables, los microservicios permiten el desarrollo, las pruebas y la implementación independientes y paralelos. Este enfoque simplificado reduce el tiempo y el esfuerzo necesarios para introducir funciones y actualizaciones. También facilita la adopción de prácticas de integración y entrega (CI/CD).


Además, los microservicios ayudan a mitigar los desafíos asociados con las aplicaciones, como los tiempos de compilación, las dependencias complejas y las implementaciones riesgosas.


2. Mayor escalabilidad: los microservicios ofrecen la ventaja de escalar su aplicación. Puede eliminar instancias de servicio según sea necesario sin interrumpir el resto de la aplicación. Esta flexibilidad ayuda a gestionar diferentes cargas de trabajo y optimizar la utilización de recursos. Además, los microservicios le permiten utilizar tecnologías y marcos para cada servicio, adaptándolos a los requisitos y preferencias.


3. Tolerancia a fallas y resiliencia mejoradas: los microservicios contribuyen a una aplicación disponible aislando fallas y minimizando su impacto. Si un servicio encuentra un problema, otros servicios pueden continuar funcionando normalmente mientras el servicio problemático se repara o reemplaza rápidamente.


Además, los microservicios facilitan la implementación de mecanismos de falla, como disyuntores, reintentos, tiempos de espera y respaldos. Estos patrones previenen fallas en cascada. Garantizar la degradación del rendimiento.


4. Elegir e incorporar tecnología se vuelve más sencillo: Los microservicios permiten la integración y compatibilidad entre su aplicación y diversos sistemas y servicios internos y externos. Lo logran mediante el uso de interfaces definidas y estandarizadas como las API.


Al aprovechar los microservicios, la comunicación es fluida entre los componentes, independientemente de las tecnologías o plataformas subyacentes en uso. Además, los microservicios le permiten aprovechar las tecnologías y servicios existentes y emergentes de los proveedores de la nube, incluidas funciones sin servidor, bases de datos, sistemas de mensajería y herramientas de análisis.

Existen dificultades que surgen al utilizar microservicios para aplicaciones nativas. Estos desafíos incluyen:

1. Mayor complejidad y carga de comunicación: la incorporación de microservicios a su aplicación agrega complejidad. Requiere gestionar y coordinar servicios en diferentes máquinas y redes. Esto implica abordar cuestiones como la latencia de la red, el ancho de banda, la confiabilidad y la seguridad.


Además, se deben implementar protocolos y mecanismos para tareas como el descubrimiento de servicios, el equilibrio de carga, el enrutamiento y la sincronización. Los servicios de monitoreo y resolución de problemas y sus interacciones también pueden ser una tarea desafiante y que requiere mucho tiempo.


2. Dificultades con las pruebas y la depuración: los microservicios hacen que las pruebas y la depuración sean más desafiantes, ya que es necesario probar y depurar no solo cada servicio individualmente sino todo el sistema como una unidad cohesiva.


Debe asegurarse de que sus servicios sean compatibles y coherentes entre sí y que puedan manejar diversos escenarios y casos extremos. También necesita simular y replicar el entorno y las condiciones reales de su aplicación, lo que puede resultar complejo y costoso.


3. Falta de estandarización y gobernanza dentro de su aplicación: dado que cada servicio tiene la libertad de utilizar tecnologías, marcos, lenguajes y herramientas, puede generar inconsistencias, esfuerzos duplicados y una base de código fragmentada.


Como resultado, mantener y actualizar estos servicios puede resultar un desafío. Para abordar este problema, es fundamental establecer y hacer cumplir prácticas, directrices y políticas para sus servicios. Estos pueden incluir estándares de codificación, requisitos de documentación, procedimientos de prueba de protocolos de versiones y estrategias de implementación.


4. La seguridad y el mantenimiento de los datos plantean desafíos: dado que cada servicio tiene su propio almacén de datos y control de acceso, existe un mayor riesgo de violaciones, filtraciones y corrupción de datos. Además, la gestión de la autenticación, autorización y cifrado de los servicios y sus datos correspondientes puede volverse compleja.


Para abordar estas preocupaciones, es vital priorizar la seguridad de sus servicios y garantizar el cumplimiento de las regulaciones y estándares. La implementación de estrategias, como transacciones, sagas y abastecimiento de eventos, también puede ayudar a mantener la coherencia de los datos.

Usando Docker para microservicios

Si está buscando crear, ejecutar e implementar microservicios, Docker puede ser una herramienta que lo ayudará. En esta sección, profundizaremos en los conceptos de Docker como imágenes, contenedores, volúmenes y redes. También brindaremos orientación sobre cómo aprovechar Docker Compose para definir y orquestar microservicios de manera efectiva.


Además, analizaremos algunas prácticas y consejos útiles para utilizar Docker en el contexto de microservicios.

Imágenes y contenedores

En el ámbito de Docker, una imagen actúa como un paquete y contiene todo lo necesario para que un servicio funcione correctamente. Esto incluye fragmentos de código, bibliotecas, dependencias y configuraciones. Vale la pena señalar que una vez creada, una imagen de Docker se considera inmutable, lo que significa que no se puede modificar.


Para crear una imagen personalizada adaptada a sus necesidades, tiene la opción de crear un Dockerfile que describa las instrucciones de construcción. Alternativamente, también puedes utilizar imágenes existentes disponibles en plataformas como Docker Hub u otras fuentes confiables.


Un contenedor Docker representa una instancia de una imagen de Docker. Opera independientemente de la máquina host y de otros contenedores que tienen su sistema de archivos, red y procesos. Para iniciar un contenedor Docker, puede utilizar el comando docker run que genera e inicia un contenedor basado en una imagen.


Alternativamente, tiene la opción de aprovechar los comandos docker start y docker stop para iniciar o detener un contenedor existente respectivamente. Si es necesario, se puede utilizar el comando docker rm para eliminar un contenedor.

Volúmenes y redes

En la terminología de Docker, se emplea un volumen para el almacenamiento que se puede conectar a un contenedor Docker. Al utilizar volúmenes en Docker, se pueden intercambiar datos cómodamente entre contenedores y la máquina host y, al mismo tiempo, garantizar la continuidad de los datos durante los reinicios o las actualizaciones.


La creación de un volumen Docker se puede lograr ejecutando el comando Docker Volume Create o especificando la opción de volúmenes dentro del comando Docker Run o en su Dockerfile.


Además, existen comandos como docker volume para enumerar volúmenes, docker volume inspect para obtener información sobre volúmenes específicos y, finalmente, docker volume rm, para eliminar volúmenes no deseados.


Una red Docker sirve como una red que conecta los contenedores Docker entre sí con la máquina host. Al utilizar una red Docker, puede garantizar una comunicación aislada entre contenedores y al mismo tiempo permitir el acceso a los servicios que se ejecutan dentro de ellos.


Para crear una red Docker, tiene la opción de utilizar el comando "docker network create" o especificar las redes en el comando "docker run" o Dockerfile.


Además, puede utilizar comandos como "docker network", "docker network inspect" y "docker network rm" para administrar y manipular redes.

Creación y ejecución de un microservicio sencillo mediante Docker

Para ilustrar cómo usar Docker para microservicios, crearemos y ejecutaremos un microservicio simple que devuelve una cita aleatoria de un archivo JSON. El microservicio se escribirá en Python y utilizará el marco Flask. El archivo JSON contendrá una serie de citas, cada una con un autor y un texto.


Para comenzar, creemos un directorio para nuestro microservicio y agreguemos dos archivos dentro de él: app.py y quotes.json. El archivo app.py contendrá el código de nuestro microservicio, mientras que el archivo quotes.json almacenará los datos. Aquí está el contenido de cada archivo;


Pitón

# aplicación.py

desde matraz importar Flask, jsonify

importar aleatoriamente


aplicación = matraz ( nombre )


# Cargar las comillas del archivo JSON

con open("quotes.json") como f:

 quotes = f.read() quotes = json.loads(quotes)


# Definir una ruta para el punto final /quote

@app.ruta("/cita")

cita definida():

 # Pick a random quote from the list quote = random.choice(quotes) # Return the quote as a JSON object return jsonify(quote)


JSON

# citas.json

 "author": "Albert Einstein", "text": "Imagination is more important than knowledge."


 "author": "Mahatma Gandhi", "text": "Be the change that you wish to see in the world."


 "author": "Mark Twain", "text": "The secret of getting ahead is getting started."


 "author": "Oscar Wilde", "text": "Be yourself; everyone else is already taken."


 "author": "Steve Jobs", "text": "Your time is limited, so don't waste it living someone else's life."


A continuación, debemos crear un Dockerfile para nuestro microservicio que especificará las instrucciones para crear la imagen. El Dockerfile será el siguiente:


Utilice la imagen oficial de Python como imagen base

DESDE Python: 3.9


Establezca el directorio de trabajo en /app

DIRTRABAJO /aplicación


Copie los archivos del directorio actual al directorio /app

COPIAR. /aplicación


Instalar las dependencias requeridas

Ejecutar pip instalar matraz


Exponer el puerto 5000

EXPONER 5000


Definir el comando para ejecutar la aplicación.

CMD ["python", "aplicación.py"]


Para construir la imagen, necesitamos ejecutar el siguiente comando en la terminal desde el directorio donde se encuentra el Dockerfile:


docker build -t servicio de cotización.


La opción -t especifica el nombre y la etiqueta de la imagen, en este caso, quote-service. El . especifica el contexto para la compilación, en este caso, el directorio actual.


Para ejecutar el contenedor, necesitamos ejecutar el siguiente comando en la terminal:


docker run -d -p 5000:5000 --name servicio-cotización servicio-cotización


La opción -d ejecuta el contenedor en modo independiente, lo que significa que se ejecuta en segundo plano. La opción -p asigna el puerto 5000 del contenedor al puerto 5000 de la máquina host, lo que nos permite acceder al servicio desde la máquina host.


La opción --name asigna un nombre al contenedor, en este caso, quote-service. El último argumento es el nombre y la etiqueta de la imagen, en este caso, servicio de cotización.


Para probar el servicio, podemos usar una herramienta como Curl o Postman para enviar una solicitud GET al punto final /quote del servicio que debería devolver una cotización aleatoria en formato JSON. Por ejemplo, usando Curl, podemos ejecutar el siguiente comando en la terminal:


Curl http://localhost:5000/quote


La salida debería ser algo como esto:


JSON

"autor": "Mark Twain",

"text": "El secreto para salir adelante es empezar."



Composición acoplable

Docker Compose proporciona una forma de definir y administrar microservicios mediante un archivo YAML. Con Docker Compose, puede manejar fácilmente tareas como crear, iniciar, detener y actualizar contenedores. También ofrece funcionalidades como descubrimiento de servicios, equilibrio de carga, escalado y redes para simplificar la gestión de sus microservicios.


Para usar Docker Compose, necesitamos crear un archivo llamado docker-compose.yml en el mismo directorio que nuestro Dockerfile. El archivo docker-compose.yml contendrá la configuración de nuestros microservicios, como la imagen, puertos, volúmenes, redes y dependencias.


Por ejemplo, supongamos que queremos agregar otro microservicio que consuma el servicio de cotización y muestre la cotización en una página web. El microservicio se escribirá en Node.js y utilizará el marco Express. El archivo docker-compose.yml será el siguiente:


Especifique la versión del formato de archivo Docker Compose: "3.9"


Definir los servicios (contenedores) que componen nuestros servicios de aplicación:

El servicio de cotización

servicio de cotización:

 # Build the image from the Dockerfile in the current directory build: . # Expose the port 5000 ports: - "5000:5000" # Assign a name to the container container_name: quote-service


El servicio web

servicio web:

 # Use the official Node.js image as the base image image: node:14 # Set the working directory to /app working_dir: /app # Copy the files from the web directory to the /app directory volumes: - ./web:/app # Install the required dependencies command: npm install && node app.js # Expose the port 3000 ports: - "3000:3000" # Assign a name to the container container_name: web-service # Specify the dependency on the quote service depends_on: - quote-service


El directorio web contendrá dos archivos: app.js e index.html. El archivo app.js contendrá el código de nuestro servicio web y el archivo index.html contendrá el HTML de nuestra página web. El contenido de los archivos es el siguiente:


javascript

// aplicación.js

const expreso = requerir("expreso");

const axios = requerir("axios");


aplicación constante = expresar();


// Sirve el archivo index.html como ruta raíz

aplicación.get("/", (req, res) => {

res.sendFile(__dirname + "/index.html");

});


// Definir una ruta para el punto final /quote

app.get("/quote", async (req, res) => {

intentar

 // Call the quote service and get a random quote const response = await axios.get("http://quote-service:5000/quote"); const quote = response.data; // Return the quote as a JSON object res.json(quote);


captura (error)

 // Handle the error and return a status code


En este artículo, exploramos el mundo de los microservicios y las aplicaciones nativas, así como también cómo se puede utilizar Docker para crearlos, ejecutarlos e implementarlos. A lo largo de nuestra discusión, hemos examinado las ventajas y desafíos que conlleva el uso de microservicios para aplicaciones.


Estos incluyen ciclos de desarrollo, mayor flexibilidad y escalabilidad, tolerancia a fallas mejorada, resiliencia, selección e integración de tecnología más sencilla, latencia de red y más.


Además, nos hemos familiarizado con los conceptos de Docker, como imágenes, volúmenes de contenedores y redes. También profundizamos en el uso de Docker Compose para definir y orquestar microservicios. A lo largo del camino, hemos compartido algunas prácticas y consejos útiles para utilizar Docker de forma eficaz en un entorno de microservicios.


Esto incluye sugerencias para nombrar estrategias de registro de convenciones e implementar controles de estado.


En general, este artículo ha proporcionado una descripción general de los microservicios junto con las aplicaciones nativas y, al mismo tiempo, muestra cómo Docker puede desempeñar un papel crucial en su ciclo de vida de desarrollo.


Hay casos y menciones de empresas que han implementado con éxito proyectos de microservicios utilizando Docker, como Netflix, Uber, Spotify y Airbnb. Estas organizaciones han adoptado los microservicios y Docker como un medio para ampliar las capacidades de sus aplicaciones, mejorar el rendimiento y brindar servicios con velocidad y confiabilidad.


Si está interesado en profundizar en sus ideas y enfoques recomendados, puede explorar sus publicaciones de blog, podcasts y presentaciones.


Si está interesado en ampliar sus conocimientos sobre microservicios y Docker, hay recursos y oportunidades de aprendizaje a su disposición. Estos incluyen libros, cursos, tutoriales y documentación. Aquí hay algunas recomendaciones:


"Microservicios con Docker, Flask y React"; Este libro proporciona orientación sobre cómo crear, probar e implementar microservicios utilizando Python, Flask, React y Docker.


"Docker y Kubernetes; la guía completa"; Este curso le proporciona las habilidades para desarrollar, ejecutar e implementar aplicaciones utilizando Docker y Kubernetes.


"Cree un microservicio simple utilizando Docker y Flask"; En este tutorial, aprenderá cómo crear un microservicio usando Docker y Flask. También cubre técnicas de prueba y depuración utilizando herramientas como Postman y VS Code.


“Documentación de Docker”; Para obtener información sobre todo lo relacionado con Docker, desde instrucciones de instalación hasta detalles de configuración, esta documentación sirve como recurso.


Explora estas opciones para profundizar en el mundo de los microservicios junto a Docker.