Una aplicación distribuida es un programa que se ejecuta en uno o más ordenadores simultáneamente y se comunica a través de una red. En esta entrada del blog, nos sumergiremos en cómo funcionan las aplicaciones distribuidas, en qué se diferencian de las aplicaciones independientes o tradicionales, cómo puedes utilizarlas, sus ventajas y desventajas, y algunas de las herramientas y tecnologías que puedes utilizar para crearlas.
¿Cómo funcionan las aplicaciones distribuidas?
Las aplicaciones de computación distribuida interactúan para lograr un objetivo o tarea específicos. Se pueden almacenar en servidores o en plataformas de infraestructura en la nube. Las aplicaciones distribuidas pueden ser relativamente sencillas, con un único ordenador cliente y un servidor, o más complejas, con varios ordenadores cliente y servidores, lo que depende principalmente de cómo vaya a utilizarlas.

Aplicaciones distribuidas conectadas a través de una red
También es importante tener en cuenta que algunas aplicaciones distribuidas son dos programas de software separados que constan de aplicaciones front-end (cliente) y back-end (servidor). El front-end de la operación se ejecuta en el ordenador cliente y requiere una potencia de procesamiento mínima, mientras que el backend requiere mucha más potencia de procesamiento, un sistema más dedicado, y se ejecuta en un ordenador servidor.
En otras aplicaciones distribuidas, la funcionalidad se separa en partes más pequeñas e independientes. Estas aplicaciones comprenden microservicios que gestionan diferentes asuntos dentro de una aplicación más amplia. En una entorno nativo en la nubeLos componentes individuales suelen ejecutarse como contenedores en un clúster. Más adelante entraremos en más detalles sobre cómo se construye una aplicación distribuida.
Aplicaciones autónomas frente a distribuidas
Las aplicaciones autónomas dependen de un único sistema para funcionar. Por ello, todo el procesamiento, almacenamiento y recuperación de datos se realiza desde una única máquina o servidor. Si la aplicación es un modelo cliente-servidor, el software se ejecutará en el cliente o en el servidor al que haya accedido el cliente. Estas aplicaciones son mucho más sencillas de mantener y desarrollar y no requieren infraestructura de comunicación y coordinación entre distintos sistemas. Como las aplicaciones no dependen de una red para comunicarse, no son propensas a fallos de comunicación debidos a fallos de la red.
Sin embargo, esto también significa que estos sistemas tienen capacidades limitadas y no son escalables. Una aplicación que se ejecuta en un único sistema es un único punto de fallo: si el sistema falla, la aplicación deja de estar disponible. También pueden afectar negativamente a la velocidad de los desarrolladores a medida que crecen, porque más desarrolladores tienen que trabajar en una base de código compartida que no tiene necesariamente límites bien definidos.
Por otro lado, las aplicaciones distribuidas son máquinas interconectadas capaces de procesar, almacenar y recuperar datos a través de múltiples sistemas. Pueden ejecutarse simultáneamente en el servidor y en el cliente. La ventaja de utilizar aplicaciones distribuidas es que proporciona fiabilidad: si un sistema que ejecuta una aplicación se cae, otro puede reanudar la tarea. El sistema global puede tolerar más fallos de las aplicaciones. También pueden utilizar escala horizontallo que resulta imposible con las aplicaciones autónomas. Sin embargo, estas ventajas se consiguen a costa de una mayor complejidad y sobrecarga operativa.
¿Cómo puedo utilizar aplicaciones distribuidas?
Piense en las aplicaciones que funcionan en hospitales, bancos u otras organizaciones orientadas a los servicios. Dado que el mismo software se ejecuta en varios ordenadores, permite a las personas trabajar en el mismo registro desde la misma o diferentes ubicaciones editando distintos aspectos del registro, como el registro de datos, la actualización de direcciones y la recuperación de información sobre transacciones.
Entre los casos de uso habituales de las aplicaciones distribuidas se incluyen:
-
- Navegadores web (Tor)
- Sitios web de comercio electrónico (Amazon, eBay)
- Aplicaciones Blockchain (Bitcoin, Ethereum)
- Plataformas de computación en nube (AWS, Microsoft Azure)
- Bases de datos distribuidas (Couchbase, Apache Cassandra)
- Redes de intercambio de archivos entre iguales (BitTorrent)
Cualquier aplicación que almacene datos de una ubicación y los recupere de otra puede considerarse una aplicación distribuida. Para entender qué arquitectura es la adecuada para un caso de uso concreto, debemos examinar los distintos tipos de aplicaciones distribuidas que puede crear un desarrollador.
Ejemplos de aplicaciones distribuidas
Las aplicaciones distribuidas aprovechan el principio de los sistemas distribuidos. Las arquitecturas de aplicaciones más utilizadas pueden clasificarse en las siguientes categorías en función de sus arquitecturas de red subyacentes:
Arquitectura cliente-servidor: Es el sistema distribuido más básico en el que se comunican el servidor y el cliente. Las comunicaciones incluyen el paso de mensajes, la recopilación de datos y los cálculos.
-
-
- Arquitectura de tres niveles: Se trata de una arquitectura cliente-servidor organizada en tres capas: la de presentación, la de aplicación y la de datos. Utiliza capas separadas para cada función del programa. La capa de presentación muestra la interfaz de usuario, la capa de aplicación es responsable de acceder a los datos de la base de datos y procesarlos, y la capa de datos es donde se alojan y almacenan todos los datos y la información.
- Arquitectura de N niveles: Se diferencia de la arquitectura de tres niveles porque cada función se ejecuta en una máquina o clúster independiente.
-
Arquitectura peer-to-peer: En este sistema, cada ordenador actúa como un nodo para la comunicación. Trabajar como nodo para la comunicación significa que cada ordenador es un servidor y un cliente. No tiene un servidor centralizado como la arquitectura anterior. Cada sistema se gestiona a sí mismo en una red de igual a igual, lo que facilita su configuración y manejo.
Arquitectura de microservicios: Esta arquitectura estructura una aplicación como una colección de servicios pequeños, débilmente acoplados e independientemente desplegables. Una aplicación puede descomponerse en servicios altamente cohesionados, cada uno de los cuales representa una capacidad o funcionalidad empresarial específica.
Arquitectura orientada a servicios: En este enfoque, las aplicaciones se construyen como una colección de servicios que se comunican entre sí a través de protocolos estandarizados, promoviendo el acoplamiento flexible y la reutilización de servicios.
Ventajas de las aplicaciones distribuidas
Las ventajas de utilizar aplicaciones distribuidas son:
-
- Tienen la capacidad de escalar horizontalmente. Aprovechan las características de escalado de los sistemas distribuidos y pueden expandirse añadiendo nuevos servidores y sistemas que aumenten la capacidad y las operaciones de una red. El escalado horizontal les permite implantar fácilmente aplicaciones en nuevos sistemas sin afectar a la red original.
- Son tolerantes a fallos o fallos de software, lo que las hace muy resistentes. Como las aplicaciones se ejecutan en varios sistemas, les permite trabajar de forma independiente. El fallo de una aplicación o la avería de una máquina no repercute en las demás aplicaciones de la red.
- Debido a la naturaleza distribuida de la aplicación, el tiempo de respuesta es mucho más rápido, lo que le confiere la ventaja de una baja latencia.
- La autonomía es otra ventaja de las aplicaciones distribuidas. Como el sistema comparte datos, cada usuario o sitio conserva el control sobre los datos y recursos almacenados localmente. También reduce el riesgo de que se produzca un fallo en todo el sistema o se manipulen los datos.
- Las aplicaciones distribuidas también pueden ser rentables a largo plazo, ya que varios ordenadores trabajan juntos compartiendo recursos a través de una red.
Desventajas de las aplicaciones distribuidas
Las desventajas de las aplicaciones distribuidas son:
-
- Una aplicación distribuida introduce una mayor complejidad de diseño. El mantenimiento, la implementación y la resolución de problemas conllevan una gran sobrecarga operativa.
- El uso de numerosos servidores, sistemas y bases de datos aumenta el riesgo de brechas de seguridad, problemas con los datos y fugas de información. Sin embargo, puedes contrarrestarlo tomando medidas de seguridad y ejecutando programas de protección en los sistemas y servidores de todas las ubicaciones.
- Dado que las aplicaciones distribuidas se conectan a través de una única red, cualquier problema o fallo puede provocar una interrupción de la comunicación entre las aplicaciones.
Herramientas y tecnologías para crear aplicaciones distribuidas
La creación de aplicaciones distribuidas requiere un buen conocimiento de las arquitecturas de sistemas distribuidos, los marcos de trabajo, la arquitectura de middleware y las bases de datos. Las herramientas que elijas dependerán de los requisitos de la aplicación, lenguajes de programacióny la funcionalidad y características deseadas. La mayoría de la gente recurre a herramientas como Docker y Kubernetes para desplegar y gestionar aplicaciones distribuidas. Proporcionan enfoques de contenedorización y capacidades de orquestación para escalar, equilibrar la carga y gestionar despliegues distribuidos. Las plataformas en la nube como AWS y Microsoft Azure también tienen capacidades IaaS y SaaS, lo que permite utilizarlas para crear aplicaciones distribuidas escalables,
Conclusión
En este blog hemos tratado los conceptos básicos de las aplicaciones distribuidas, en qué se diferencian de las aplicaciones independientes tradicionales, cómo y dónde utilizarlas, y las ventajas y desventajas de implantar este tipo de aplicaciones. Si está interesado en crear sus propias aplicaciones distribuidas, consulte los siguientes recursos:
Si quieres saber más sobre cómo funcionan las bases de datos distribuidas o cómo Couchbase permite aplicaciones de alto rendimiento con almacenamiento en caché distribuido, lee los siguientes recursos: