Sistemas de persistencia distribuidos: Sistemas donde los datos se almacenan y gestionan en múltiples ubicaciones físicas o nodos, mejorando la escalabilidad, la disponibilidad y la tolerancia a fallos. ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad): Propiedades de las transacciones en bases de datos que garantizan la fiabilidad y la coherencia en entornos de procesamiento de datos. NoSQL: Categoría de sistemas de gestión de bases de datos diseñados para escalabilidad, flexibilidad y alto rendimiento, especialmente útiles en el manejo de grandes volúmenes de datos distribuidos. CAP (Consistencia, Disponibilidad, Tolerancia a Particiones): Teorema que establece que un sistema de base de datos distribuida solo puede ofrecer dos de estas tres características a la vez. Bases de Datos Relacionales Distribuidas: Sistemas que mantienen el modelo relacional de bases de datos, pero distribuyen sus datos en múltiples ubicaciones físicas para mejorar la disponibilidad y la escalabilidad. Arquitectura Cliente-Servidor Distribuida: Modelo en el que los servidores proporcionan recursos o servicios, mientras que los clientes solicitan y utilizan estos servicios, con servidores distribuidos geográficamente. Modelos basados en shard (Fragmentación): Estrategia de diseño en la que la base de datos se divide en piezas más pequeñas y manejables, conocidas como "shards", distribuidas en múltiples nodos para mejorar el rendimiento y la escalabilidad. Arquitecturas federadas: Modelo en el que diferentes sistemas de bases de datos o sistemas de almacenamiento, cada uno con su propia gestión y almacenamiento de datos, se conectan en un único sistema federado. Nodos de almacenamiento: Unidades individuales en un sistema de persistencia distribuido donde se almacenan los datos. Pueden ser servidores físicos, instancias de servidor virtual o contenedores en infraestructura de nube. Redes de comunicación: Conexiones que permiten la comunicación entre los nodos de almacenamiento en un sistema de persistencia distribuido. Algoritmos de coordinación y sincronización: Mecanismos que aseguran que las operaciones entre los diversos nodos de almacenamiento sean coherentes, eficientes y fiables. Tecnologías y herramientas en sistemas de persistencia distribuidos: Conjunto de tecnologías como bases de datos distribuidas, sistemas de archivos distribuidos y herramientas de gestión y monitoreo, fundamentales para el mantenimiento y la optimización de estos sistemas. Elasticidad: Capacidad de un sistema para adaptarse a las cargas de trabajo cambiando dinámicamente la cantidad de recursos disponibles. Balanceador de carga: Dispositivo o software que distribuye el tráfico de red o solicitudes entre varios servidores para optimizar el uso de recursos y maximizar el rendimiento. Replicación de datos: Proceso de duplicar datos en múltiples nodos o ubicaciones para mejorar la disponibilidad y la tolerancia a fallos. Sharding: Técnica de dividir y distribuir datos entre múltiples bases de datos o nodos para mejorar la escalabilidad y el rendimiento. Latencia: Tiempo que tarda una petición en viajar desde el emisor al receptor y viceversa en una red. Consistencia eventual: Modelo de consistencia en el que se garantiza que todas las copias de un dato se sincronizarán eventualmente, aunque no inmediatamente después de una actualización. Partición de red: Situación en la que las subredes de una red de computadoras no pueden comunicarse entre sí debido a fallos en la red. BASE (Basicamente Disponible, Soft-state, Consistencia Eventual): Conjunto de propiedades que describen la naturaleza de los sistemas de bases de datos distribuidos, enfocándose en la disponibilidad, la tolerancia a fallos y la coherencia eventual. Data lake: Sistema o repositorio de almacenamiento que contiene una gran cantidad de datos en bruto y que se mantiene en su formato natural hasta que se necesite. Modelo de Datos Clave-Valor: Modelo de base de datos NoSQL que almacena los datos en pares de clave-valor, optimizado para operaciones rápidas de lectura y escritura. Bases de Datos de Grafos: Bases de datos diseñadas para almacenar y manejar relaciones complejas entre datos, ideales para representar redes y conexiones. Arquitectura Peer-to-Peer (P2P): Modelo de red en el que cada nodo actúa tanto como cliente como servidor, compartiendo recursos y comunicándose directamente entre sí. Middleware: Software que actúa como puente entre diferentes sistemas o aplicaciones, facilitando la comunicación y la gestión de datos en entornos distribuidos. Almacenamiento en la nube: Modelo de almacenamiento de datos en el que la información se guarda en servidores remotos accesibles desde Internet. Virtualización: Técnica que permite crear una representación virtual de recursos como servidores, dispositivos de almacenamiento o redes. Hadoop: Marco de software de código abierto utilizado para el almacenamiento y procesamiento distribuido de grandes conjuntos de datos. Sistemas de archivos distribuidos: Tecnologías que permiten almacenar y acceder a archivos y datos a través de una red de nodos de computadoras. Escalabilidad vertical: Aumento del rendimiento de un sistema mediante la mejora de las especificaciones de los servidores existentes, como el procesador, la memoria o el almacenamiento. Recuperación ante desastres: Estrategias y procesos diseñados para proteger una organización contra los efectos de eventos significativos negativos, asegurando la continuidad del negocio. Virtualización: Tecnología que permite crear versiones virtuales de recursos informáticos, como hardware, sistemas operativos, redes y almacenamiento. Sistemas distribuidos: Conjunto de computadoras independientes que trabajan juntas como un sistema único y coherente, distribuyendo procesos y datos entre múltiples ubicaciones. Hypervisor: Software que crea y ejecuta máquinas virtuales (VMs) al separar los recursos del hardware de la máquina anfitriona y distribuirlos entre las VMs. VMware: Plataforma líder en soluciones de virtualización, que ofrece productos para virtualización de servidores, redes y almacenamiento. Microsoft Hyper-V: Plataforma de virtualización basada en hypervisor integrada en Windows Server, que permite crear y administrar máquinas virtuales. Citrix XenServer: Plataforma de virtualización de código abierto centrada en la eficiencia y la escalabilidad para virtualización de servidores y escritorios. Docker: Plataforma de contenedorización que empaqueta aplicaciones y sus dependencias en contenedores virtuales, facilitando la portabilidad y consistencia en diferentes entornos. Kubernetes (K8s): Sistema de orquestación de contenedores de código abierto que automatiza la implementación, el escalado y la gestión de aplicaciones en contenedores. IaaS (Infraestructura como Servicio): Modelo de servicio en la nube que ofrece recursos de computación virtualizados, como servidores, almacenamiento y redes. PaaS (Plataforma como Servicio): Modelo de servicio en la nube que proporciona un entorno de desarrollo y despliegue en la nube, incluyendo herramientas para el desarrollo de aplicaciones. SaaS (Software como Servicio): Modelo de servicio en la nube que ofrece software y aplicaciones accesibles a través de Internet, generalmente bajo un modelo de suscripción. Contenedorización: Tecnología que utiliza contenedores para empaquetar y aislar aplicaciones con sus entornos de ejecución completos, mejorando la portabilidad y la eficiencia. Orquestación de contenedores: Proceso de automatización de la gestión, despliegue, escalado y operaciones de red de contenedores. Virtualización de servidores: Creación de una versión virtual de un servidor físico, permitiendo la ejecución de múltiples sistemas operativos y aplicaciones en un solo servidor físico. Virtualización de redes: Tecnología que simula hardware de red como switches y routers, creando redes virtuales dentro de un entorno físico. Virtualización de almacenamiento: Agrupación del almacenamiento físico de múltiples dispositivos de red en un solo dispositivo de almacenamiento virtual. Cloud Computing (Computación en la Nube): Entrega de servicios de computación, como servidores, almacenamiento, bases de datos, redes, software, a través de Internet ("la nube"). Algoritmo de consenso: Protocolo utilizado en sistemas de computación distribuida para alcanzar un acuerdo sobre un único estado del sistema entre nodos distribuidos. AMQP (Advanced Message Queuing Protocol): Protocolo de mensajería estándar de capa de aplicación que es interoperable entre sistemas de middleware de mensajes. API (Application Programming Interface): Conjunto de rutinas, protocolos y herramientas para construir aplicaciones y sistemas de software. Blockchain: Tecnología de contabilidad distribuida que mantiene una lista creciente de registros, llamados bloques, que están enlazados utilizando criptografía. Colas de Mensajes: Estructuras de datos utilizadas para el almacenamiento temporal y la gestión de mensajes en sistemas de mensajería. Consistencia (en sistemas distribuidos): Propiedad que asegura que todos los nodos en un sistema distribuido reflejan el mismo estado o los mismos datos. CRUD (Create, Read, Update, Delete): Acrónimo que se refiere a las operaciones básicas de almacenamiento persistente en sistemas de software. HTTP (Hypertext Transfer Protocol): Protocolo de comunicación utilizado para la transferencia de información en la World Wide Web. IMAP (Internet Message Access Protocol): Protocolo estándar de correo electrónico que permite a los clientes de correo electrónico acceder y manipular el correo electrónico en el servidor. Linealizabilidad: Propiedad de los sistemas distribuidos en la que las operaciones se completan de manera que parecen haber ocurrido instantáneamente en algún punto entre su inicio y finalización. MIME (Multipurpose Internet Mail Extensions): Especificación para el formato de los archivos enviados a través de Internet. NTP (Network Time Protocol): Protocolo de red utilizado para sincronizar los relojes de los sistemas informáticos a través de paquetes de red. POP3 (Post Office Protocol version 3): Protocolo estándar de correo electrónico utilizado para recuperar correos electrónicos desde un servidor remoto. Protocolo de Transferencia de Correo Electrónico (SMTP): Protocolo estándar para el envío de correos electrónicos a través de Internet. RabbitMQ: Sistema de intermediación de mensajes de código abierto que implementa el protocolo AMQP. Raft: Algoritmo de consenso utilizado en sistemas de computación distribuida que se destaca por su facilidad de comprensión y su enfoque en la seguridad y eficiencia. SOAP (Simple Object Access Protocol): Protocolo estándar que define cómo los mensajes deben ser formateados y transmitidos. Spanner: Servicio de base de datos distribuida de Google que utiliza el concepto de "TrueTime" para coordinar operaciones a través de múltiples nodos. Teorema FLP: Resultado en la teoría de sistemas distribuidos que muestra la imposibilidad de alcanzar el consenso determinista en un sistema distribuido asincrónico con solo una falla. TrueTime: Concepto desarrollado por Google que proporciona una API que permite a los sistemas distribuidos sincronizar el tiempo con un alto grado de precisión y conocimiento de la imprecisión. WSDL (Web Services Description Language): Formato XML utilizado para describir servicios web. Zab (Zookeeper Atomic Broadcast): Protocolo de consenso utilizado por Apache ZooKeeper para manejar la replicación de datos en un conjunto de servidores. ZooKeeper: Servicio de Apache que proporciona coordinación y configuración para sistemas distribuidos. Spring Data JPA: Una parte del ecosistema de Spring Framework que facilita la implementación de la capa de acceso a datos, proporcionando un enfoque más simple y consistente para acceder a los datos. JPA (Java Persistence API): Una especificación de Java para el mapeo objeto-relacional que maneja cómo los datos se persisten en las bases de datos. Entidad: En JPA, una entidad representa una tabla en una base de datos. Cada instancia de una entidad corresponde a una fila en esa tabla. Repositorio: Una interfaz en Spring Data que proporciona métodos CRUD y de consulta para entidades. Es una abstracción de capa de acceso a datos. Relación (1:N): Una asociación entre dos entidades donde una entidad (padre) puede estar asociada con múltiples instancias de otra entidad (hijos), pero cada instancia hija solo puede estar asociada con una instancia padre. Relación N:M): Una asociación entre dos entidades donde varias instancias de una entidad pueden estar asociadas con varias instancias de otra entidad. Lombok: Una biblioteca de Java que utiliza anotaciones para minimizar el código repetitivo, especialmente para la creación de métodos getters, setters, y constructores. @Data (Lombok): Una anotación de Lombok que genera automáticamente getters, setters, toString(), equals() y hashCode() para los campos de una clase. Hibernate: Un framework de mapeo objeto-relacional para Java que facilita la comunicación entre una aplicación Java y una base de datos. Cascada (CascadeType): Un ajuste en JPA que define cómo las operaciones como guardar, actualizar o eliminar se propagan de una entidad a sus entidades asociadas. DTO (Data Transfer Object): Un objeto que se utiliza para transportar datos entre procesos, comúnmente utilizado para transferir datos de una capa a otra en una aplicación. CommandLineRunner: Una interfaz en Spring Boot que se utiliza para ejecutar código específico en el inicio de la aplicación. Spring Boot: Un framework de Spring que facilita la creación de aplicaciones independientes con mínima configuración. PersistentObjectException: Una excepción de Hibernate que ocurre cuando se intenta persistir una entidad que ya existe en la base de datos pero no está actualmente en el contexto de persistencia. StackOverflowError: Un error común en Java que ocurre cuando hay una recursión excesiva o referencias circulares en el código, resultando en un desbordamiento de la pila de llamadas. API REST: Un tipo de API (Interfaz de Programación de Aplicaciones) que sigue los principios del estilo arquitectónico REST (Representational State Transfer). Utiliza protocolos HTTP estándar para operaciones de crear, leer, actualizar y eliminar recursos. Spring Boot: Un framework de Java para el desarrollo de aplicaciones basado en Spring. Ofrece una forma rápida y fácil de crear aplicaciones independientes de alto nivel con mínima configuración. Controlador REST: En una aplicación Spring Boot, un controlador REST es una clase que maneja solicitudes HTTP y devuelve respuestas utilizando datos en formato JSON o XML. @RestController: Una anotación en Spring Boot que se usa para marcar una clase como controlador REST, donde los métodos devuelven datos en lugar de vistas. Inyección de Dependencias: Un patrón de diseño donde una clase recibe sus dependencias de otra clase o framework en lugar de crearlas internamente. Es un principio clave en Spring Boot para lograr la desacoplamiento y la flexibilidad. @Service: Una anotación en Spring Boot utilizada para marcar una clase como parte de la capa de servicio, que contiene la lógica de negocios. @Autowired: Una anotación que permite a Spring inyectar automáticamente las dependencias requeridas en una clase. ConcurrentHashMap: Una implementación de Map en Java que es segura para su uso en un entorno de múltiples hilos. AtomicLong: Una clase en Java que proporciona operaciones en longs que se realizan de manera atómica, útil para contar o generar IDs en un entorno de múltiples hilos. Thymeleaf: Un motor de plantillas Java utilizado para desarrollar aplicaciones web con Spring MVC. Procesa archivos HTML en el servidor y puede integrarse con Spring Boot para crear interfaces dinámicas. Modelo-Vista-Controlador (MVC): Un patrón de diseño que separa la aplicación en tres partes interconectadas: el modelo (datos), la vista (interfaz de usuario) y el controlador (lógica de negocio). Mustache: Un motor de plantillas que se utiliza para crear vistas HTML. Es ligero y sigue el principio "sin lógica", lo que significa que toda la lógica se maneja en el servidor. @PathVariable: Una anotación en Spring que se utiliza para extraer valores de las variables de ruta (path variables) de las URLs en las solicitudes HTTP. @RequestBody: Una anotación utilizada en solicitudes POST y PUT para obtener y parsear el cuerpo de la solicitud HTTP, comúnmente en formato JSON