Podcast
Questions and Answers
¿Qué es la hiperconvergencia?
¿Qué es la hiperconvergencia?
Es un marco/arquitectura de TI en el que se integran y se gestionan de manera unificada los recursos computacionales, de almacenamiento y de red en un único sistema o plataforma.
¿Cuál es la función de vCenter?
¿Cuál es la función de vCenter?
Es una plataforma de gestión centralizada de VMware que proporciona una interfaz unificada para administrar y supervisar entornos de virtualización.
¿Cuáles de las siguientes son ventajas de la virtualización? (Selecciona todas las que apliquen)
¿Cuáles de las siguientes son ventajas de la virtualización? (Selecciona todas las que apliquen)
¿Qué es un hipervisor?
¿Qué es un hipervisor?
Signup and view all the answers
¿Qué tipo de hipervisor se instala directamente en el hardware físico?
¿Qué tipo de hipervisor se instala directamente en el hardware físico?
Signup and view all the answers
¿Cuál de los siguientes formatos encapsula una máquina virtual completa?
¿Cuál de los siguientes formatos encapsula una máquina virtual completa?
Signup and view all the answers
La virtualización ligera permite la ejecución de múltiples instancias en diferentes sistemas operativos anfitriones.
La virtualización ligera permite la ejecución de múltiples instancias en diferentes sistemas operativos anfitriones.
Signup and view all the answers
¿Qué es un Dockerfile?
¿Qué es un Dockerfile?
Signup and view all the answers
¿Qué herramienta se utiliza para orquestar contenedores?
¿Qué herramienta se utiliza para orquestar contenedores?
Signup and view all the answers
¿Qué son los microservicios?
¿Qué son los microservicios?
Signup and view all the answers
Los microservicios son siempre pequeños en tamaño.
Los microservicios son siempre pequeños en tamaño.
Signup and view all the answers
¿Qué desafíos se presentan en el desarrollo inicial de sistemas distribuidos?
¿Qué desafíos se presentan en el desarrollo inicial de sistemas distribuidos?
Signup and view all the answers
¿Cuál de las siguientes es un método de comunicación asíncrono entre microservicios?
¿Cuál de las siguientes es un método de comunicación asíncrono entre microservicios?
Signup and view all the answers
¿Qué tecnología utiliza gRPC?
¿Qué tecnología utiliza gRPC?
Signup and view all the answers
¿Qué es un Broker de Mensajes?
¿Qué es un Broker de Mensajes?
Signup and view all the answers
¿Qué es CQRS?
¿Qué es CQRS?
Signup and view all the answers
¿A qué se refiere ACID en bases de datos?
¿A qué se refiere ACID en bases de datos?
Signup and view all the answers
Los microservicios deben comunicarse directamente entre sí.
Los microservicios deben comunicarse directamente entre sí.
Signup and view all the answers
¿Qué hace un API Gateway?
¿Qué hace un API Gateway?
Signup and view all the answers
¿Cuál es una ventaja del Service Mesh?
¿Cuál es una ventaja del Service Mesh?
Signup and view all the answers
El protocolo Two-Phase Commits (2PC) permite que todos los nodos de un sistema __________ se pongan de acuerdo para consolidar una transacción.
El protocolo Two-Phase Commits (2PC) permite que todos los nodos de un sistema __________ se pongan de acuerdo para consolidar una transacción.
Signup and view all the answers
Empareja las tecnologías con sus descripciones:
Empareja las tecnologías con sus descripciones:
Signup and view all the answers
¿Qué es la agregación de logs?
¿Qué es la agregación de logs?
Signup and view all the answers
¿Qué métricas se deben capturar en los microservicios?
¿Qué métricas se deben capturar en los microservicios?
Signup and view all the answers
¿Qué son las trazas distribuidas?
¿Qué son las trazas distribuidas?
Signup and view all the answers
¿Cuál es la finalidad de las alertas en un sistema?
¿Cuál es la finalidad de las alertas en un sistema?
Signup and view all the answers
¿Qué herramientas son productos relevantes para la monitorización de microservicios?
¿Qué herramientas son productos relevantes para la monitorización de microservicios?
Signup and view all the answers
La seguridad no debe considerarse en las etapas iniciales del desarrollo de un sistema.
La seguridad no debe considerarse en las etapas iniciales del desarrollo de un sistema.
Signup and view all the answers
¿Qué significa el término 'mínimo privilegio' en un sistema?
¿Qué significa el término 'mínimo privilegio' en un sistema?
Signup and view all the answers
¿Qué es la idempotencia?
¿Qué es la idempotencia?
Signup and view all the answers
¿Qué se debe hacer en caso de un fallo con otro microservicio según el patrón Circuit Breaker?
¿Qué se debe hacer en caso de un fallo con otro microservicio según el patrón Circuit Breaker?
Signup and view all the answers
¿Qué se entiende por escalado vertical?
¿Qué se entiende por escalado vertical?
Signup and view all the answers
Study Notes
Virtualización
- La hiperconvergencia es un marco de TI que combina recursos informáticos, almacenamiento y red en un solo sistema.
- vCenter es una plataforma de gestión centralizada de VMware que proporciona una interfaz unificada para administrar y supervisar entornos de virtualización.
- La virtualización crea versiones virtuales de recursos físicos como servidores, almacenamiento, redes y sistemas operativos.
- Emular es la capacidad de un sistema o software para imitar el comportamiento de otro sistema o entorno.
Ventajas de la Virtualización
- Optimización del uso del hardware (mayor eficiencia)
- Aislamiento entre máquinas virtuales (seguridad)
- Mejor aprovisionamiento y administración del entorno
- Implementación y aprovisionamiento rápidos.
- Escalabilidad y flexibilidad
- Mejora de la eficiencia energética
Extensiones de Archivos
- vmx: Contiene la configuración de una máquina virtual (se inicia con doble clic).
- vdi: Formato de disco virtual utilizado por Oracle VM VirtualBox.
- vbox: Contiene la configuración de una máquina virtual.
- ova: Formato de archivo que encapsula una máquina virtual completa, incluyendo su configuración, discos virtuales y metadatos.
- vmdk (Virtual Machine Disk): representa discos duros virtuales de máquinas virtuales que contienen el sistema operativo, aplicaciones y datos.
- vmem: Almacena el contenido de la memoria virtual de un proceso virtualizado.
- nvram: Almacena la configuración de la memoria no volátil (NVRAM) de la máquina virtual (configuración de BIOS/UEFI, reloj y red).
- vmsd: Almacena metadatos de instantáneas de una máquina virtual.
- vswp: Archivo de intercambio de memoria virtual de una máquina virtual.
- Thin provisioning: El almacenamiento crece según sea necesario, asignado de forma justa y puntual.
- Thick provisioning: Asigna el espacio completo desde el inicio.
- Open Virtualization Format (OVF): Estándar abierto para empaquetar y distribuir máquinas virtuales.
- OVA: Archivo comprimido con el contenido de un OVF.
- Formato VHD: Archivo de imagen de disco usado por Hyper-V.
Hipervisores
- Un hipervisor crea y ejecuta máquinas virtuales, aislándolas del sistema operativo host y sus recursos.
- Hipervisor tipo I (bare metal): Se instala directamente en el hardware físico de un servidor. Ejemplos: VMware ESX Server, XEN Server, KV, Hyper-V.
- Hipervisor tipo 2 (hosted): Se ejecuta en un sistema operativo host (Windows o Linux). Ejemplos: VMware Player, VirtualBox, Parallels.
Requisitos para Instalar Software de Virtualización
- Extensiones: Intel VT-x (para Intel 8086), AMD-V (para AMD).
- Comprobar si tiene AMD-V instalado:
- Flag "svm"
- Comando:
cat /proc/cpuinfo
- Comprobar si tiene VT-x instalado:
- Linux:
cat /proc/cpuinfo
, comando:lscpu
- macOS:
sysctl machdep.cpu.features
- Linux:
Virtualización de Almacenamiento
-
A nivel de bloque:
- Dispositivo (RAID)
- Servidor (LVM): software en Linux.
- Red (SAN, vSAN)
-
A nivel de archivo:
- NAS (NFS/CIFS/AFP)
Virtualización de Puestos de Usuario
-
Escritorio:
- VDI (Infraestructura de escritorio virtual): Las organizaciones administran escritorios de usuario en un entorno centralizado.
- Soluciones: VMware Horizon, XEN en desktop.
-
Aplicaciones: Se conecta directamente a la aplicación que desea lanzar.
- Citrix
- XenApp
### Virtualización Ligera
- También conocida como virtualización basada en contenedores.
- Permite la ejecución de múltiples instancias aisladas y seguras de un entorno operativo en un solo sistema operativo anfitrión.
Características de la Virtualización Ligera
- Kernel Compartido
- Aprovisionamiento y escalabilidad rápidos
- Portabilidad
- Menor sobrecarga
Tecnologías de Virtualización Ligera
-
Docker:
- Imagen: Archivo binario preparado.
- Contenedor: Se ejecuta en memoria.
- CRI-O
- Containerd
- Podman: Código abierto desarrollado por Red Hat.
- Core OS RKT (Rocket)
- Mesos
- LXC
- OPENVZ
- Virtuozzo Containers
- Docker compose: Permite configurar un entorno de desarrollo con múltiples servicios o contenedores a través de un archivo YAML.
-
Orquestadores:
- Kubernetes (k8s)
- Docker Swarm: Orquestador integrado en Docker que agrupa hosts Docker en un clúster.
Ecosistema Docker
- Docker CLI: Interfaz de línea de comandos para comunicarse con la API de Docker.
- Kubernetes: Plataforma de código abierto para la orquestación de contenedores.
- CRI: Plugin que permite a Kubernetes comunicarse con diferentes tipos de contenedores (RCK).
- CRI-O: Implementación de la Container Runtime Interface (CRI) para Kubernetes, que usa runtimes de Open Container Initiative (OCI).
- Container-d: Demonio que gestiona el ciclo de vida completo de los contenedores.
-
OCI-Spec: Define el entorno de ejecución de un contenedor y el formato de empaquete de las imágenes.
- Especificación de Imágenes (OCI Image Specification): Define el formato de las imágenes de contenerdores.
- Especificación de Runtimes (OCI Runtime Specification): Define la ejecución de contenedores y las configuraciones para gestionar su ciclo de vida.
- RunC: Herramienta de línea de comandos de Linux para crear y ejecutar contenedores según la especificación de runtime de contenedores de OCI.
Plataformas
-
IaaS (Infraestructura como servicio)
-
Amazon AWS:
- S3: Almacenamiento en modo objeto.
- EC2: Máquinas virtuales.
- EBS: Almacenamiento en modo bloque.
-
Red Hat Openstack:
- NOVA: Gestión y aprovisionamiento de instancias de máquinas virtuales.
- Cinder: Almacenamiento en modo bloque.
- Swift: Almacenamiento en modo objeto.
- Neutron: Recursos de red.
- Horizon: Cuadro de mando web.
- Azure (Microsoft)
- Google Cloud
- SATA Cloud: Almacenamiento basado en discos SATA.
-
Amazon AWS:
-
PaaS (Plataforma como servicio) : Permite desarrollar, ejecutar y gestionar aplicaciones de software sin preocuparse por la infraestructura.
- Openshift: Ofrece una plataforma para montar entornos de ejecución para equipos de desarrollo.
- Heroku: Similar a Openshift pero solo se usa en modo nube.
- CloudFoundry: Soporta diversos lenguajes de programación.
- SaaS (Software como servicio): Las aplicaciones se alojan en la nube y se accede a través de Internet. Ejemplo: Gmail.
Por qué Usar Contenedores
- Contenedor: instancia de ejecución de una imagen de Docker.
-
Ventajas:
- Se usa menos memoria y almacenamiento.
- Facilidad de despliegue ("Si funciona en mi máquina, funciona en todas").
- Portabilidad y escalabilidad.
- Ahorro de costes.
- Ideales para arquitecturas de microservicios.
- "Enjaular un proceso": chroot: Crea un entorno aislado dentro del sistema de archivos, limitando el acceso a un subdirectorio específico.
### Docker
- Plataforma de código abierto que facilita la creación, el despliegue y la ejecución de aplicaciones utilizando contenedores.
- Características:
- Solución de contenedores más usada.
- Gran soporte y comunidad de usuarios.
- Aplicaciones de terceros complementarias.
- Soporte para Windows, Linux y Mac.
- Versión empresarial.
### Dockerfile
-
Características:
- Instrucciones secuenciales ordenadas.
- Cada instrucción crea una capa.
- Cada capa tiene un identificador único.
- Las capas se cachean y se reutilizan (deduplicación).
### Instrucciones Dockerfile
- FROM (scratch): Indica la imagen base de la que se crea la nueva imagen.
- ARG: Argumentos que se pasan por la línea de comandos.
- RUN: Ejecuta un comando y guarda el resultado como una nueva capa.
- ADD: Copia un archivo del host al contenedor.
- COPY: Lo mismo que ADD pero con la funcionalidad añadida de descomprimir archivos tar y la capacidad de añadir archivos vía URL.
- ENV: Declara una variable de entorno en el contenedor.
- CMD: Especifica el comando y argumentos que se van a pasar al contenedor.
- WORKDIR: Define el directorio de trabajo para el contenedor.
- VOLUME: Crea un volumen compartido por diferentes contenedores o con el host.
- ENTRYPOINT: Comando que se ejecuta por defecto al arrancar el contenedor.
- EXPOSE: Abre un puerto del contenedor.
- USER: Define el usuario por defecto del contenedor.
- LABEL: Agrega metadatos a la imagen.
Diferencias entre CMD y Entrypoint
- Si solo se especifica
CMD
: Docker ejecutará ese comando usando el entrypoint por defecto/bin/sh -c
. - Si se especifican ambos:
-
ENTRYPOINT
especifica el ejecutable que usará el contenedor. -
CMD
corresponde con los parámetros a usar con dicho ejecutable.
-
### De imagen al repositorio
- Imagen: Pila de capas creadas desde DockerFile.
### Registro de Contenedores
- Públicos: Docker Hub
- Privados: Nexus, JFrog Artifactory, Archiva, Cloud (Google Container Registry, Azure Container Registry, AWS Elastic Container Registry).
### Microservicios
- Definición: Estilo de arquitectura de software que estructura una aplicación como un conjunto de servicios pequeños e independientes que se comunican entre sí.
-
Características:
- Mantenibles y testeables.
- Débilmente acoplados.
- Mejora la cohesión: responsabilidades y funcionalidades dentro de un microservicio están relacionadas entre sí.
- Se comunican por http.
- Se despliegan de manera independiente.
- Agilidad, escalabilidad, disponibilidad, reutilización.
- Distribución de responsabilidad.
- Mejora el aislamiento de fallas, elimina el compromiso a largo plazo con una sola pila de tecnología.
- El código para diferentes servicios se puede escribir en diferentes idiomas.
- Facilita la comprensión de la funcionalidad de un servicio por parte de los desarrolladores.
- Permite la entrega continua.
- Organizados sobre las capacidades del negocio.
- Pertenecen a un equipo pequeño.
-
Notas:
- No todo funcionará mejor con Microservicios.
- Son cajas negras que tienen una funcionalidad definida y producen un resultado (ocultación de información).
- Son un tipo de Arquitectura Orientada a Servicios SOA.
- No es necesario que un microservicio esté asociado al mundo de contenedores.
### Nuevos Problemas con Microservicios
- Latencia: Un microservicio puede consumir de otros, si esta latencia de red no es buena, puede haber problemas.
- Fallos en la red.
- Consistencia de los datos (ACID).
- Sobrecarga de operaciones.
- Resolución de problemas (trazabilidad, autoría).
- Demasiadas opciones para elegir.
Retos con Microservicios
- El desarrollo inicial de sistemas distribuidos puede ser complejo.
- Probar una aplicación basada en microservicios puede ser complicado en comparación con el enfoque monolítico.
Comunicar Microservicios
- Bloqueo síncrono
-
Asíncrono:
- Petición-Respuesta
- Dirigido por eventos (Evento Driven): Colocar datos/eventos en una cola para que sean consumidos por suscriptores.
- Datos compartidos
Comunicar Microservicios (II) - RPC
- RPC (Remote Procedure Call): Permite la comunicación de aplicaciones distribuidas.
- SOAP: Muy usado en la AGE por el ENI.
- RMI (Remote Method Invocation): Tecnología de Java para invocar métodos en un objeto remoto.
-
gRPC: Framework de Google para la comunicación de alto rendimiento entre servicios.
- Se necesita una parte en cliente y otra en servidor.
- Se basa en protocol buffers(protobuf): tecnología de Google para la serialización y deserialización de datos estructurados.
- Mensajes con extensión
.proto
. - Se envía en un paquete binario.
-
protoc
(compilador) genera el código para la parte cliente y servidor.
- Mensajes con extensión
GraphQL - Facebook
- Es un lenguaje de consulta para APIs y un tiempo de ejecución para ejecutar esas consultas mediante datos existentes.
- Permite a los clientes definir consultas basadas en esquemas, que pueden residir en múltiples fuentes (como microservicios).
- Consultas y obtienes lo que necesitas.
- Clientes para móviles, o Fronts (React).
- Función: brindar a los clientes exactamente los datos que solicitan y nada más.
- Apollo Servers: biblioteca de servidor GraphQL que se utiliza para crear una API GraphQL completa y escalable.
- Apollo Client: Conector que va a permitir de forma fácil y rápida consultar un servidor GraphQL.
Conceptos
-
Resolver: función responsable de obtener los datos necesarios para una operación específica definida en el esquema de GraphQL.
- Son fundamentales para la ejecución de consultas y mutaciones en GraphQL, ya que convierten las solicitudes en datos recuperables desde diversas fuentes, como bases de datos, servicios web, archivos, etc.
- Mutation: operación utilizada para modificar datos en el servidor (RUD).
Broker de mensajes
- Intermediario en la comunicación entre diferentes aplicaciones o servicios que permite el intercambio de mensajes de manera eficiente y fiable.
- Colas de mensajes: Listas ordenadas de mensajes que esperan ser procesados.
- Temas y Suscripciones: Modelos de publicación y suscripción donde los productores publican mensajes en "temas" y los consumidores se suscriben a estos temas para recibir mensajes.
- Garantiza que un conjunto de operaciones de mensajes se ejecute de manera atómica.
-
Características:
- Desacoplamiento: Permite que los productores y consumidores de mensajes operen de forma independiente, sin necesidad de que uno conozca la existencia del otro.
- Almacenamiento de Mensajes: Almacena mensajes temporalmente hasta que los consumidores estén listos para procesarlos, lo que garantiza que los mensajes no se pierdan.
- Escalabilidad: Facilita la gestión de la carga al distribuir mensajes entre múltiples consumidores, mejorando así la capacidad de procesamiento.
- Durabilidad y Persistencia: Los mensajes pueden ser almacenados de forma persistente para garantizar que no se pierdan, incluso si hay fallos en el sistema.
-
Seguridad: Ofrece mecanismos para asegurar la transmisión de mensajes, incluyendo autenticación y autorización.
- Autenticar: Proceso de verificar la identidad de un usuario/entidad.
- Autorizar: Proceso de verificar si el usuario autenticado tiene permiso para acceder a un determinado recurso.
Tipos de Broker de Mensajes
- Apache Kafka
- RabbitMQ
- Active MQ
- Google Cloud Pub/sub
API Gateway y Service Mesh (Patrones)
-
APIGateway: es un servidor que actúa como intermediario entre los clientes y un conjunto de servicios backend.
- Su principal función es recibir todas las solicitudes de API externas, enrutarlas a los servicios backend apropiados, combinar las respuestas si es necesario y devolver la respuesta adecuada al cliente.
- No es buena idea que un microservicio hable con otro microservicio directamente. Para ello se utiliza el patrón de diseño: “Apigateway”.
-
SAGA: patrón de diseño utilizado en arquitecturas de microservicios para manejar transacciones distribuidas de manera que garantice la consistencia eventual de los datos a través de operaciones atómicas locales en cada servicio involucrado.
- Coordina múltiples cambios en estados, pero evitando bloquear recursos por largos periodos de tiempo.
- Estrategias de compensación en una bbdd al no haber rollback.
- CQRS: es un patrón de diseño de software que nos muestra cómo separar la lógica de nuestras aplicaciones para separar las lecturas de las escrituras.
-
CIRCUIT BREAKER (Tolerancia a fallos): para mejorar la resiliencia y estabilidad de aplicaciones distribuidas. Este patrón se implementa principalmente para manejar fallas en la comunicación entre servicios y prevenir que estos errores se propaguen, evitando un fallo en cascada.
- Nota: un servicio puede fallar al estar otro caído.
Ejemplo de Netflix
- Tecnologías envueltas:
-
Spring cloud: conjunto de herramientas y bibliotecas de software que proporcionan soluciones para construir aplicaciones y sistemas distribuidos basados en microservicios en el ecosistema de Spring.
- Capa que recubre a los servicios de netflix para hacerlos mas fáciles de usar.
-
Spring Config Server: herramienta para externalizar la configuración de nuestras aplicaciones.
- Generalmente se utiliza en un entorno de sistemas distribuidos para gestionar de forma centralizada estas configuraciones.
-
Spring Cloud Netflix Eureka: servicio rest que permite al resto de microservicios registrarse en su directorio.
- Esto es muy importante, puesto que no es Eureka quien registra los microservicios, sino los microservicios los que solicitan registrarse en el Eureka.
- Spring Cloud Netflix Ribbon: librería que permite la comunicación entre diferentes procesos cuya principal característica es proporcionar diferentes algoritmos para realizar balanceo de carga desde el lado del cliente (client-side load balancing).
- Spring Cloud Netflix Hystrix: librería que forma parte del stack de Spring Cloud, desarrollada por Netflix, que facilita la implementación del patrón circuit breaker dentro de una arquitectura de servicios distribuidos.
- Spring Cloud Netflix Hystrix Dashboard: dashboard que integra las métricas capturadas donde se pueden observar número de peticiones exitosas, fallidas, timeouts, número de hilos, número de hosts, percentiles de tiempos de respuesta… en tiempo real de cada una de las peticiones gestionadas por Hystrix.
- Spring Cloud Netflix Zuul: Zuul es un microservicio que funciona como proxy gestionando el acceso a los múltiples servicios que componen nuestro sistema, en otras palabras, decide qué microservicios serán los encargados de atender a cada una de las peticiones recibidas.
-
Spring cloud: conjunto de herramientas y bibliotecas de software que proporcionan soluciones para construir aplicaciones y sistemas distribuidos basados en microservicios en el ecosistema de Spring.
Service MESH
-
Es una práctica de arquitectura para administrar y visualizar conjuntos de múltiples microservicios basados en contenedores.
-
Tecnología diseñada para abordar las complejidades de las arquitecturas de microservicios
- Esta responsabilidad se elimina de los microservicios
-
En términos generales, un service mesh puede ser considerado como una infraestructura de software dedicada a manejar la comunicación entre microservicios.
-
Características:
-
Abstracción:
- Abstrae a los desarrolladores de los problemas de arquitectura de microservicios.
- Balanceo de Carga.
- Discovery.
- Centralización: punto de entrada para controlar las funciones de los microservicios
- Trazabilidad
-
Observabilidad:
- Telemetría y Métricas: Recolecta datos sobre las solicitudes (latencia, tasas de error, etc.) y los expone para su monitoreo.
- Tracing Distribuido: Permite rastrear la ruta de una solicitud a través de múltiples servicios para identificar cuellos de botella y problemas de rendimiento.
- Seguridad: Autenticación, Autorización y cifrado
- Resiliencia
-
Abstracción:
Ejemplos Populares de Service Mesh
- Envoy: proxy de nivel de aplicación desarrollado para facilitar la comunicación entre microservicios en arquitecturas distribuidas.
- Istio: intercepta todas las llamadas entrantes/salientes del microservicio.
- Elastic search: Trazabilidad
- Grafana: Observabilidad
-
Maistra: proporcionar una implementación segura y gestionada del service mesh en OpenShift y Kubernetes.
- distribución específica de Istio.
- JAEGER: monitorear y solucionar problemas en aplicaciones distribuida.
-
Kiali: herramienta de observabilidad y gestión de service mesh diseñada específicamente para integrarse con Istio.
- Proporciona una interfaz gráfica de usuario que permite a los desarrolladores y operadores visualizar, supervisar y gestionar los microservicios y sus interacciones dentro de un service mesh.
- Prometheus: sistema de monitoreo y alerta de código abierto diseñado para registrar métricas en tiempo real en una base de datos de series temporales.
Compartir Datos
- Volúmenes
- NAS/S3
- BBDD en modelos con segregación de responsabilidad (CQRS)
BBDD
- ACID: Atomicy, Consistency, Isolation, Durability
- CQRS
- Transacciones distribuidas - 2PC
- SAGAS: El patrón de diseño saga es una forma de administrar la coherencia de los datos entre los microservicios en escenarios de transacciones distribuidas.
Transacciones distribuidas - 2PC
- Two-Phase Commits – 2PC: es un protocolo de consenso distribuido que permite a todos los nodos de un sistema distribuido ponerse de acuerdo para consolidar a una transacción. El objetivo del protocolo es que todos los nodos realicen un commit de la transacción o la aborten
-
Fases:
- Fase de voting: el coordinador intenta preparar a todos para el commit, contactando con todas las réplicas que participan, las cuales contestan si aceptan o abortan la transacción.
- Fase de commit: Cuando todas las réplicas han respondido el coordinador busca los conflictos, si los hay.
Frameworks
- Definición: conjunto de herramientas, componentes, librerías y estándares que facilitan el desarrollo de software al proporcionar una estructura básica y predefinida para resolver problemas comunes de manera más eficiente y consistente.
Java
- Spring Boot: Simplifica la creación de aplicaciones Java, proporcionando configuración por defecto para muchas bibliotecas y frameworks.
- Spring Cloud: Extiende Spring Boot para crear aplicaciones distribuidas basadas en microservicios.
- Quarkus: para aplicaciones nativas de la nube y optimizado para microservicios.
- Micronaut: Framework para la creación de microservicios en JVM
- Microprofile: proporcionar un conjunto de especificaciones estándar para el desarrollo de microservicios, facilitando así la interoperabilidad entre diferentes plataformas y frameworks.
Python
- Flask
- Nameko
- CherryPy
NodeJS (V8)
- NET
Notas Java
- Dropwizard: es un framework de Java que facilita la creación de servicios web RESTful (estilo arquitectónico para diseñar sistemas distribuidos, especialmente aplicaciones web, que se basa en los principios de REST) robustos y de alto rendimiento.
- Restlet: para desarrollar aplicaciones web y APIs RESTful.
- Spark: microframework web, minimalista y de fácil uso, diseñado para la creación rápida de aplicaciones web y APIs en Java.
Orquestación Kubernetes - Conceptos
- Pod: Conjunto de 1 o mas contenedores
- Nodo: Elemento del cluster que alberga pods en su interior.
- Cluster: Agrupación de nodos a orquestar. Al menos 1 worker - 1 master.
- Servicio: Conjunto de pods a los que enviamos tráfico (ingress).
- Volumen: Directorio con datos accesibles a los contenedores del pod.
- Namespace: Cluster virtual o partición del cluster.
Despliegues
Principios de despliegue de microservicios
- Ejecución aislada: Ejecuta los microservicios de manera aislada, que tengan sus propios recursos computacionales, y que su ejecución no impacte a otros microservicios que se ejecuten cerca.
- Automatización: Según crezca el número de microservicios, la automatización cobra mayor importancia (CI/CD, DevOps).
- IaC: Representa la configuración de tu infraestructura para facilitar los despliegues. Almacenarlo en un control de versiones para que todo pueda ser recreado.
- Despliegues Zero-Downtime: Intenta desplegar microservicios sin tener downtime para los usuarios o para tu servicio.
- Estados deseados (declarativo): Usa una plataforma que mantenga tu(s) microservicio en un estado definido, lanzando nuevas instancias si es necesario.
Modos de despliegue
- Máquina física
- Máquina virtual
- Contenedor
- Contenedor de aplicaciones: El servicio se ejecuta dentro de un contenedor de aplicaciones que administra otras aplicaciones, normalmente el mismo runtime. Tomcat, WebLogic.
- PasS
- FaaS: Function as a Service. Lambda.
- CaaS: Contenedores como servicio. Permiten gestionar y desplegar contenedores de manera eficiente y escalable sin tener que preocuparse por la infraestructura subyacente.
- KaaS: Kubernetes as a Service. Servicio de orquestación de contenedores en la nube que utiliza Kubernetes para gestionar, escalar y automatizar la implementación de aplicaciones en contenedores.
CI/CD
- NOTA: Spinnaker, es como Jenkins. Open Source desarrollado por Netflix y extendido por Google.
Tests
-
Pruebas Unitarias (Unit Testing):
- Propósito: Verificar el funcionamiento correcto de unidades individuales de código, como funciones, métodos o clases.
-
Herramientas comunes:
- JUnit (para Java)
- Pytest (para Python)
- NUnit (para .NET),
- etc.
-
Pruebas de Integración (Integration Testing):
- Propósito: Probar la interacción entre diferentes componentes de un sistema para asegurar que funcionan juntos correctamente.
-
Herramientas comunes:
- Selenium (para pruebas de UI)
- REST Assured (para pruebas de servicios web)
- Postman (para APIs)
- etc.
-
Pruebas Funcionales (Functional Testing):
- Propósito: Evaluar el comportamiento funcional del software según los requisitos del negocio.
-
Herramientas comunes:
- Cucumber (para pruebas BDD - Guiado por comportamiento)
- Robot Framework
- SoapUI (para pruebas de servicios web)
- etc.
-
Servicio:
- Probamos el microservicio como un todo.
- Stubs y Mocks.
-
Pruebas de Aceptación (Acceptance Testing) - End to End:
- Propósito: Validar si el sistema cumple con los criterios de aceptación definidos por el cliente o las partes interesadas. Se prueba el sistema completo.
-
Herramientas comunes:
- FitNesse
- Selenium (para pruebas de UI)
- Pruebas regresivas: asegurar que los cambios recientes en el código o en el sistema no hayan introducido regresiones o problemas en funcionalidades que antes funcionaban correctamente
Observabilidad
-
En el contexto de los microservicios se refiere a la capacidad de entender y monitorear el estado interno de los sistemas distribuidos de manera efectiva.
-
Agregación de logs:
- Cada microservicio tiene sus registros, pero conviene tenerlo todo recopilado.
-
Agregando métricas:
- Capturamos constantes de nuestros microservicios (cpu, ram, peticiones), pero también solicitudes, compras o indicadores del negocio.
-
Trazas distribuidas:
- Tenemos que saber que ha ocurrido y no perder el rastro de una solicitud.
-
Alertas:
- Con esta información, podemos lanzar alertas, que incluso emitan eventos para modificar nuestra infraestructura. Evitar la fatiga de alertas.
-
Pruebas en producción:
- Transacciones sintéticas, Canary, Tests A/B, Ejecuciones paralelas, Chaos Engineering
-
Productos:*
-
JAEGER
-
Kiali
-
elasticsearch
-
Prometheus
-
Grafana
Seguridad
- Tiene que formar parte desde los inicios del desarrollo.
-
Mínimo privilegio posible y alcances limitados:
- Esta cuenta de servicio sólo puede acceder aquí.
- Este servicio se identifica con esta cuenta.
- Credenciales fuera del código, en el entorno o en Secrets Managers.
- Autenticaciones S2S, OAUTH2, TLS, JSON Web Token.
Resiliencia
- Capacidad de un sistema para mantener un nivel aceptable de funcionamiento y recuperarse rápidamente ante fallos, errores o condiciones adversas.
Timeout & Reintentos
- Timeouts: Es importante establecer cuánto tiempo hay que permitir una ejecución hasta que falle o cuanto hay que esperar antes de decidir que algo ha ido mal.
- Reintentos: Si algo falla, no lo reintento inmediatamente. Aplico back-off exponencial, y un número máximo de intentos.
Circuit Breaker
- Pasos si hay un fallo con otro microservicio:
- Se detecta
- Se dejan de enviar peticiones
- Se recupera
- Volvemos a enviarlo
Bulkheads
- Barreras o protecciones que se sitúan entre los componentes y protegen sus recursos de manera que la falla de un componente no afecte a otro.
- Cuotas a nivel de CPU/RAM/persistencia.
- Cuotas de uso de APIs.
- Rate Limit peticiones (DoS).
Idempotencia
- Es la propiedad de realizar una acción determinada varias veces y aún así conseguir el mismo resultado que se obtendría si se realizase una sóla vez”.
Escalado
Vertical
- Se trata de mejorar los hierros
- Más memoria.
- Más CPU.
- Más Almacenamiento.
- Más ancho de banda.
Duplicación Horizontal
- Crecemos en numero instancias.
- Podemos lanzar nuevos pods o servicios a demanda, y bajarlos cuando la demanda ha bajado.
- También podemos crecer en workers, lo que me permite crecer en instancias.
Partición por datos
- Distribuimos carga de trabajo haciendo particiones sobre los datos.
- Usando una dimensión de los datos como:
- Apellido del cliente.
- Geografía.
Descomposición funcional
- Extraemos una funcionalidad muy demandante a otro microservicio, para luego poder escalarlo.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.