Virtualización
32 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿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?

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)

  • Optimización de uso del hardware (correct)
  • Escalabilidad y flexibilidad (correct)
  • Menor eficiencia energética
  • Aislamiento entre máquinas virtuales (correct)
  • ¿Qué es un hipervisor?

    <p>Es un software que crea y ejecuta máquinas virtuales y aísla su sistema operativo y recursos de las máquinas virtuales.</p> Signup and view all the answers

    ¿Qué tipo de hipervisor se instala directamente en el hardware físico?

    <p>Hipervisor tipo 1</p> Signup and view all the answers

    ¿Cuál de los siguientes formatos encapsula una máquina virtual completa?

    <p>.ova</p> Signup and view all the answers

    La virtualización ligera permite la ejecución de múltiples instancias en diferentes sistemas operativos anfitriones.

    <p>False</p> Signup and view all the answers

    ¿Qué es un Dockerfile?

    <p>Es un archivo con instrucciones para crear y configurar imágenes de Docker.</p> Signup and view all the answers

    ¿Qué herramienta se utiliza para orquestar contenedores?

    <p>Kubernetes</p> Signup and view all the answers

    ¿Qué son los microservicios?

    <p>Es un estilo de arquitectura de software que estructura una aplicación como un conjunto de servicios pequeños e independientes que se comunican entre sí.</p> Signup and view all the answers

    Los microservicios son siempre pequeños en tamaño.

    <p>False</p> Signup and view all the answers

    ¿Qué desafíos se presentan en el desarrollo inicial de sistemas distribuidos?

    <p>El desarrollo inicial puede ser complejo y probar aplicaciones basadas en microservicios puede ser complicado en comparación con enfoques monolíticos.</p> Signup and view all the answers

    ¿Cuál de las siguientes es un método de comunicación asíncrono entre microservicios?

    <p>Dirigido por eventos</p> Signup and view all the answers

    ¿Qué tecnología utiliza gRPC?

    <p>Protocol Buffers</p> Signup and view all the answers

    ¿Qué es un Broker de Mensajes?

    <p>Es un intermediario en la comunicación que permite el intercambio de mensajes de manera eficiente y fiable.</p> Signup and view all the answers

    ¿Qué es CQRS?

    <p>Command Query Responsibility Segregation, un patrón que separa la lógica de lectura y escritura en una aplicación.</p> Signup and view all the answers

    ¿A qué se refiere ACID en bases de datos?

    <p>Atomicidad, Consistencia, Aislamiento y Durabilidad.</p> Signup and view all the answers

    Los microservicios deben comunicarse directamente entre sí.

    <p>False</p> Signup and view all the answers

    ¿Qué hace un API Gateway?

    <p>Actúa como intermediario entre clientes y servicios backend, gestionando las solicitudes y respuestas.</p> Signup and view all the answers

    ¿Cuál es una ventaja del Service Mesh?

    <p>Facilita la observabilidad y trazabilidad.</p> 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.

    <p>distribuido</p> Signup and view all the answers

    Empareja las tecnologías con sus descripciones:

    <p>Spring Boot = Simplifica la creación de aplicaciones Java. Kubernetes = Orquestación de contenedores. gRPC = Comunicación de alto rendimiento entre servicios. GraphQL = Lenguaje de consulta para APIs.</p> Signup and view all the answers

    ¿Qué es la agregación de logs?

    <p>Recopilar registros de cada microservicio en un solo lugar.</p> Signup and view all the answers

    ¿Qué métricas se deben capturar en los microservicios?

    <p>Constantes como cpu, ram, peticiones, solicitudes y compras.</p> Signup and view all the answers

    ¿Qué son las trazas distribuidas?

    <p>Es el seguimiento del rastro de una solicitud a través de múltiples microservicios.</p> Signup and view all the answers

    ¿Cuál es la finalidad de las alertas en un sistema?

    <p>Lanzar alertas y eventos para modificar la infraestructura.</p> Signup and view all the answers

    ¿Qué herramientas son productos relevantes para la monitorización de microservicios?

    <p>Todos los anteriores</p> Signup and view all the answers

    La seguridad no debe considerarse en las etapas iniciales del desarrollo de un sistema.

    <p>False</p> Signup and view all the answers

    ¿Qué significa el término 'mínimo privilegio' en un sistema?

    <p>Dar el menor nivel de acceso necesario a una cuenta de servicio.</p> Signup and view all the answers

    ¿Qué es la idempotencia?

    <p>Propiedad de realizar una acción varias veces y obtener el mismo resultado.</p> 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?

    <p>Todos los anteriores</p> Signup and view all the answers

    ¿Qué se entiende por escalado vertical?

    <p>Mejorar los recursos de hardware como CPU, RAM y almacenamiento.</p> 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

    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.
    • 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.

    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.

    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.

    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.

    Quiz Team

    Related Documents

    B4-T2 Virtualizacion.pdf

    More Like This

    Virtualización en Sistemas Operativos
    12 questions
    Virtualización de Sistemas Operativos
    31 questions
    B4-T2 Virtualizacion
    40 questions
    Virtualización de Escritorio en TI
    40 questions
    Use Quizgecko on...
    Browser
    Browser