Transcripciones
1. Introducción del curso: ¿Está listo para revolucionar
la forma en que construye, implementa y escala sistemas de
software modernos, introduciendo la arquitectura de
microservicios de dominio, por
supuesto, diseñada para transformarlo en un ingeniero de
software altamente calificado con experiencia
y microservicios de
vanguardia Microservicios que
se convierten en la arquitectura ideal para crear sistemas de
software
altamente
mantenibles, escalables y resilientes. A medida que la industria
continúa evolucionando, dominar los microservicios se
ha vuelto esencial para prosperar en el panorama de la
ingeniería de software. En este curso integral independiente del
lenguaje, profundizarás los principios básicos
de los microservicios, aprendiendo las mejores prácticas
para diseñar e implementar estos sistemas
modulares. Pero eso no es todo nuestro instructor
experimentado lo
guiará a través de estudios de casos
del mundo real , ejercicios prácticos
y
aplicaciones prácticas que mejorarán sus
habilidades y
solidificarán sus conocimientos. Y adivina qué? Este curso es perfecto para estudiantes
de todos los niveles de habilidad, ya sea que seas un principiante total o un ingeniero experimentado. Te tenemos cubierto. Al finalizar este curso. Tendrás la confianza
y la experiencia para dominar arquitectura de
microservicios y crear sistemas de
software que
resistan la prueba del tiempo. Entonces, ¿a qué esperas? ¿El futuro de la ingeniería de
software? Los pesos,
inscribir el curso master it microservices
architecture hoy y desbloquear
tu potencial para construir sistemas de software
como nunca antes. Embárquemos juntos en este
increíble viaje.
2. ¿Qué son los microservicios?: El mundo del
desarrollo de software ha ido evolucionando rápidamente
en las últimas décadas. Las empresas y organizaciones
enfrentan crecientes necesidades de escalabilidad, mantenibilidad
y flexibilidad. Los ingenieros de software
han estado buscando mejores formas de construir sistemas
que satisfagan estas demandas. Uno de los
avances más impactantes en arquitectura de
software es el
concepto de microservicios. En esta sección,
exploraremos los fundamentos
de los microservicios, discutiremos sus beneficios
y principios básicos, y brindaremos una visión general de
los conceptos clave detrás este enfoque transformador
para el desarrollo de software. microservicios tienen sus
raíces a principios de la década de 2000, pero no fue hasta
principios de 2010 que el término microservicios
fue acuñado y popularizado por
los profesionales del campo. Este
estilo arquitectónico fue una respuesta a las limitaciones de las arquitecturas
monolíticas, que durante mucho tiempo han dominado el panorama del
desarrollo de software. En una arquitectura monolítica, todos los componentes de un sistema de
software se
agrupan en una sola unidad
estrechamente acoplada. Si bien este enfoque
tiene sus beneficios en términos de simplicidad, puede llevar a una variedad de
desafíos a medida
que el sistema crece, incluyendo mayor
complejidad, dificultades y escalado y ciclos de
implementación más lentos. Los microservicios, por otro lado, están diseñados como una
colección de servicios pequeños, autónomos y poco acoplados que trabajan juntos para ofrecer
la funcionalidad deseada. Cada servicio es responsable una pieza específica de funcionalidad
y se puede desarrollar, implementar y escalar
independientemente de los demás. Este enfoque modular ofrece varias ventajas sobre las arquitecturas
monolíticas, incluida una mayor flexibilidad,
una mejor escalabilidad y un mejor aislamiento de fallas. Para comprender mejor
los microservicios, consideremos un ejemplo de una aplicación de comercio electrónico en
una arquitectura monolítica, toda
la aplicación
se construye como una sola unidad con todos los componentes estrechamente
acoplados entre sí. Esto puede llevar a
varios desafíos, como ciclos de desarrollo pulmonar, dificultad para escalar
partes específicas de la aplicación y mayor riesgo de
falla por contrato. Como una
arquitectura de microservicios para la misma
aplicación de comercio electrónico
dividiría el sistema en
múltiples servicios, cada uno responsable de
una función específica, como la gestión de inventario, procesamiento de
pagos
o el cumplimiento de pedidos. Estos servicios se pueden desarrollar, implementar y escalar de
forma independiente, lo que resulta en una mayor agilidad, resiliencia y facilidad
de mantenimiento.
3. Beneficios y desafíos de los microservicios: microservicios son
para varios beneficios en comparación con las arquitecturas
monolíticas tradicionales. Uno, escalabilidad
con microservicios, cada servicio se puede escalar de
forma independiente en función sus
requisitos de recursos específicos y patrones de uso. Esto permite una asignación de
recursos más eficiente y permite que las aplicaciones manejen
cargas incrementadas de manera más efectiva. Para un desarrollo e
implementación más rápidos , los microservicios
permiten que equipos pequeños y
multifuncionales trabajen forma independiente en diferentes
partes de la aplicación. Esto da como resultado ciclos de
desarrollo más cortos e implementaciones más rápidas que permiten a las empresas traer nuevas características y mejoras
al mercado más rápidamente. Tres, aislamiento de fallas mejorado en una arquitectura de microservicios, servicio
F1 falla, es menos probable que impacte en todo
el sistema. Esto facilita la
identificación y resolución de problemas lo que resulta en
una mayor
disponibilidad y resiliencia de las aplicaciones . Para facilitar el mantenimiento
y la evolución, los microservicios son más pequeños
en tamaño y alcance, lo que facilita su comprensión,
modificación y mantenimiento. Esto también facilita la mejora
continua ya que los servicios
individuales
pueden actualizarse o reemplazarse sin afectar a toda
la aplicación. A pesar de sus beneficios,
los microservicios también introdujeron nuevos desafíos
y consideraciones. Uno, el aumento de la complejidad, la
administración de múltiples servicios ,
sus interacciones y sus
implementaciones puede ser más complejo que administrar una sola aplicación
monolítica. Los desarrolladores deben considerar
cuidadosamente patrones de
comunicación, la consistencia de
los datos y la orquestación de servicios
para la sobrecarga operativa, los microservicios requieren más recursos de
infraestructura, monitoreo y administración en comparación con
las aplicaciones monolíticas. Para abordar esto,
las organizaciones deben invertir en herramientas
robustas, automatización
y observabilidad. Tres, la latencia de la red, ya que los microservicios se
comunican entre sí a través de la red, latencia puede convertirse en una preocupación, especialmente para los servicios con
altos niveles de interacción, los desarrolladores necesitan diseñar
cuidadosamente patrones de
comunicación y
considerar estrategias
como el almacenamiento en caché y una comunicación
sincrónica y microservicios de resumen. O para un enfoque moderno de la arquitectura de
software que proporciona
mayor escalabilidad, flexibilidad y
resiliencia en comparación con las aplicaciones
monolíticas tradicionales. Sin embargo, también introdujeron nuevos desafíos y complejidades que los desarrolladores deben
considerar y abordar cuidadosamente. A lo largo de este curso,
exploraremos los principios, las
mejores prácticas y las
herramientas necesarias para construir, mantener y escalar Aplicaciones de
Microservicios de manera efectiva.
4. Descomposición de los servicios: La arquitectura de microservicios
ofrece varias ventajas
sobre las arquitecturas
monolíticas tradicionales. Para aprovechar plenamente los
beneficios de los microservicios, es esencial comprender
y diseñar cuidadosamente los componentes clave de una
arquitectura de microservicios exitosa. Y en esta sección,
exploraremos descomposición del
servicio, la administración de
datos, descubrimiento de
servicios y los patrones de
comunicación como los principales
bloques de construcción de los microservicios. Uno de los aspectos más
críticos de la arquitectura de microservicios
es
la descomposición del sistema en servicios
individuales. descomposición adecuada del servicio
le permite construir servicios enfocados, autónomos y
escalables, lo que lleva a un sistema más sostenible
y resiliente. Identificar y
diseñar microservicios, considere las
siguientes pautas. El principal diseño impulsado, DDT es un enfoque que
se enfoca en comprender el dominio del problema y modelar el sistema basado en los conceptos centrales de los
dominios. Mediante el uso de DDD, puede identificar el dominio es contextos
acotados y agregados que
a menudo se alinean con los límites de sus
microservicios, por ejemplo, en una aplicación de comercio electrónico, los servicios pueden dividirse en dominios como catálogo de productos, compras, tarjeta, procesamiento de
pagos, cumplimiento de
un pedido, responsabilidad
única. Cada microservicio debe tener una sola
responsabilidad claramente definida. Adherirse a este principio ayuda a mantener los servicios pequeños, enfocados y fáciles de entender,
probar y mantener. Implementabilidad independiente. Los servicios deben diseñarse para ser implementables de forma independiente, lo que significa que pueden
implementarse y actualizarse sin afectar a otros
servicios en el sistema. Esto garantiza ciclos de implementación
más rápidos y seguros y reduce el riesgo de fallas
generalizadas debido
a un solo cambio.
5. Gestión de datos: La gestión de datos es un aspecto
esencial de la arquitectura de microservicios. La idea es asegurarse de
que cada servicio en su sistema pueda funcionar de
forma independiente y mantener sus propios datos sin
depender de otros servicios para ayudarlo a comprender mejor administración de
datos
en Microservicios, exploremos algunas
prácticas y ejemplos clave. Base de datos por servicio en una arquitectura de
microservicios, es una buena práctica tener una base de datos o esquema separado
para cada microservicio. Esto significa que cada servicio tiene su propio sistema de almacenamiento al que otros servicios
no pueden acceder directamente. Al hacer esto, evita
patrones de acceso a datos en
conflicto y se asegura de que cada servicio pueda
funcionar de forma independiente. ejemplo, imagina que estás construyendo una tienda en línea que tenga microservicios para
administrar productos, cuentas de
clientes y pedidos. Cada uno de estos
servicios tendría su propia base de datos para
almacenar un dato específico. El servicio de productos podría usar una base de datos diseñada
para una búsqueda rápida, mientras que el
servicio de cuentas de clientes podría usar una base de datos optimizada para el almacenamiento seguro
de información personal. La consistencia de los datos en una arquitectura de
microservicios, mantener los datos y la sincronización entre
diferentes servicios puede ser difícil ya que cada
servicio tiene su propia base de datos, es importante encontrar una manera mantener la consistencia entre los servicios sin depender las transacciones de base de datos
tradicionales. Una forma de hacerlo es
abrazando la consistencia eventual, lo que significa que nuestro sistema eventualmente se volverá
consistente incluso si toma algún
tiempo para que los cambios propaguen entre servicios, hay varios patrones
que puede usar para administrar consistencia
eventual,
como una, arquitecturas
impulsadas por eventos
y este patrón, los servicios se comunican
entre sí a través de eventos. Cuando un servicio actualiza sus datos, puede publicar un evento para
notificar a otros servicios
sobre el cambio. Los otros servicios
pueden entonces consumir el evento y actualizar
sus datos en consecuencia. ejemplo, cuando un
cliente realiza un pedido, el servicio de pedidos puede
crear un evento como el pedido realizado y
enviarlo a una cola de mensajes. El servicio de inventario puede
consumir este evento y actualizar los niveles de stock en
consecuencia a las sagas, las encuestas son una serie de
transacciones locales que pueden ser utilizadas para coordinar acciones
entre múltiples servicios. Esto se puede usar para mantener la
consistencia asegurando que cada paso de la secuencia
se complete correctamente, o rollback si
hay una falla
, por ejemplo, si un servicio de pago no procesa un pago, un sujeto puede asegurarse de que
los
servicios de pedido e inventario revierten sus actualizaciones
correspondientes. Tres,
las transacciones compensatorias. Estas transacciones ayudaron a
mantener la consistencia al aplicar una acción de contrapartida cuando algo sale mal, si un servicio no
completa su acción, una
transacción de compensación puede revertir los cambios realizados por
otros servicios, por ejemplo, si un cliente cancela y ordena, la
transacción de compensación
restaurará los niveles de inventario
y reembolsará el pago. intercambio de datos y la replicación en una arquitectura de microservicios, es esencial
evitar el
intercambio directo de datos entre servicios para
mantener su autonomía. En su lugar, utilice métodos de
comunicación sincrónica, como eventos o colas de
mensajes para compartir datos entre
servicios cuando sea necesario. Ejemplo de las
necesidades de atención al cliente para actualizar la dirección de envío de
los clientes. Puede enviar un mensaje al servicio de pedidos con
la
nueva información de dirección, el servicio de pedidos
puede actualizar
sus registros en consecuencia sin necesidad de acceso directo a la base de datos de atención
al cliente. Al comprender estos
conceptos y prácticas, incluso los principiantes pueden administrar
datos de
manera efectiva en una
arquitectura de microservicios, asegurando que sus
servicios permanezcan independientes, mantenibles
y escalables.
6. Patrones de comunicación: Los microservicios necesitan
comunicarse entre sí para compartir información y
colaborar en tareas. Los microservicios se
comunican entre sí para cumplir con la funcionalidad
general del sistema. Diseñar una
comunicación eficiente y confiable entre servicios como un aspecto clave de una
arquitectura exitosa de microservicios, algunos patrones de
comunicación populares para considerar nuestra
comunicación sincrónica. Esto implica la
comunicación en tiempo real entre los servicios, a menudo usando HTTP resto
son protocolos gRPC. La comunicación sincrónica
puede conducir a un acoplamiento estrecho entre los servicios. Por lo que es esencial usarlo
juiciosamente y considerar mecanismos de
retroceso como
disyuntores para evitar fallas en cascada. Una comunicación sincrónica y este patrón de servicios se
comunican indirectamente, a
menudo a través de colas de mensajes son arquitecturas
impulsadas por eventos. Una
comunicación sincrónica permite que
los servicios se
desacoplen entre sí, mejoran la escalabilidad y
permiten una mejor tolerancia a fallas. Por ejemplo, en una
aplicación de comercio electrónico, cuando un cliente realiza un pedido, el servicio de pedidos podría publicar un evento en
una cola de mensajes. El servicio de inventario podría entonces consumir el mensaje y actualizar sus datos de inventario en
consecuencia. Puerta de enlace Api. Api Gateway es un
único punto de entrada para que los consumidores
externos accedan
a los microservicios de los sistemas, puede manejar tareas como
enrutamiento de solicitudes, autenticación y limitación de tarifas, proporcionando una
interfaz consistente y segura a los microservicios.
7. Descubrimiento de servicios: En un entorno de
microservicios, los servicios necesitan encontrarse y comunicarse entre
sí dinámicamente. El descubrimiento de servicios
ayuda con esto al permitir que los servicios se
registren ellos mismos, descubran otros servicios y se
conecten sin codificación, las direcciones de
red se
basan en configuraciones centrales. Hay dos enfoques principales
para el descubrimiento de servicios. Uno, descubrimiento del lado de la línea. Con este enfoque, los clientes
son responsables encontrar los servicios disponibles
utilizando un registro de servicios. Ejemplos de
registros de servicios incluyen Netflix, Eureka o cancelar cuando un cliente necesita comunicarse
con el servicio. En la primera consulta es el registro de
servicios para encontrar la dirección de red adecuada
para el descubrimiento del lado del servidor. En este enfoque, un
balanceador de carga o puerta de enlace API es responsable de encontrar los servicios
disponibles y enrutar las solicitudes a ellos. Los ejemplos de herramientas de
descubrimiento del lado del servidor incluyen AWS, Application Load
Balancer o los clientes de
ingreso de Kubernetes envían solicitudes
al balanceador de carga, que luego reenvía
la solicitud al servicio apropiado en función de
la información del registro
del servicio, entendiendo e implementando de
manera efectiva los componentes
clave de la arquitectura de
microservicios, como la descomposición del servicio, la administración de datos, los patrones de
comunicación y el descubrimiento
de servicios son esenciales para crear aplicaciones de
microservicios exitosas. Al dominar estos conceptos, incluso los principiantes pueden comenzar su viaje hacia la
construcción de sistemas de
software de alta calidad, mantenibles y escalables.
8. Diseñar API: Las interfaces de programación de aplicaciones son una parte vital de la
arquitectura de microservicios, ya que definen cómo los servicios
interactúan entre sí. Diseñar una API clara, concisa y consistente es
crucial para garantizar que sus microservicios puedan comunicarse de manera efectiva y que su sistema siga siendo mantenible medida que crece al diseñar API. En cuanto a sus microservicios, considere las siguientes
mejores prácticas. Adoptar una convención de
nomenclatura consistente. Utilice nombres claros y descriptivos
para puntos finales, recursos y parámetros para que sus API sean fáciles de entender
y trabajar con ellos. Por ejemplo, si su microservicio
maneja pedidos de clientes, puede usar una convención de
nomenclatura, órdenes
ligeras para representar a un
individuo o al recurso. Usa el versionado. Implemente versiones para
sus API para permitir una evolución
y cambios sin problemas sin interrumpir los
clientes existentes u otros servicios. Por ejemplo, puedes
incluir la versión de API y la URL o usar encabezados personalizados para indicar el número de versión. Favorecer principios de descanso
cuando sea apropiado
, apegarse a principios de descanso y utilizar métodos HTTP estándar. Obtenga, publique, PUT, elimine para que
sus API sean intuitivas
y fáciles de trabajar con ellas. Por ejemplo, use el
método get para recuperar un pedido específico primero
para crear un nuevo pedido, poner para actualizar un pedido existente y eliminar para eliminar un pedido. Las API documentales proporcionan documentación
exhaustiva para ayudar a los desarrolladores a
comprender cómo interactuar con sus servicios. Incluir información sobre puntos
disponibles y, autenticación, parámetros de entrada
y respuestas esperadas. Herramientas como swagger o
OpenAPI pueden ayudarte a generar documentación
API interactiva, facilitando a
los desarrolladores exploración y prueba de tus servicios.
9. Desarrollo de un código específico: Al desarrollar código para microservicios
individuales, es crucial mantener la
separación de preocupaciones y enfocarse en la
funcionalidad específica brinda cada servicio. Esto ayudará a garantizar que sus microservicios
sigan siendo modulares, mantenibles y fáciles de escalar
para lograrlo, siga
estas pautas. Encapsula la lógica de negocio. Mantener la
lógica de negocio específica cada microservicio contenido
dentro de ese servicio, evitando que
se enrede con otros servicios o dependencias
externas. ejemplo, si tiene un microservicio responsable de manejar
los pedidos de los clientes, asegúrese de que todo el
procesamiento relacionado con el pedido ocurra dentro ese servicio y no esté distribuido
en múltiples servicios. Implementa principios sólidos. Solid es un acrónimo de cinco
principios de diseño de software que ayudan a promover un código limpio y
mantenible. Aplicar principios sólidos a sus microservicios
puede facilitar su comprensión, modificación y ampliación. Un solo
principio de responsabilidad. Este principio establece que
una clase o módulo debe tener una razón para cambiar
al adherirse a SRP, usted se asegura de que cada parte de
su microservicio se
centre en un solo aspecto de la funcionalidad del
sistema. Ejemplo, en tu servicio de pedidos, podrías tener una
clase
encargada de calcular los gastos de envío. Esta clase solo debe
centrarse en los cálculos de
costos de envío y no manejar ninguna otra tarea como actualizar inventario o administrar los datos de los
clientes. Para abrir principio de cierre, este principio establece que las entidades de
software deben estar abiertas para extensión pero
cerradas para su modificación. Al adherirse a OCP, se asegura de que sus
microservicios se puedan extender sin necesidad de
modificar su código existente. Ejemplo, podrías tener una clase de validación de olores
en tu servicio de pedidos. Si se introducen nuevas
reglas de validación, debería poder
agregarlas sin cambiar el código de
validación existente, posiblemente usando un patrón de complemento
o decorador. Utilice patrones de diseño apropiados. Emplee patrones de
diseño bien establecidos que se ajusten a su
caso de uso específico para mejorar la calidad general de
sus microservicios. ejemplo, considere implementar el patrón de repositorio
para el acceso a datos, lo que puede ayudarlo a
encapsular y centralizar el logit de acceso a datos, facilitando su
administración y prueba. Al seguir estas pautas y comprender los ejemplos, incluso los principiantes totales pueden desarrollar código específico de
servicio de manera efectiva, lo que lleva a una
arquitectura de microservicios más mantenible y escalable.
10. Manejo de errores: El manejo robusto de errores es un aspecto esencial
del desarrollo de microservicios,
ya que ayuda a garantizar la confiabilidad y
resiliencia de su sistema, considere las siguientes
recomendaciones al implementar el manejo de errores
en sus microservicios, una, las respuestas de error
estandarizadas establecen un formato consistente
para que las respuestas de error sean más fáciles de entender para
los desarrolladores y manejar errores en
diferentes servicios. Por ejemplo, podría usar una estructura JSON que
incluya un código de
error, un mensaje de error y
detalles adicionales como este. Código de error 404 mensaje de error, o no se encuentran detalles, el orden especificado
no existe. Para usar códigos de
estado significativos y
mensajes de error aprovechado códigos de estado HTTP
estándar y proporcionar mensajes de
error claros y formativos para dar a los clientes y una mejor comprensión de cualquier problema que surja. Por ejemplo, devuelva un código de
estado 404 con el mensaje de
error descriptivo cuando no
se encuentre
el recurso solicitado, o un código de estado 400 con los detalles
apropiados cuando un
cliente envía datos no válidos. Tres, implemente el manejo adecuado de
excepciones, atrape y maneje las excepciones adecuadamente dentro de
sus microservicios, asegurándose de que no causen el servicio
falle inesperadamente. Además, las excepciones de registro para permitir la depuración eficiente y el diagnóstico de
problemas
para el diseño, para una degradación elegante
en caso de falla, diseñaron sus
microservicios para degradarse con gracia al devolver errores
significativos, proporcionar
datos de respaldo o implementar interruptores automáticos para evitar fallas
en
cascada en todo el sistema.
11. Colaboración entre los equipos de desarrollo: colaboración eficiente entre los equipos de
desarrollo es crucial en un entorno de microservicios, ya varios equipos suelen trabajar en diferentes servicios
simultáneamente, implementar
las mejores prácticas y usar las herramientas adecuadas pueden agilizar la
colaboración y garantizar que sus microservicios se desarrollen pensando en
la capacidad de mantenimiento y extensibilidad en lugar
de siguiendo estrategias
y ejemplos. Uno, estableció estándares de
codificación, definir y hacer cumplir los estándares de
codificación en sus equipos de desarrollo para promover una base de
código consistente que sea fácil de entender y mantener. Esto incluye pautas
sobre convenciones de nomenclatura, formato de
código y comentarios. Por ejemplo, la
guía de estilo JavaScript de Airbnb es un conjunto popular
de estándares de codificación que muchas organizaciones adoptan
o personalizan para garantizar calidad de código
consistente al adherirse a una guía de estilo
compartida, los desarrolladores pueden
navegar y comprender más fácilmente el código de los
demás, haciendo que la colaboración sea
más eficiente. Para utilizar un sistema de control de versiones. Utiliza un
sistema de control de versiones como Git, para realizar un seguimiento de los cambios en
tu base de código y facilitar la colaboración
entre los miembros del equipo. Aplique una estrategia de
ramificación consistente como Git Flow o GitHub Flow, y fomente el uso
de solicitudes de extracción y revisiones de
código para
mantener la calidad del código. ejemplo,
los equipos de desarrollo pueden crear ramas de
características para
nuevas funcionalidades, fusionarlas en una
rama principal después de la revisión por pares y utilizar ramas de lanzamiento
para prepararse para la implementación. Este enfoque estructurado mantiene
la base de código organizada y facilita que los equipos
colaboren de manera efectiva. Libre, implementar integración
continua
y entrega continua. Adopte una canalización de CI CD para
automatizar la construcción, prueba e implementación
de sus microservicios. Este enfoque permite una
retroalimentación rápida sobre los cambios de código y garantiza que sus servicios estén siempre en un estado liberable. Herramientas como Jenkins, Travis CI y Circle CI pueden ayudar a
automatizar estos procesos. ejemplo, cada vez que un desarrollador envía código a un repositorio
remoto, la canalización de CD de CI puede ejecutar pruebas
automáticamente, construir la aplicación e implementarla en un entorno de
ensayo, proporcionando comentarios rápidos
sobre los cambios. Para aprovechar las herramientas de comunicación y colaboración,
use herramientas como Slack, microsoft Teams o Jira para facilitar la comunicación
entre los equipos de desarrollo y mantener a todos en la
misma página con respecto al progreso
del proyecto,
las prioridades y los problemas. ejemplo, integrar repositorios de
Git con plataformas de comunicación como Slack permite a los desarrolladores Por ejemplo, integrar repositorios de
Git
con plataformas de comunicación
como Slack permite a los desarrolladores
recibir notificaciones de solicitudes de extracción , revisiones de
código y fusiones. Mientras tanto, Jira puede ayudar a
rastrear historias de usuarios, errores y otras tareas, asegurando que todos los
miembros del equipo comprendan el estado actual de desarrollo y
las prioridades del proyecto. Al seguir estas prácticas de
desarrollo esenciales, estará mejor equipado
para crear soluciones de
microservicios de alta calidad, mantenibles y escalables. Además, la incorporación ejemplos
del mundo real
y estudios de casos de otros
proyectos exitosos puede proporcionar información
valiosa y ayudar a guiar sus
decisiones de implementación. Estudiar cómo empresas
como Netflix, Amazon y Spotify han implementado
microservicios puede ofrecer inspiración y lecciones
que se pueden aplicar a las necesidades
específicas de su organización.
12. Introducción a la prueba de microservicios: desarrollo de microservicios
viene con muchas ventajas, como una mejor escalabilidad
y mantenibilidad. Sin embargo, también presenta desafíos
únicos, especialmente cuando se
trata de pruebas. Garantizar la calidad
y confiabilidad de los servicios individuales y las interacciones entre
ellos como esenciales para crear un sistema robusto basado en
microservicios. Y en esta sección,
profundizaremos en varias estrategias de prueba que
son adecuadas para micro servicios, incluyendo pruebas unitarias, pruebas integración
y pruebas de extremo a extremo. Y discutir la importancia
de las pruebas de contrato. También presentaremos marcos de
pruebas y
herramientas populares para ayudarlo a
probar sus microservicios de manera efectiva.
13. Pruebas de unidad: Las pruebas unitarias son el
proceso de probar componentes
individuales o
unidades de sus microservicios. Estas pruebas se centraron en
la funcionalidad de una sola
clase o función de módulo, asegurando que cada pieza de su código basado en el rendimiento se
realice como se esperaba. Las pruebas unitarias son
la base de cualquier estrategia de
prueba efectiva y deben ser el primer
paso para validar la funcionalidad de
sus microservicios. Al escribir pruebas unitarias, es crucial
crear casos de prueba que cubran una amplia
gama de escenarios, incluyendo entradas esperadas
e inesperadas. Esto ayuda a descubrir casos de
borde y posibles errores antes de que
se conviertan en problemas en la producción. marcos
y herramientas de pruebas unitarias populares incluyen la unidad
J para Java, Mocha para JavaScript
y Python para Python. Cada uno de estos marcos está
diseñado
para facilitar a los desarrolladores escribir
y ejecutar pruebas unitarias, lo que les permite
identificar y solucionar problemas al principio del proceso de
desarrollo. Veamos un ejemplo de prueba
unitaria. Considera un microservicio
que administre cuentas de usuario. Una de sus funciones es
crear nuevas cuentas con una dirección de correo electrónico válida
y una contraseña segura. En este caso, se podrían
escribir pruebas
unitarias para verificar los
siguientes escenarios. Uno, la función
crea correctamente una cuenta
con un correo electrónico válido y contraseña segura a la función rechaza y solicitud de
creación de cuenta con un correo electrónico no válido. Tres, la función rechaza y
solicita la creación de cuenta con una contraseña débil utilizando los marcos de pruebas unitarias
como JUnit o moca, puedes crear casos de prueba para
cada uno de estos escenarios y asegurarte de que tu función de
creación de cuenta comporta como se esperaba.
14. Pruebas de integración: Una vez que haya verificado
la funcionalidad de los componentes
individuales
a través de Unit Testing, el siguiente paso es la prueba de
integración. Pruebas de integración
enfocadas a validar las interacciones entre
múltiples componentes o servicios, asegurando que funcionen
juntos sin problemas. Esto es especialmente importante en una arquitectura de microservicios donde los servicios
suelen depender unos de otros para
funcionar correctamente. Las pruebas de integración deben abarcar tanto
las interacciones internas dentro un solo servicio las interacciones
externas
entre los servicios. Al probar
interacciones externas, es esencial considerar
diversos escenarios, como latencia de red, servicio y disponibilidad
e inconsistencias de datos. Herramientas como Postman, por lo que PI e insomnio se utilizan a menudo
para probar APIs RESTful, permitiendo a los desarrolladores enviar solicitudes
HTTP a sus servicios
y verificar las respuestas. Adicionalmente, las herramientas de
virtualización de servicios, como la marca de alambre o no, se
pueden utilizar para simular el comportamiento de dependencias
externas, haciendo que las pruebas de integración sean
más confiables y eficientes. Veamos el ejemplo de
pruebas de integración,
continuando con el ejemplo de microservicio de
cuenta de usuario. Supongamos que este servicio
también interactúa con un servicio de notificación por correo electrónico para enviar un correo electrónico de bienvenida después creación
exitosa de la cuenta y las pruebas de
integración podrían
escribirse para verificar que un
servicio de cuentas de usuario llame correctamente al
servicio de notificación por correo electrónico con los parámetros apropiados
como destinatario, dirección de
correo
electrónico y plantilla de correo electrónico
al correo electrónico respuesta del
servicio de notificación con el estado de
éxito cuando envía correctamente el correo electrónico. Para probar estos escenarios, podría
usar un
cartero similar a una herramienta para enviar solicitudes a su servicio de cuenta de usuario
y observar si los
servicios de notificación por correo electrónico se invocaron correctamente. Alternativamente, puede usar una herramienta de virtualización de servicios
como la marca de cable para simular el comportamiento de los
servicios de notificación por correo electrónico y validar las interacciones
entre los dos servicios.
15. Pruebas de extremo a extremo: Las pruebas de extremo a extremo toman
un enfoque holístico para validar todo el sistema
desde la perspectiva del usuario. Este tipo de pruebas
implica simular escenarios de usuario
del mundo real para garantizar que todos los componentes y
servicios funcionen juntos correctamente para cumplir con
los casos de uso previstos. Las pruebas de extremo a extremo
suelen ser más complejas que las pruebas unitarias o de
integración, ya que requieren una
comprensión integral de la arquitectura de sistemas
y los flujos de usuario. Estas pruebas pueden llevar mucho tiempo
escribir y mantener, pero son esenciales para garantizar la confiabilidad general de su sistema basado en microservicios. Herramientas como Selenium, titiritero y Chipre se pueden utilizar
para pruebas de extremo a extremo, automatizando
las interacciones del usuario con aplicaciones
web y validando
el comportamiento de los sistemas. Veamos el ejemplo de
prueba de extremo a extremo en un escenario de prueba de extremo a extremo para el microservicio de cuenta de usuario, podría simular
todo el recorrido del usuario de registrarse para una cuenta, registrar y actualizar
su perfil y finalmente, eliminar
su cuenta. La prueba implicaría una, registrar una nueva cuenta con credenciales
válidas para verificar que se recibe el
correo electrónico de bienvenida. Tres, iniciar sesión con las credenciales recién creadas para actualizar el
perfil del usuario con nueva información. Phi, eliminando la cuenta del usuario usando una herramienta como
Selenium o Cyprus, podría automatizar
todo este recorrido del usuario y asegurarse de que todos los componentes y servicios involucrados en estas acciones funcionen
juntos como se esperaba.
16. Pruebas de contratos: En una arquitectura de microservicios, es crucial asegurar
que los servicios se adhieran a los contratos que han
establecido con sus consumidores. Las pruebas de contrato validan que un servicio cumple con
las expectativas de sus consumidores en términos de
insumos, salidas y comportamiento. Las pruebas de
contrato impulsadas por el consumidor son un enfoque popular que implica crear pruebas
basadas en las expectativas del consumidor. Esto permite
a los proveedores verificar que su servicio cumple con los requisitos
del consumidor y, al
mismo tiempo , brinda a los consumidores la
confianza de que proveedores de servicios
son compatibles con sus necesidades. Herramientas como Packed
y Spring Cloud contract son ampliamente utilizadas para implementar CDC en sistemas de
microservicios. Veamos el ejemplo de
prueba de contrato. Supongamos que el microservicio de
cuenta de usuario tiene varios consumidores, como
una aplicación web, una aplicación móvil y una integración de
terceros. Estos consumidores
esperan
que el servicio exponga puntos finales específicos, excepto ciertos formatos de entrada y devuelva datos en una estructura
particular. En las pruebas de
contrato impulsadas por el consumidor, crearía pruebas
basadas en las expectativas de cada consumidor, como los puntos finales requeridos, validación de
entrada
y el formato de salida. Usando una herramienta como packed, puedes generar
archivos de contrato que describan estas expectativas y
compartirlas con el proveedor. El proveedor puede entonces utilizar
estos archivos de contrato para verificar que su servicio cumple con los
requisitos del consumidor. Al implementar estas estrategias de
prueba, puede identificar y resolver problemas al principio del proceso de
desarrollo, asegurando que el término
microservicios confiable, mantenible
y escalable.
17. Asegurar microservicios: Asegurar los microservicios
es una parte crucial del proceso de
desarrollo de software. Tiene microservicios interactuando
entre sí y con clientes externos, es esencial
garantizar la integridad, confidencialidad y
disponibilidad de estos servicios. En esta sección
profundizaremos en las mejores prácticas para asegurar sus
aplicaciones de microservicios, cubriendo aspectos
como la autenticación, autorización y la seguridad comunicación entre servicios.
18. Autenticación: autenticación es el
proceso de verificar la identidad de un usuario,
sistema o servicio. En una arquitectura de microservicios, debes autenticar
tanto a clientes externos como servicios
internos interactuando
con tus servicios. Existen varios enfoques para implementar la autenticación con algunos métodos populares siendo
uno, JSON Web Tokens. Jwt es un formato de token
compacto ampliamente utilizado que le permite transmitir de
forma segura
información entre las partes y el contexto
de los microservicios, puede usar JWT para codificar identidad
del usuario o servicio emitiendo un token tras la
autenticación exitosa, cada solicitud posterior
a sus servicios debe incluir el
JWT en el encabezado, permitiendo que sus servicios
verificar la identidad de los colores. Considere un escenario
en el que tenga un microservicio de administración de usuarios responsable de manejar la autenticación de
usuarios. Cuando un usuario inicia sesión
con sus credenciales, el Servicio verifica
las credenciales y emite en el
token web JSON al cliente, rechazado luego incluye este token y las solicitudes
posteriores a otros microservicios. Cada microservicio
puede
verificar independientemente la firma del token, asegurando que el usuario
esté autenticado sin la necesidad de un servicio de
autenticación centralizado. En este ejemplo de código, el
servicio de administración de usuarios emite problemas en JWT tras la
autenticación exitosa. Para OAuth 2.02 0.0 es un
estándar ampliamente adoptado para autorizar acceso a
aplicaciones web y API. En un escenario de microservicios, puede usar OAuth
2.0 para delegar responsabilidades de
autenticación a un proveedor de
identidad centralizado o un servicio de autenticación. Sus microservicios pueden entonces confiar en esta autoridad de confianza para verificar la identidad de
los clientes y otros servicios.
19. Autorización: Una vez
autenticado un usuario o servicios, debe aplicar
controles de acceso para asegurarse de
que tengan los permisos necesarios para
acceder a sus recursos de
microservicios. Algunas estrategias para
implementar la autorización y sus microservicios son un control de acceso
basado en roles. Con RBAC, define roles con permisos
específicos y a los usuarios o servicios se
les asignan estos roles. Cuando llega una solicitud, verifica el rol de colores y sus
permisos asociados antes otorgar acceso a los recursos
solicitados. Supongamos que tiene una aplicación de
comercio electrónico con múltiples microservicios, como gestión de pedidos , gestión de
productos y gestión de
inventario, diferentes usuarios pueden
tener diferentes niveles de acceso a estos servicios. ejemplo, y administrativo
puede tener acceso a todos los servicios mientras que
un vendedor puede tener acceso a la gestión de pedidos y gestión de
productos solo para implementar este nivel de control, puede usar RBAC al
generar un JWT para un usuario, incluir su rol en
la carga útil del token. Cada microservicio puede entonces verificar el rol del usuario
con un conjunto de roles
predefinidos para
determinar si el usuario está autorizado a acceder
al recurso solicitado. Este ejemplo de código Node.js, el
microservicio de administración de pedidos comprueba si un usuario tiene el rol requerido
para acceder al recurso. Para el control de
acceso basado en atributos o la espalda utiliza
atributos para definir políticas de
control de acceso de
grano fino que proporcionan más
flexibilidad que RBAC, lo que le permite crear
políticas dinámicas basadas en los colores, atributos y el
contexto de la solicitud.
20. Asegurar la comunicación: A medida que los microservicios interactúan
entre sí y con clientes externos, es fundamental asegurar canales de
comunicación para proteger los datos del acceso no autorizado , la
manipulación o la escucha. Existen varios
métodos para asegurar la comunicación en un entorno de
microservicios. Uno, Transport Layer
Security, TLS, es el estándar de facto para asegurar la comunicación
a través de una red. Encripta los datos transmitidos entre clientes y servicios, protegiéndolos de
accesos no autorizados y temporales a TLS mutuos. Mientras que el TLS estándar verifica
la identidad del servidor, los MTL proporcionan una capa
adicional de seguridad al verificar la identidad del
cliente también. Esto es particularmente útil en un
entorno de microservicios donde los servicios a menudo necesitan autenticarse entre sí
antes de intercambiar datos. La implementación de MTL
ayuda a garantizar que solo
los clientes y servicios autorizados puedan comunicarse con
sus microservicios.
21. Abordar las preocupaciones de seguridad específicas de los microservicios: La arquitectura de microservicios trae algunos desafíos de
seguridad únicos que deben abordarse. Examinemos algunos ejemplos. Uno, la seguridad de API Gateway como punto de entrada a
sus microservicios, la API Gateway juega un papel crucial en la
seguridad de su sistema. Asegúrese de que su
puerta de enlace API implemente sólidos de autenticación,
autorización, limitación mecanismos
sólidos de autenticación,
autorización, limitación de velocidad
y validación de entrada para proteger sus
microservicios de solicitudes
maliciosas a protección
de denegación de servicio distribuida. Las arquitecturas de microservicios son particularmente susceptibles a los ataques
DDoS, ya
que son de
naturaleza distribuida que pueden crear múltiples
puntos de falla. Mitigar los riesgos de DDoS. Debe implementar mecanismos de
defensa como limitación de velocidad, filtrado de
IP y análisis de
tráfico. También puede
aprovechar los servicios de protección
DDoS basados en la nube que ofrecen proveedores como AWS Shield,
cloudflare o Akamai. Tres, descubrimiento de servicios seguros en una arquitectura de microservicios, los servicios deben descubrirse entre sí para
comunicarse de manera efectiva, asegurando que su mecanismo de
descubrimiento de servicios sea seguro, como crucial para evitar servicios
no autorizados
participen en su sistema. En lugar de utilizar soluciones seguras de descubrimiento de
servicios, como asesorar
con ACL y TLS, o actuar con control de
acceso basado en roles y cifrado de cliente a servidor. Para la seguridad de los datos,
los microservicios suelen gestionar datos
confidenciales que deben protegerse tanto en
tránsito como en reposo. Para proteger los datos en reposo utilizando mecanismos de
corrupción y control de acceso proporcionados por sus soluciones de almacenamiento de datos
como cifrado de bases de datos, controles de acceso a nivel de
almacenamiento. Además, siempre use protocolos de comunicación
seguros como HTTPS, gRPC sobre TLS para proteger
los datos en tránsito. Al adherirse a estas
mejores prácticas e incorporar ejemplos
del mundo real, puede asegurarse de que sus aplicaciones de
microservicios sean seguras y confiables. Comprender los desafíos de
seguridad únicos y abordarlos de manera efectiva le
ayudará a crear un
sistema de software robusto, mantenible y
escalable que se ajuste al panorama de amenazas
moderno. medida que avanza en
su viaje de microservicios, siempre priorice la seguridad y manténgase actualizado sobre los
últimos desarrollos, herramientas y metodologías
para mantener su sistema seguro.
22. Estrategias de implementación: La implementación de microservicios es un aspecto crítico para
implementar una arquitectura de microservicios exitosa. La implementación adecuada garantiza que sus
aplicaciones de microservicios sean
resilientes, eficaces y fácilmente escalables. Esta sección cubrirá
diversas estrategias de implementación, contenerización y
orquestación utilizando herramientas como Kubernetes. También discutiremos
cómo escalar de manera efectiva sus aplicaciones de microservicios para acomodar cargas cambiantes. Se pueden
emplear diferentes
estrategias de implementación para lograr
varios objetivos, como cero tiempo de inactividad, retrocesos y lanzamientos graduales de
funciones. Veamos las tres estrategias de despliegue
comunes.
23. Despliegue de verde-azul: Esta estrategia implica
implementar una nueva versión de su grado de microservicio junto con la versión actual, el tráfico azul
se
desplaza gradualmente del entorno azul
al entorno de grado. Si surge algún problema, el tráfico se puede
redirigir fácilmente de nuevo
al entorno azul, minimizando el impacto
de implementaciones fallidas. Veamos un ejemplo de
implementación azul-verde para ilustrar una implementación
azul-verde, supongamos que tenemos una aplicación de
tienda en línea que tiene un microservicio
responsable de procesar los pagos. Hemos desarrollado
una nueva versión
del
microservicio de procesamiento de pagos que introduce algunas optimizaciones de
rendimiento. Para implementar esta nueva versión
con un tiempo de inactividad mínimo, podemos usar la estrategia de
implementación azul-verde. Uno, primero, crear un entorno separado
con la nueva versión
del microservicio de procesamiento de pagos asegurar que el entorno se configure
con los recursos necesarios, como bases de datos y colas de
mensajes para soportar
el nuevo microservicio. A continuación, configure
su balanceador de carga o puerta de enlace
API para enrutar un pequeño porcentaje
del tráfico al entorno verde, mientras que la mayor parte
del tráfico aún va al entorno
azul. Gratis monitorear continuamente
la nueva versión
del microservicio de procesamiento de pagos y el entorno verde, comprobando si hay errores o problemas de
rendimiento para
aumentar gradualmente el porcentaje de tráfico enrutado al
entorno verde a medida que gana confianza en la nueva versión,
estabilidad y rendimiento. Pelea cuando el ambiente verde
haya recibido
el 100% del tráfico y
la nueva versión
del microservicio esté
funcionando como se esperaba, puedes desarmar
el ambiente azul.
24. Despliegue de Canarias: Este enfoque, una nueva versión de los microservicios desplegados
a un pequeño subconjunto de usuarios. Se realizan monitoreo y validación para asegurar que la nueva versión
se comporta como se esperaba. Si tiene éxito, la
nueva versión
se ha ido extendiendo gradualmente a toda
la base de usuarios. Esta estrategia le permite
probar nuevas funciones con una audiencia más pequeña y
detectar problemas desde el principio. Veamos un ejemplo de
despliegue canario. Supongamos que tenemos una plataforma de
comercio electrónico que tiene un microservicio responsable administrar los perfiles de los clientes. Queremos probar una nueva función
que permita a los clientes vincular sus
cuentas de redes sociales a sus perfiles. Para implementar esta característica usando la estrategia de despliegue canario. Uno, primero, crear
una nueva versión
del
microservicio de perfil de cliente que incluya la función de Lincoln en
redes sociales. Implementar la nueva versión
del microservicio en un
pequeño subconjunto de usuarios, asegurándose de
monitorear cuidadosamente y recopilar
comentarios de estos usuarios. Tres, si la nueva
función funciona bien y recibe retroalimentación
positiva, gradualmente despliegue el microservicio
actualizado a una audiencia más amplia. Para continuar monitoreando y validando las nuevas características,
rendimiento y estabilidad. A medida que amplíe el despliegue, si surge algún problema, puede retroceder
el despliegue a la versión anterior
del microservicio.
25. Implementación de balanceo: La
estrategia de implementación
continua implica tomar una instancia
del microservicio a la vez. El proceso de implementación se mueve a través de cada instancia
secuencialmente lo que le permite
monitorear la actualización y la reversión si surgen problemas. Las implementaciones continuas
minimizan el impacto en el sistema general como solo un pequeño porcentaje de instancias o actualizadas
en un momento dado. Veamos un ejemplo de
implementación rodante. Para demostrar una implementación
continua, consideremos una aplicación de
pronóstico del tiempo que tenga un microservicio responsable obtener datos meteorológicos
de una API externa. Queremos implementar una actualización
de este microservicio que utilice una nueva API para
obtener datos meteorológicos. Para minimizar el impacto
de la implementación, podemos usar la estrategia de
implementación continua. Uno, primero, preparar
la nueva versión
del microservicio de obtención de datos meteorológicos que utiliza la nueva API para implementar la nueva versión
del microservicio en
una sola instancia, asegurando que monitorea rendimiento
y la estabilidad de
estas instancias. Tres, si actualizaron
y ya que funciona bien, procede a actualizar
la siguiente instancia del microservicio. Para continuar actualizando
instancias una a la vez, monitoreando de cerca el
rendimiento y la estabilidad de cada instancia a medida que se
actualiza si surge algún problema, retrocede
el despliegue a la versión anterior
del microservicio. Al emplear estas estrategias de
implementación, puede minimizar el tiempo de inactividad
y reducir el riesgo de introducir problemas en su aplicación de
microservicios. Seleccione la estrategia de
implementación más adecuada en
función de sus
necesidades y requisitos específicos. Teniendo en
cuenta factores como la complejidad del sistema, el impacto del usuario y el
nivel deseado de mitigación del riesgo.
26. Contenerización: contenerización,
a menudo usando más oscuro, es un método popular para empaquetar e implementar
microservicios. Los contenedores ofrecen
varias ventajas, como una, aislamiento. Cada microservicio se ejecuta en
un entorno aislado, reduciendo el riesgo de conflictos y simplificando la gestión de
dependencias. Para la portabilidad, los contenedores pueden ejecutarse en cualquier plataforma que
soporte más oscuro, lo que
facilita la implementación y ejecución sus microservicios en
diferentes entornos. Tres, los contenedores de escalabilidad se
pueden replicar fácilmente, lo que permite un rápido escalado de sus microservicios para
manejar mayores cargas. Veamos un
ejemplo de creación de un contenedor Docker para un
microservicio Node.js para crear
un archivo Docker en su directorio
raíz de microservicios con el siguiente contenido. Construya la imagen de Docker usando
el siguiente comando. Docker build t, mi microservice ejecutando contenedor de
la imagen docker ejecuta P3 mil, 3,000 microservicios.
27. Orquestación con Kubernetes: Kubernetes es una
poderosa herramienta de
orquestación de contenedores para implementar, escalar y administrar aplicaciones en
contenedores, incluidos los microservicios. Los conceptos de Kubernetes incluyen un nodo, máquinas
físicas o virtuales que ejecutan sus contenedores en pods. La unidad
más pequeña y simple del modelo de objetos de Kubernetes que representa una
sola instancia de un proceso en ejecución en un clúster. Tres servicios, un punto final de red estable
que se puede utilizar para exponer sus microservicios a otros componentes
o volantes externos para implementaciones o abstracción de
alto nivel para administrar el
estado deseado de sus microservicios, como el número de
réplicas y la estrategia de actualización. Aquí hay un ejemplo de implementación de un microservicio en Kubernetes primer archivo YAML de
punto de implementación creado con el siguiente contenido. A continuación, aplique la configuración de
despliegue usando el siguiente comando
kubectl apply.
28. Escalar los microservicios: horizontal vs vertical: Las arquitecturas de microservicios deben
diseñarse para la escalabilidad, lo que garantiza un
rendimiento y una resiliencia óptimos. enfoques clave para escalar
microservicios incluyen uno, escalado
horizontal,
agregando más instancias de sus microservicios para
manejar lóbulos aumentados. Este es el enfoque más
común para escalar microservicios
y se puede lograr usando Kubernetes ajustando el campo de réplicas en su configuración de
implementación. escalado vertical,
aumentando los recursos como CPU y memoria disponibles
para sus microservicios. Esto puede ser útil para cargas de trabajo
específicas, pero puede tener limitaciones debido a las restricciones de
hardware subyacentes. Al diseñar sus
microservicios, considere los siguientes principios
para garantizar la escalabilidad. Diseño para la apatridia, los microservicios deben
ser pegadizos, lo que significa que no deben
depender de almacenar el estado localmente. Esto le permite
escalar fácilmente sus microservicios horizontalmente sin
preocuparse por consistencia de
los datos
en todas las instancias. Implementar el almacenamiento en caché. Utilice estrategias de almacenamiento en
caché para almacenar datos a los que
se accede con frecuencia en la memoria, reduciendo la latencia y
mejorando el rendimiento. Almacenamiento de datos optimizado, elija las
tecnologías de base de datos adecuadas para sus microservicios y
optimizó el rendimiento de las consultas para reducir los cuellos de botella
al escalar. Para ilustrar cómo escalar los
microservicios de manera efectiva, consideremos una aplicación de
ejemplo con múltiples microservicios, incluyendo un servicio de
catálogo de productos, un servicio autenticación de
usuarios
y un servicio de procesamiento de pedidos. Un ejemplo de escalado horizontal, supongamos que el
servicio de catálogo de productos experimenta un aumento significativo en el tráfico debido a una campaña de
marketing. El aumento del tráfico provoca tiempos de respuesta
más lentos y reduce el rendimiento para
manejar el aumento de la carga, puede escalar horizontalmente
el servicio de catálogo de productos. Primero, asegúrese de que su servicio de
catálogo de productos sea adhesivo, lo que le permite
agregar más instancias sin preocuparse por la consistencia de
los datos. A continuación, actualice su configuración de
implementación y Kubernetes aumentando
el campo de réplicas, que determina el
número de instancias se ejecutan para un
microservicio específico; por ejemplo, puede aumentar
las réplicas 3-6 para
duplicar la capacidad de su servicio de catálogo de
productos. Configure su balanceador de carga o API Gateway para
distribuir el tráfico manera uniforme entre las instancias
disponibles del servicio de catálogo de productos. Monitoree continuamente
el rendimiento y latencia del servicio de
catálogo de productos, asegurando que la mayor
capacidad satisfaga la demanda. Veamos un ejemplo de
escalado vertical. El
servicio de autenticación de usuarios experimenta un aumento en las solicitudes a medida que crece el
número de usuarios, lo que lleva a un aumento
en el uso de la CPU. Para acomodar esto,
puede
escalar verticalmente el servicio de
autenticación de usuario. Primero, analice el uso de
recursos de su
servicio de autenticación de usuario para determinar el
aumento requerido en los recursos de CPU y memoria para actualizar la configuración de implementación
y Kubernetes
aumentando los
límites de recursos como CPU y memoria asignados al servicio de
autenticación de usuario. Tres, verificar que la
asignación de recursos actualizada mejore el rendimiento
y los tiempos
de respuesta del servicio de
autenticación de usuarios. Escalando los principios en la práctica, apliquemos los principios
de apatridia, almacenamiento en caché y almacenamiento de datos optimizado
a nuestro ejemplo, aplicación. Para el servicio de catálogo de productos, garantice la apatridia
almacenando los datos del producto en un almacén de datos centralizado en
lugar de dentro de instancias
individuales. Esto le permite
escalar el servicio horizontalmente sin
preocuparse por la consistencia de los datos. Implementar el almacenamiento en caché para el servicio de catálogo de
productos para almacenar en la memoria la información
del producto a la que se accede con frecuencia, reduciendo
la necesidad de acceder al data store para cada solicitud, mejorando
así los tiempos de respuesta. Optimizó el almacenamiento de datos para el
servicio de procesamiento de pedidos al elegir una
tecnología de base de datos adecuada, por ejemplo, una base de datos Nosql para esquemas
flexibles y escrituras
rápidas y optimizar el rendimiento de las
consultas. Esto asegura que el
servicio pueda manejar cargas
incrementadas de manera eficiente a
medida que escala la aplicación. Al seguir estas mejores
prácticas y estrategias, puede escalar de manera efectiva sus aplicaciones de microservicios para adaptarse a cargas cambiantes, lo que garantiza un
rendimiento y una resiliencia óptimos.
29. Introducción al monitoreo y la observabilidad: En una arquitectura de microservicios, las aplicaciones están compuestas por múltiples servicios independientes que se comunican entre sí
para cumplir
con los requisitos del negocio. En consecuencia, es fundamental
contar con una estrategia efectiva de monitoreo y observabilidad para asegurar la salud general y el
desempeño del sistema. En esta sección,
discutiremos la importancia del monitoreo y la
observabilidad en un entorno de microservicios e introduciremos las mejores prácticas
y herramientas para monitoreo, registro y rastreo con ejemplos
prácticos, monitoreo
versus observabilidad. Antes de sumergirse en las
mejores prácticas y herramientas, es fundamental diferenciar entre monitoreo
y observabilidad. El monitoreo se refiere al proceso de recopilación y análisis de
datos de su aplicación para
identificar posibles problemas, botella de
rendimiento
u otras anomalías. El monitoreo le proporciona información
valiosa sobre el estado
actual de su sistema, lo que le permite
abordar de manera proactiva los problemas antes de
que escalen. Por ejemplo, el monitoreo puede
ayudarlo a identificar un pico en las tasas de error dentro de
un microservicio específico. Luego puede investigar
la causa de los errores y aplicar correcciones para
evitar más problemas. La observabilidad, por otro lado, es la capacidad de entender
el estado interno de nuestro sistema a partir de los datos generados por el propio sistema, como registros,
métricas y trazas. Y el sistema observable le
proporciona
los datos necesarios
para diagnosticar y resolver problemas incluso en entornos
complejos de microservicios. Considere un escenario en el que un usuario experimenta tiempos de respuesta lentos al interactuar
con
su aplicación con un alto nivel
de observabilidad, puede analizar
los rastros, registros y métricas para identificar
la causa raíz
del problema y aplicar
las correcciones necesarias.
30. Mejores prácticas para monitoreo y observabilidad: Implementar una estrategia
integral de monitoreo y observabilidad es fundamental para mantener
el estado y rendimiento de sus aplicaciones de
microservicios. Considere las siguientes
mejores prácticas. Uno, recopilar y
agregar métricas. Recopilar métricas de
cada microservicio, como tasas de solicitud, tasas error y tipos de respuesta, agregar estas métricas en una ubicación
centralizada para obtener
una visión general del
estado y el rendimiento de los sistemas, por ejemplo, una
aplicación de comercio electrónico simple puede consistir en microservicios para la administración
de
inventario, autenticación de
usuarios y
procesamiento de pedidos mediante la recopilación métricas de cada uno de
estos servicios y agregándolos en
una ubicación céntrica. Puede monitorear el
estado general de la aplicación e identificar rápidamente cualquier
problema o cuellos de botella. Para implementar el registro estructurado, use el inicio de sesión estructurado para registrar eventos y contextos
importantes
dentro de sus microservicios. Los registros estructurados son
más fáciles de analizar, filtrar y analizar, lo que le permite identificar
y resolver problemas
rápidamente. Por ejemplo, en lugar de registrar mensajes de texto
no estructurados, use JSON u otro formato
estructurado para registrar información relevante, como la marca de tiempo, el nombre del
microservicio, nivel de
registro y un mensaje
que describa el evento. Esto facilita la
búsqueda y análisis de datos de registro, lo que le
ayuda a identificar tendencias y patrones en
sus microservicios. Tres, rastreo distribuido,
implementar rastreo distribuido para rastrear las solicitudes a medida que
fluyen a través de sus microservicios. Esto le permite comprender las interacciones
entre
los servicios e identificar la fuente
de posibles problemas o cuellos de botella de rendimiento, por ejemplo, en la aplicación de comercio electrónico
mencionada anteriormente, un usuario puede experimentar tiempos de respuesta
lentos
al realizar un pedido. Al implementar el rastreo
distribuido, puede rastrear la solicitud desde la interfaz de usuario
a través de la autenticación, administración de
inventario y los microservicios de
procesamiento de pedidos. Esto puede ayudarle a
identificar la fuente de la desaceleración y tomar medidas
correctivas. Para alertas
y notificaciones de configuración. Configure alertas y
notificaciones para informarle
proactivamente
de posibles problemas, como mayores
tasas de error o picos de latencia. Esto le permite responder
rápidamente a los problemas antes de que
afecten a sus usuarios. ejemplo, configure una alerta para un microservicio que
envíe un correo electrónico
o una notificación de Slack cuando la tasa de error supere
un umbral predefinido. Esto puede ayudarte a
identificar y resolver
problemas rápidamente minimizando el
impacto en tus usuarios.
31. Herramientas de monitoreo y tecnologías: Existen numerosas herramientas
y tecnologías de
monitoreo disponibles para ayudarlo a implementar una estrategia
efectiva de monitoreo y observabilidad. Las siguientes son algunas herramientas
populares que puedes usar en tus
aplicaciones de microservicios. Uno, Prometeo. Prometheus es un sistema de
monitoreo y
alerta de código abierto que recopila y almacena métricas
de
series temporales de sus microservicios. Cuenta con un potente lenguaje
de
consulta de QL que
le permite analizar las
métricas recopiladas y generar información
útil sobre el estado y el rendimiento de
su aplicación. Para reembolsar. Ruanda es una
plataforma de
visualización y análisis de código abierto que se integra
con diversas fuentes de datos, como Prometheus, para crear paneles
personalizables. El reembolso le permite visualizar
métricas, crear alertas y
comprender mejor el rendimiento y la salud
de sus microservicios. Three, ELK Stack, ELK Stack, Elasticsearch,
Log Stash y Kibana son una popular solución de código
abierto para la administración y análisis de registros. Elasticsearch almacena
e indexa registros, Log Stash procesa y
enriquece los datos de registro. Y Kibana proporciona una
interfaz de usuario para buscar, visualizar y analizar registros. Para el agar. Hagar es un sistema de
rastreo distribuido de código abierto desarrollado por era que proporciona capacidades de rastreo de
extremo a extremo
para sus microservicios. Le permite rastrear las solicitudes a medida que fluyen a través de
sus servicios, lo que le permite identificar cuellos de botella e identificar
el origen de los problemas.
32. Monitoreo de microservicios en Kubernetes: Kubernetes es una
plataforma de orquestación de
contenedores ampliamente utilizada que proporciona soporte integrado para monitoreo y observabilidad. Al implementar microservicios
en Kubernetes, puede aprovechar las
siguientes funciones para mejorar su estrategia de monitoreo y
observabilidad. Uno, servidor de métricas de Kubernetes. El servidor de métricas es un componente
integrado de Kubernetes que recopila métricas de uso de
recursos, como la utilización de CPU y memoria de
sus microservicios. Estas métricas se pueden utilizar para monitorear el rendimiento
de sus servicios y
tomar decisiones informadas sobre asignación y escalado de
recursos. Para el
registro de Kubernetes, kubernetes admite la agregación
de registros a nivel de clúster, lo que le permite recopilar
registros de todos sus microservicios y
almacenarlos en una ubicación central. Esto simplifica la
administración y el análisis de registros, lo que le
ayuda a identificar tendencias y patrones en sus servicios. Tres, Kubernetes, tala de entrada
y salida. El registro de entrada y salida proporciona visibilidad tráfico de
la red que entra y sale de sus microservicios. Al analizar estos datos, puede detectar posibles amenazas de
seguridad o botella de
rendimiento
en su aplicación. En resumen, el monitoreo y la observabilidad son
aspectos críticos de la administración de aplicaciones de
microservicios, ya que le
permiten
mantener el estado y el rendimiento de su sistema. Al implementar las
mejores prácticas y aprovechar las
herramientas y tecnologías adecuadas, puede diagnosticar
y resolver problemas de manera eficiente, asegurando el buen funcionamiento de sus aplicaciones
basadas en microservicios.
33. Caso de Netflix de microservicios: Netflix, el
servicio de transmisión de video
líder en el mundo con más de 220
millones de suscriptores, ha logrado crear una
arquitectura de sistema robusta, escalable y resiliente al adoptar
microservicios y un ws. Este estudio de caso examina arquitectura del sistema de
Netflix y analiza las lecciones que se
pueden aprender de su implementación exitosa
de microservicios. arquitectura del sistema de Netflix consta de dos componentes principales en Ws para alojar los
datos y open connect, una red interna de
entrega de contenido para atender solicitudes. Ambos componentes estamos
simultáneamente para ofrecer una experiencia perfecta
a millones de usuarios. La arquitectura de software está compuesta por tres componentes
principales, cliente, backend y red de entrega de
contenido. Netflix ha desarrollado
numerosos microservicios para manejar diferentes
aspectos de su negocio, como administración de usuarios, administración de
contenido, motores de
recomendación,
facturación y servicios de reproducción. Cada microservicios se desarrolló, desplegó y mantuvo de
forma independiente, lo
que facilita
la actualización y escala servicios
individuales sin
afectar a todo el sistema. Netflix es API
Gateway construido usando la biblioteca del zoológico actúa como un único punto de entrada para
todas las solicitudes externas. La puerta de enlace API es
responsable de manejar el enrutamiento, autenticación
, la limitación de velocidad y la seguridad. Mediante el uso de una puerta de enlace API, Netflix puede agilizar
la comunicación entre los clientes
y los microservicios, proporcionando una
interfaz unificada y mejorando la
capacidad de administración de los sistemas. Veamos los patrones de
comunicación utilizados por los microservicios de Netflix. Uno, la
comunicación sincrónica implica comunicación
directa en tiempo real
entre microservicios. Normalmente, netflix
utiliza protocolos HTTP, HTTPS y APIs
restful para comunicación
sincrónica cuando un usuario inicia una solicitud, como reproducir un video, varios microservicios se
comunican sincrónicamente para validar la solicitud del usuario, verifica el estado de la suscripción
y obtiene la URL del video. A una
comunicación sincrónica permite que los microservicios
interactúen sin esperar una respuesta
inmediata. Así, el acoplamiento,
sus dependencias. Netflix usa colas de mensajes, como Apache Kafka para una comunicación
sincrónica, lo que permite que los microservicios
intercambien mensajes sin requerir
una respuesta inmediata. Este
patrón de comunicación se usa a menudo para tareas
intensivas de datos, como
iniciar sesión en las actividades de los usuarios, generar recomendaciones
o actualizar metadatos de video. En un ecosistema de microservicios, es crucial contar con
un mecanismo que
permita que los microservicios se descubran entre
sí y distribuyan las solicitudes
entrantes
a través múltiples instancias
para el balanceo de carga, netflix desarrolló Eureka, un registro de
servicios para permitir descubrimiento de servicios y equilibrio de
carga entre
sus microservicios, Eureka permite
que cada microservicio se registre y descubrir otros servicios
registrados para comunicarse con
ellos de manera eficiente. Netflix ha implementado
la biblioteca Hystrix como un
mecanismo de disyuntor para manejar posibles fallas y comunicación de
microservicios, Hystrix envuelve la comunicación
entre microservicios, monitoreando la
tasa de éxito de las solicitudes si la tasa de error supera un umbral
predeterminado, Hystrix desactiva el
disyuntor, comunicación
con el servicio fallido y proporcionando una respuesta de
respaldo. Este enfoque ayuda a mantener la resiliencia
del sistema y minimiza el impacto de
las fallas en el sistema general.
34. Lecciones aprendidas de los microservicios de Netflix: Basado en el estudio de caso de Netflix, aquí están las lecciones
aprendidas de Netflix es la
implementación de microservicios. Uno, abrazar la modularidad. desglose de los programas de
software más grandes en componentes
más pequeños
permite un escalado rápido, fácil aislamiento de los componentes
defectuosos y
capacidades de seguimiento mejoradas. Para aprovechar la Nube. uso de
servicios en la nube como AWS, puede proporcionar una
infraestructura de datos escalable y
robusta que puede manejar las demandas de
millones de usuarios. Tres, Optimized
Content Delivery, desarrollo de una red interna de entrega de
contenido como open connect puede garantizar una
experiencia de transmisión perfecta para los usuarios en varias ubicaciones
geográficas. Para monitorear y
aislar microservicios. La implementación de herramientas como Zoom e Hystrix para monitorear los datos seguros
del tráfico y aislar
microservicios puede ayudar a mantener un sistema
resiliente de alto rendimiento. Cinco, utilizar el procesamiento de
datos en tiempo real, aprovechar las canalizaciones de
procesamiento de flujo y las herramientas de big data pueden mejorar la experiencia
del usuario al proporcionar recomendaciones
y sugerencias
personalizadas. En conclusión, arquitectura de microservicios de
Netflix se basa en diversos
patrones de comunicación y herramientas para permitir interacciones
eficientes y confiables entre los servicios. Al implementar el descubrimiento de
servicios, equilibrio de
carga, los
interruptores automáticos y las puertas de enlace API, Netflix ha creado un sistema resistente y altamente
escalable que puede manejar millones de solicitudes de su base de usuarios
global. Comprender estos patrones
y herramientas de
comunicación puede proporcionar información
valiosa para las organizaciones
que buscan adoptar una arquitectura similar
basada en microservicios.
35. Ejercicio: cómo identificar los límites de servicios: Bienvenido al
ejercicio práctico sobre la identificación límites de
servicio en la arquitectura de
microservicios. En este ejercicio, pondremos en práctica
nuestros
conocimientos de diseño de microservicios y desglosaremos una hipotética aplicación de
comercio electrónico en microservicios potenciales. Empecemos. Muy bien, repasemos brevemente la aplicación de comercio electrónico con la que
trabajará. Nuestra aplicación cuenta con seis áreas funcionales
principales. Uno, catálogo de productos
a carrito de compras. Tres, gestión de pedidos. Para la gestión de inventarios,
lucha contra la gestión de usuarios. Seis, procesamiento de pagos. Su tarea es utilizar los principios de descomposición del
servicio para identificar microservicios potenciales para cada área funcional, considerando las dependencias
entre ellos y con el objetivo de
minimizar el acoplamiento y
maximizar la cohesión.