Ahorra un 25 % (o incluso más) en tus costes de Kafka | Acepta el reto del ahorro con Kafka de Confluent

¿Qué es un sistema distribuido?

Los sistemas distribuidos son un conjunto de componentes y máquinas independientes ubicados en diferentes sistemas, que se comunican con el fin de operar como una sola unidad.

En esta introducción detallada, descubrirás cómo funcionan los sistemas distribuidos y te presentaremos varios ejemplos prácticos, las arquitecturas básicas, las ventajas, las desventajas y las soluciones habituales para el streaming distribuido en tiempo real.

Fundada por los creadores originales de Apache Kafka, Confluent es una plataforma de streaming de datos completa para la integración de datos en tiempo real, procesamiento y análisis que conecta más de 120 fuentes de datos.

Cómo funcionan los sistemas distribuidos

Sistema distribuido - Definición

También conocido como computación distribuida y bases de datos distribuidas, un sistema distribuido es una colección de componentes independientes ubicados en distintas máquinas que comparten mensajes entre sí para lograr objetivos comunes.

Por su naturaleza, de caras al usuario final, el sistema distribuido aparecerá como si fuera una única interfaz o un ordenador. La idea es que al unir distintos componentes que trabajan de forma conjunta, el sistema pueda maximizar los recursos y la información al tiempo que previene fallos: si un sistema falla, no afectará a la disponibilidad del servicio.

Hoy en día, los datos están más distribuidos que nunca y las aplicaciones modernas ya no se ejecutan de forma aislada. La gran mayoría de los productos y aplicaciones se basan en sistemas distribuidos.

Elementos de un sistema distribuido

Las funciones más importantes de la computación distribuida son las siguientes:

  • Uso compartido de recursos - ya sea el hardware, el software o los datos
  • Flexibilidad - cómo está diseñado el software para ser desarrollado y compartido entre distintas unidades
  • Simultaneidad - varias máquinas pueden procesar la misma función al mismo tiempo
  • Escalabilidad - cómo se multiplica la capacidad de computación y procesamiento cuando se extiende a muchas máquinas
  • Tolerancia a fallos - con qué facilidad y rapidez se pueden detectar y recuperar fallos en distintas partes del sistema
  • Transparencia - cuánto acceso tiene un nodo para localizar y comunicarse con otros nodos en el sistema.

Los sistemas distribuidos modernos han evolucionado para incluir procesos autónomos que pueden ejecutarse en la misma máquina física, pero interactúan intercambiando mensajes entre sí.

Ejemplos de sistemas distribuidos

Redes

El primer ejemplo de un sistema distribuido se produjo en la década de los 70, cuando se inventó Ethernet y se crearon las redes de área local (LAN). Por primera vez, los ordenadores podrían enviar mensajes a otros sistemas con una dirección IP local. Las redes peer-to-peer evolucionaron y, luego, el correo electrónico e Internet (tal como lo conocemos hoy en día) siguen siendo el ejemplo más grande, y en continuo crecimiento, de sistemas distribuidos. Igual que Internet cambió de IPv4 a IPv6, los sistemas distribuidos evolucionaron de estar basados en redes locales a depender de Internet.

Redes de telecomunicaciones

Las redes telefónicas y móviles también son ejemplos de redes distribuidas. Las redes telefónicas existen desde hace más de un siglo y comenzaron como un ejemplo temprano de una red peer-to-peer. Las redes móviles son redes distribuidas con estaciones base distribuidas físicamente en áreas denominadas celdas. A medida que las redes telefónicas han evolucionado a VOIP (voz sobre IP), continúan creciendo en complejidad como redes distribuidas.

Sistemas distribuidos en tiempo real

Muchos sectores utilizan sistemas en tiempo real que se distribuyen de forma local y global. Las aerolíneas usan sistemas de control de vuelo, Uber y Lyft usan sistemas de entrega, las plantas industriales usan sistemas de control de automatización, y las empresas de logística y comercio electrónico usan sistemas de seguimiento en tiempo real.

Procesamiento paralelo

Antiguamente había una distinción entre la computación paralela y los sistemas distribuidos. La computación paralela se centraba en cómo ejecutar software en múltiples subprocesos o procesadores que accedían a los mismos datos y memoria. Los sistemas distribuidos suponían ordenadores separados con sus propios procesadores y memoria. Con el auge de los sistemas operativos, procesadores y servicios en la nube modernos de hoy día, la computación distribuida también abarca el procesamiento paralelo.

Inteligencia artificial distribuida

La inteligencia artificial distribuida es una forma de utilizar la capacidad de computación a gran escala y el procesamiento paralelo para aprender y procesar conjuntos de datos muy grandes a través de múltiples agentes.

Sistemas de bases de datos distribuidas

Una base de datos distribuida es una base de datos que se encuentra en varios servidores o ubicaciones físicas. Los datos se pueden replicar o duplicar entre sistemas.

La mayoría de las aplicaciones populares utilizan una base de datos distribuida y deben ser conscientes de la naturaleza homogénea o heterogénea del sistema de base de datos distribuida.

Una base de datos distribuida homogénea significa que cada sistema tiene el mismo sistema de gestión de base de datos y modelo de datos. Son más fáciles de gestionar y expandir el rendimiento añadiendo nuevos nodos y ubicaciones.

Las bases de datos distribuidas heterogéneas permiten múltiples modelos de datos, diferentes sistemas de gestión de bases de datos. Las puertas de enlace se utilizan para traducir los datos entre nodos y, por lo general, se producen como resultado de la fusión de aplicaciones y sistemas.

Arquitectura de sistemas distribuidos

Los sistemas distribuidos deben tener una red que conecte todos los componentes (ordenadores, hardware o software) para que puedan transferir mensajes que les permitan comunicarse entre sí.

  • Dicha red puede estar conectada con una dirección IP, usar cables o, incluso, en una placa base.
  • Los mensajes transferidos entre máquinas contienen los tipos de datos que los sistemas quieren compartir, por ejemplo, bases de datos, objetos y archivos.
  • Una característica importante de un sistema distribuido es la forma en la que se comunican los mensajes de manera fiable (ya sea al enviarlos, recibirlos o reconocerlos) o en la que un nodo vuelve a intentarlo en caso de fallo.
  • Los sistemas distribuidos se crearon por necesidad, ya que los servicios y las aplicaciones querían escalar y tenían que añadir y gestionar nuevas máquinas. En el diseño de los sistemas distribuidos, el principal sacrificio a tener en cuenta es la complejidad frente al rendimiento.

Para entender esto, veamos los tipos de arquitecturas distribuidas, sus pros y sus contras.

Tipos de arquitecturas de sistemas distribuidos:

Las aplicaciones y los procesos distribuidos suelen utilizar uno de los siguientes cuatro tipos de arquitectura:

Cliente-servidor:

al principio, la arquitectura de los sistemas distribuidos consistía en un servidor como recurso compartido, como una impresora, una base de datos o un servidor de sitio web. Tenía múltiples clientes (por ejemplo, usuarios trabajando en los ordenadores) que decidían cuándo usar el recurso compartido, cómo usarlo y mostrarlo, cambiar datos y enviarlo de vuelta al servidor. Los repositorios de código como git son un buen ejemplo en el que la inteligencia se sitúa en los desarrolladores que realizan los cambios en el código.

Hoy en día, la arquitectura de sistemas distribuidos ha evolucionado con las aplicaciones web. Estos son los ejemplos de arquitectura más modernos:

  • Aquitectura en tres niveles (three-tier): en esta arquitectura, los clientes ya no dependen de su inteligencia y pueden confiar en un nivel intermedio para llevar a cabo el procesamiento y la toma de decisiones. La mayoría de las primeras aplicaciones web entran en esta categoría. El nivel medio podría tratarse de un agente que recibe solicitudes de los clientes (que pueden ser stateless), procesa los datos y luego los reenvía a los servidores.
  • Arquitectura de múltiples niveles (multi-tier): los servicios web de grandes empresas fueron los primeros en crear arquitecturas de sistemas «de n niveles» o «de múltiples niveles». Esto popularizó los servidores de aplicaciones que contienen la lógica empresarial e interactúan tanto con los niveles de datos como con los niveles de presentación.
  • Peer-to-peer: en este tipo de arquitectura no hay una máquina centralizada o especial que realice el trabajo pesado e inteligente. Toda la toma de decisiones y las responsabilidades se dividen entre las máquinas involucradas y cada una podría asumir roles de cliente o servidor. La blockchain es un buen ejemplo de esto.

Pros y contras de los sistemas distribuidos

Ventajas de los sistemas distribuidos:

El objetivo principal de un sistema distribuido es permitir la escalabilidad, el rendimiento y la alta disponibilidad de las aplicaciones.

Entre las principales ventajas se incluyen:

  • Escalabilidad horizontal ilimitada: se pueden añadir nuevos sistemas siempre que sea necesario.
  • Baja latencia: al estar ubicados geográficamente más cerca de los usuarios, se reduce el tiempo que se tarda en atender sus peticiones.
  • Tolerancia a fallos: si un servidor o centro de datos falla, otros seguirían pudiendo atender a los usuarios del servicio.
  • Ventajas de los sistemas distribuidos:

Desventajas de los sistemas distribuidos:

Cada decisión de ingeniería conlleva sacrificios. La complejidad es la mayor desventaja de los sistemas distribuidos. Cuantas más máquinas, más mensajes y más datos se transmiten entre más partes, más problemas aparecen. Estas son algunas de las áreas que suelen plantear retos importantes:

  • Integración y coherencia de datos - Poder sincronizar el orden de los cambios en los datos y los estados de la aplicación en un sistema distribuido se convierte en todo un reto, sobre todo cuando hay nodos que se inician, se detienen o fallan.
  • Fallo de red y comunicación - Es posible que los mensajes no se entreguen a los nodos correctos o en el orden adecuado, lo que provoca un fallo en la comunicación y la funcionalidad.
  • Gastos de administración - Es necesario añadir más funciones de inteligencia, supervisión, registro y equilibrio de cargas para obtener visibilidad de la operación y los fallos de los sistemas distribuidos

Cómo te ayudan las plataformas de streaming distribuidas

Confluent es la única plataforma de streaming de datos que te permite trabajar en cualquier entorno de nube, local o híbrido. Conecta más de 120 fuentes de datos con una escalabilidad, seguridad e integraciones de nivel empresarial que te ayudarán a obtener una visibilidad en tiempo real de todos tus sistemas distribuidos.

Comienza en cuestión de minutos con una prueba gratuita de 30 días.