B4-T2 Virtualización PDF
Document Details
Uploaded by frsoal
Tags
Summary
Este documento describe la virtualización, una tecnología clave en informática. Se explora su concepto, ventajas y diferentes tipos, enfatizando en el uso de recursos de hardware.
Full Transcript
1. Virtualización 1.1. Definiciones previas Que es 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. Este modelo simplifica la infraestructur...
1. Virtualización 1.1. Definiciones previas Que es 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. Este modelo simplifica la infraestructura de TI, ofreciendo una gestión más eficiente y escalabilidad sin complicaciones.. vcenter: plataforma de gestión centralizada de VMware que proporciona una interfaz unificada para administrar y supervisar entornos de virtualización. 1.2. Introducción a la virtualización virtualización: Tecnología que permite la creación de versiones virtuales de recursos físicos, como servidores, almacenamiento, redes y sistemas operativos, facilitando la utilización más eficiente y flexible de los recursos de hardware. Otra definición: Técnica utilizada para utilizar los recursos y dispositivos de una forma completamente funcional independientemente de su disposición física y ubicación Nota: emular: capacidad de un sistema o software para imitar el comportamiento de otro sistema o entorno Ventajas Optimización de uso del HW (mayor eficiencia) Aislamiento entre máquinas virtuales (seguridad) Mejor aprovisionamiento y administración del entorno Rápida Implementación y Aprovisionamiento Escalabilidad y Flexibilidad: Mejora de la Eficiencia Energética: Extensiones vmware ○.vmx: Contiene la configuración de una máquina virtual (Doble click para que arranque la máquina virtual) virtual Box ○.vdi: formato de disco virtual utilizado principalmente por el software de virtualización Oracle VM VirtualBox. Tiene metadatos asociados ○.vbox: contiene la configuración de una máquina virtual ○.ova: formato de archivo que encapsula una máquina virtual completa, incluyendo sus configuraciones, discos virtuales, y otros metadatos necesarios para su implementación Extensión vmdk (Virtual Machine Disk): representan discos duros virtuales de máquinas virtuales y contienen el sistema operativo, las aplicaciones y los datos almacenados en esas máquinas virtuales ○ Muy usado por VMWare ○ Productos que funcionan con vmdk VMWare Workstation / Workstation Player/ Server /Fusion / ESX / ESXi Parallels QEMU Virtual Box SUSE studio Sun xVM Norton ghost Paragon Hard Disk Manager DiskInternals VMFS Recovery Archivos:.vmem: Almacena el contenido de la memoria virtual que tiene un proceso virtualizado ○.Ej uso: persistir el contenido de la memoria (por ejemplo cuando se suspende una máquina). Hace un volcado.nvram: para almacenar la información de configuración de la memoria NO volátil (NVRAM) de la máquina virtual. ○ contiene información como la configuración de la BIOS/UEFI de la máquina virtual, la configuración del reloj y de la red.vmsd: para almacenar metadatos de instantáneas de una máquina virtual.vswp: archivo que se utiliza en entornos de virtualización para almacenar la memoria virtual swap de una máquina virtual. Thin provisioning: crear máquinas virtuales y que su almacenamiento crezca según se necesita ○ permite que el espacio se asigne de forma justa y puntual Thick provisioning: el FS ya nace con el espacio que se le ha dado Open Virtualization Format (OVF): estándar abierto para empaquetar y distribuir máquinas virtuales ○ OVA: Consiste en un tar del contenido del OVF Formato VHD: archivo de imagen de disco utilizado en entornos de virtualización para almacenar el contenido de un disco duro virtual. ○ Usado por Hyper V 1.3. Soluciones de backup a las máquinas virtuales Software de Backup Especializado Veeam Backup & Replication: Backup Exec: Acronis Backup Commvault Backup sobre instantáneas NetApp Data ONTAP EMC Avamar VTL: Emular la interfaz de la librería de cintas con discos al otro lado 1.4. Tipos de virtualización Virtualización de máquinas Virtualización del almacenamiento Virtualización del backup Virtualización del puesto de usuario 1.5. Virtualización de máquinas Que es hipervisor: conocido también como supervisor de máquina virtual (VMM), es un software que crea y ejecuta máquinas virtuales (VM) y que, además, aísla su sistema operativo y recursos de las máquinas virtuales y permite crearlas y gestionarlas VMWare Virtual Box Parallels Hipervisor tipo I (bare metal): se instala directamente en el hardware físico de un servidor, en lugar de ejecutarse en un sistema operativo host ○ Funciona como de hipervisor y de SO ○ Producto: VMWare ESX Server, XEN Server KV Hyper-V (el SO tiene la capa Halt. El Hyper-V no usa el SO, usa la capa Halt directamente) Hipervisor tipo 2 (hosted): ○ Software de virtualización que se ejecuta en un sistema operativo host, como Windows o Linux ○ Productos VMWare Player VirtualBox Parallels(MAC) Requisitos para instalar el sw de virtualización: Extensiones: ○ Intel VT-x(para Intel 8086) VT-c sirve para virtualizar la parte de red VT-d sirve para virtualizar la entrada/salida ○ AMD-V(para AMD) Nota: Para saber si tengo AMD-Instalado ○ El flag se llama svm ○ cat /proc/cpuinfo Nota: Para saber si tengo el flag VT-x instalado ○ Linux: cat /proc/cpuinfo - comando: lscpu ○ MacOs: sysctl machdep.cpu.features 1.6. Virtualización de almacenamiento A nivel de bloque de dispositivo (RAID) de servidor (LVM): sw en Linux. de red (SAN,vSAN) A nivel de fichero NAS ( NFS/CIFS/AFP) 1.7. Virtualización de Puestos de usuario La virtualización de puestos de usuario, también conocida como VDI (Virtual Desktop Infrastructure), permite que los escritorios de los usuarios (sistema operativo, aplicaciones y configuraciones) se ejecuten en servidores centrales en lugar de en los dispositivos físicos de los usuarios. Tipos de virtualización de escritorios: Infraestructura de Escritorio Virtual (VDI): ○ Los escritorios virtuales se alojan en un servidor en el centro de datos y los usuarios acceden a ellos mediante una red. ○ Los escritorios pueden ser persistentes (conservar configuraciones y datos entre sesiones) o no persistentes (se restablecen a un estado original al final de cada sesión). Escritorio como Servicio (DaaS): ○ La capa de control está en la nube y los recursos se encuentran on-premise. Virtualización de sesión remota: ○ Utiliza un servidor central para proporcionar una sesión de escritorio a los usuarios. ○ Soluciones i. Microsoft Remote Desktop Services (RDS) ii. Citrix XenDesktop. iii. VMWare Horizon Aplicaciones: te conectas directamente a la aplicación que quieres lanzar. Citrix Xen App 2. Virtualización Ligera También conocida como virtualización basada en contenedores, es una tecnología de virtualización que permite la ejecución de múltiples instancias aisladas y seguras de un entorno operativo en un único sistema operativo anfitrión Características ○ Kernel Compartido ○ Rápida Aprovisionamiento y Escalabilidad ○ Portabilidad ○ Menor Sobrecarga Tecnologías: Docker : Plataforma de software que permite crear, ejecutar y gestionar contenedores. ○ imagen: el preparado binario ○ contenedor: está en memoria CRI-O Containerd Podman código abierto desarrollada por Red Hat. Es una herramienta open source alternativa a Docker ○ Es una herramienta sin daemons. Core OS RKT (Rocket): Messos LXC (Linux Containers): : tecnología de virtualización a nivel de sistema operativo que permite ejecutar múltiples entornos aislados (llamados contenedores) en un solo host Linux OPENVZ Virtuozzo Containers Docker compose: cuando necesitas configurar un entorno de desarrollo que involucra múltiples servicios o contenedores ○ en base a un.yml se define que es lo que se quiere levantar, que configuración tiene, que red hay… y te levanta toda la infra ○ Se pueden gestionar varios contenedores a la vez Orquestadores ○ Kubernetes (k8s) ○ Docker Swarn(orquestador): es una herramienta integrada en Docker que permite agrupar una serie de hosts de Docker en un clúster y gestionarlos de forma centralizada, así como orquestar contenedores. Nota: Linux Foundation tiene la sub fundación “Cloud Native Computing Foundations” ha creado las especificaciones OCI Docker Engine es el componente fundamental de Docker, una plataforma de software que facilita la creación, gestión y despliegue de contenedores 2.1. Plataformas IaaS (infraestructura como servicio) Amazon AWS. Servicios ○ S3: Almacenamiento en modo objeto (Fichero por http) ○ EC2: máquinas virtuales ○ EBS: almacenamiento en modo bloque ○ … Red Hat Openstack. Servicios ○ NOVA: gestión y el aprovisionamiento de instancias de máquinas virtuales (VM) en un entorno de nube. ○ Cinder: almacenamiento modo bloque ○ Swift: almacenamiento modo objeto ○ Neutron: recursos de red ○ Horizon: Cuadro de mando web Azure (Microsoft) Google Cloud Nube SATA PaaS (Platform as a Service) : modelo de servicio en la nube que permite a los usuarios desarrollar, ejecutar y gestionar aplicaciones de software sin tener que preocuparse por la infraestructura subyacente Openshift: ofrece una plataforma para montar a través de una consola web toda una serie de entornos de ejecución para los distintos equipos de desarrollo (EJ: para Java, php ….) ○ Internamente se apoya en Docker y Kubernetes para dar soporte a esos entornos, pero queda esa complejidad totalmente transparente a los usuarios Heroku: Muy similar pero solo se usa en modo nube CloudFoundry: Lenguajes que soporta. SaaS (Software as a Service), es un modelo de distribución de software en el que las aplicaciones se alojan en la nube y se acceden a través de Internet. Ejemplo: Gmail 2.2. Por que usar Contenedores Un CONTENEDOR es una instancia de ejecución de una imagen de Docker Código Fuente + Configuración + Dependencias + Entorno de ejecución Son unidades de software ligeros y portables que encapsulan todo lo necesario para que una aplicación se ejecute de manera independiente en cualquier entorno, incluyendo el código, las bibliotecas y las dependencias. Características Se usa menos memoria y almacenamiento Facilidad para desplegar (Si funciona en mi máquina, funciona en todas) Portabilidad y escalabilidad Ahorro de costes (por mejor aprovechamiento de los recursos) Ideales para arquitecturas de microservicios NOTA: enjaular un proceso: chroot: permite crear un entorno aislado dentro del sistema de archivos principal, limitando el acceso del programa o proceso a un subdirectorio específico como si fuera el directorio raíz. ○ 3. Docker 3.1. Introducción Docker es una plataforma de código abierto diseñada para facilitar la creación, el despliegue y la ejecución de aplicaciones utilizando contenedores. Caracteristicas Solución de contenedores más usada Gran soporte y comunidad de usuarios Aplicaciones de terceros que la complementan Soporte para Windows, Linux y Mac Versión Empresarial 3.2. 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: si el sistema ve la misma capa, la reutiliza 3.3. Instrucciones Dockerfile FROM (scratch) ARG: argumentos que se 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 COPY pero con la funcionalidad añadida de descomprimir archivos.tar y la capacidad de añadir archivos vía URL ENV: permite declarar 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 que es compartido por los diferentes contenedores o con el host ENTRYPOINT: el 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: aportar meta-datos a la imagen 3.4. Diferencias entre CMD y Entry Point Si en el dockerfile solo se especifica un CMD: Docker ejecutará ese comando usando el entrypoint por defecto /bin/sh -c Si se especifican ambos, ○ El ENTRYPOINT especifica el ejecutable que usará el contenedor, ○ y CMD se corresponde con los parámetros a usar con dicho ejecutable. 3.5. Ecosistema Docker Ejemplo de dockerfile Todas las capas son de lectura menos la última, que también es de escritura A partir de esta generar la imagen en disco docker build -t etiqueta Levantar un contenedor en memoria a partir de la imagen construida docker run -name mssql01 -d etiqueta -p 1433:1433 Ecosistema docker: Nota: capas de estandarización: verde Docker CLI: La interfaz de línea de comandos (“command line interface”, CLI), para comunicarse con la API de Docker Kubernetes: plataforma de código abierto para la orquestación de contenedores CRI: Es un plugin que permite a kubernetes ser agnóstico y comunicarse con diferentes tipos de contenedores (Ej: RCK) ○ Basada en tecnología google llamada GRPC CRI-O: es una implementación de la Container Runtime Interface (CRI) para Kubernetes, que utiliza instancias y entornos en tiempo de ejecución (runtimes) de Open Container Initiative (OCI). Container-d: es un demonio que gestiona el ciclo de vida completo del contenedor de su sistema host, desde la transferencia y el almacenamiento de imágenes hasta la ejecución y supervisión del contenedor, el almacenamiento de bajo nivel, los archivos adjuntos a la red y más. OCI-Spec: define como debe ser el entorno de ejecución de un contenedor (Runtime) y también el formato de empaquetado de las imágenes que van a correr en ese entorno de ejecución(define el estándar de una imagen y una ejecución de contenedores) ○ Es un proyecto de la Linux Foundation para diseñar un estándar abierto a nivel de SO. El objetivo de este estándar es asegurar que las plataformas de contenedores no estén vinculadas a ninguna empresa o proyecto concreto. ○ Especificación de Imágenes (OCI Image Specification): Define el formato de las imágenes de contenedores, incluyendo cómo se deben empaquetar, distribuir y almacenar. Al formato de imágenes del contenedor definido se llama OCF(Open Container Format) ○ Especificación de Runtimes (OCI Runtime Specification): Define cómo ejecutar contenedores, incluyendo las configuraciones necesarias para iniciar y gestionar el ciclo de vida de los contenedores.. Ej: algo parecido a la JRE de Java Actualmente en el runtime está usando la capa runc ○ Distribución de imágenes RunC: es una herramienta de línea de comandos de Linux para crear y ejecutar contenedores según la especificación de runtime de contenedores de OCI Container 3.6. De imagen al repositorio Una IMAGEN es una pila de capas creadas desde DockerFile 3.7. Registro de contenedores Públicos ○ Docker Hub Privados ○ Nexus ○ JFrog Artifactory ○ Archiva ○ Cloud Google Container Registry Azure Container Registry AWS Elastic Container Registry Práctica creación imágenes docker 4. Microservicios 4.1. Introducción 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í. Micro no significa que sea muy pequeño, el tamaño lo dictará el servicio que preste Lo contrario serían aplicaciones monolíticas Definición: Servicios que pueden ser desplegados de manera independiente que se modelan alrededor de un dominio de negocio El dominio de negocio viene de la mano de Domain Driven Design: Diseño Orientado por el Dominio, es un enfoque de desarrollo de software centrado en comprender y modelar el dominio del negocio, con el objetivo de crear sistemas de software que reflejen fielmente las realidades del negocio y sean flexibles para adaptarse a sus cambios. Bounded context: herramienta que nos entrega DDD para acotar los distintos Domains.. Como son los microservicios Mantenibles y testeables débilmente acoplados Mejora la cohesión: responsabilidades y funcionalidades dentro de un microservicio están relacionadas entre sí y se agrupan de manera lógica y significativa 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 Hace que sea más fácil para un nuevo desarrollador comprender la funcionalidad de un servicio, permite la entrega continua Organizados sobre las capacidades del negocio Pertenecen a un equipo pequeño los microservicios se pueden versionar: paypal con v12, v2 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 4.2. Nuevos problemas 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 4.3. Retos 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. 5. Arquitectura 5.1. Comunicar microservicios Bloqueo Síncrono Asíncrono ○ Petición-Respuesta ○ Dirigido por eventos(Evento Driven) Poner datos/eventos en una cola y alguien los consumirá Tengo suscriptores a ese ‘topic’ que reaccionan, usando el evento y su información como el inicio de su trabajo ○ Datos compartidos 5.2. Comunicar microservicios (II) – RPC RPC SOAP: Muy usado en la AGE por el ENI RMI: tecnología de Java que permite a un programa en Java invocar métodos que se ejecutan en un objeto remoto, es decir, en una máquina diferente en una red gRPC: Google.Framework de llamada a procedimiento remoto open source que se utiliza para la comunicación de alto rendimiento entre servicios(aparte de soap, rest…): ○ Se necesita una parte en cliente y otra en servidor ○ Se basa en protocol buffers(protobuf):tecnología desarrollada por Google para la serialización y deserialización de datos estructurados, similar a XML o JSON pero más eficiente en términos de velocidad y tamaño del mensaje Son mensajes con extensión.proto Se manda en un paquete binario ○ protoc (compilador) para generar el código en función del fichero.proto tanto en la parte cliente como en la parte servidora. 5.3. GraphQL - Facebook Es un lenguaje de consultas para APIs y un entorno de ejecución para cumplir con esas consultas mediante los 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) 5.4. 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 Apache Kafka RabbitMQ Active MQ Google Cloud Pub/sub 5.5. 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” Nota: Ejemplo de patrones: 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. 5.6. 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 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 Abstracción Envoy Centralización Istio Trazabilidad Elastic Seach Observabilidad Grafana Jaeger Kiali Prometheus Seguridad 5.7. Compartir Datos Volúmenes NAS/S3 BBDD en modelos con segregación de responsabilidad (CQRS) 5.8. 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. 5.9. 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 5.10. 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 5.11. Orquestación Kubernetes - Conceptos Kubernetes es una plataforma de orquestación de contenedores de código abierto que automatiza el despliegue, la gestión y la escalabilidad de aplicaciones en contenedores. Fue inicialmente desarrollado por Google y ahora está gestionado por la Cloud Native Computing Foundation (CNCF). Conceptos: Pod Conjunto de 1 o más 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 Replica Set Garantiza que haya un número específico de réplicas de un Pod ejecutándose en un clúster en cualquier momento. Si un Pod falla, el ReplicaSet asegura que se cree otro para mantener el número deseado de réplicas Deployment Gestiona y supervisa la creación y actualización de Pods y ReplicaSets. Se usa para implementar aplicaciones, gestionar cambios en las versiones y controlar la escalabilidad. Compuesto por dos partes fundamentales: el Plano de Control (Control Plane) y los Nodos Trabajadores (Worker Nodes) Elementos del Plano de Control: Se encarga de gestionar el clúster completo y orquestar el funcionamiento de los nodos trabajadores ○ API Server (kube-apiserver): Punto central de comunicación en Kubernetes. Actúa como una interfaz REST a la que se conectan usuarios y componentes para interactuar con el clúster. ○ Etcd: Es una base de datos clave-valor distribuida que almacena de manera persistente toda la información sobre el estado del clúster ○ Scheduler (kube-scheduler): Se encarga de asignar los Pods a los nodos trabajadores basándose en la disponibilidad de recursos y las reglas de despliegue. ○ Controller Manager (kube-controller-manager): Ejecuta los controladores que supervisan el estado deseado del clúster y ajustan los recursos para que coincidan con dicho estado. Elementos de los Nodos Trabajadores (Worker Nodes): son las máquinas (físicas o virtuales) en las que se ejecutan los contenedores de las aplicaciones. Cada nodo trabajador tiene sus propios componentes para comunicarse con el plano de control y ejecutar las tareas asignadas. ○ Kubelet: Es el agente que corre en cada nodo trabajador. Se encarga de recibir las instrucciones del API Server y de asegurarse de que los contenedores en los Pods se estén ejecutando según las especificaciones. ○ Kube-proxy: Es el componente encargado de gestionar la red en cada nodo. Actúa como un proxy de red que distribuye el tráfico de red hacia los Pods correctos. ○ Motor de Contenedores: Es el software que se encarga de ejecutar los contenedores en el nodo 6. Despliegues 6.1. 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 6.2. 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. 6.3. CI/CD NOTA: Spinnaker, es como Jenkins. Open Source desarrollado por Netflix y extendido por Google 6.4. 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 6.5. 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 6.6. 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 7. Resiliencia Capacidad de un sistema para mantener un nivel aceptable de funcionamiento y recuperarse rápidamente ante fallos, errores o condiciones adversas. 7.1. 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 7.2. Circuit Breaker Pasos si hay un fallo con otro microservicio: Se detecta Se dejan de enviar peticiones Se recupera Volvemos a enviarlo 7.3. 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) 7.4. 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” 8. Escalado 8.1. Vertical Se trata de mejorar los hierros Más memoria Más CPU Más Almacenamiento Más ancho de banda 8.2. 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 8.3. 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 8.4. Descomposición funcional Extraemos una funcionalidad muy demandante a otro microservicio, para luego poder escalarlo