Si estás viendo este mensaje, significa que estamos teniendo problemas para cargar materiales externos en nuestro sitio.

If you're behind a web filter, please make sure that the domains *.kastatic.org and *.kasandbox.org are unblocked.

Contenido principal

Computación distribuida

Cuando resolvemos problemas, no tenemos que limitarnos a soluciones que corren en una sola computadora. En vez de eso, podemos usar computación distribuida para distribuir el problema sobre múltiples dispositivos computacionales conectados en red.

Distribución de procesos paralelos

Frecuentemente, la computación distribuida se usa en tándem con computación paralela. La computación paralela en una sola computadora usa múltiples procesadores para procesar tareas en paralelo, mientras que la computación paralela distribuida usa múltiples dispositivos computacionales para procesar dichas tareas.
Considera nuestro programa ejemplo que detecta gatos en imágenes. En un enfoque de computación distribuida, una computadora administradora mandaría la información de las imagenes a cada una de un conjunto de computadoras trabajadoras, y cada trabajadora reportaría sus resultados de vuelta.

Evaluación de rendimiento

La computación distribuida puede mejorar el rendimiento de muchas soluciones aprovechando cientos o miles de computadoras que corren en paralelo. Podemos medir las ganancias calculando la aceleración del tiempo requerido por la solución secuencial dividido entre el tiempo que toma la solución paralela distribuida. Si la solución secuencial toma 60 minutos y la solución distribuida toma 6 minutos, la aceleración es 10.
A pesar de esto, el rendimiento de las soluciones distribuidas puede verse afectado por su naturaleza distribuida. Las computadoras deben comunicarse a través de la red y enviar mensajes con valores de entrada y de salida. Cada mensaje que se manda de un lado a otro toma un cierto tiempo, y ese tiempo se suma al tiempo total de la solución. Para que valga la pena una solución computacional distribuida, el tiempo ahorrado al distribuir las operaciones debe ser mayor que el tiempo agregado por la sobrecarga de comunicación.
En la arquitectura computacional distribuida más simple, la computadora administradora tiene que comunicarse con cada trabajadora.
En arquitecturas más complejas, los nodos trabajadores deben comunicarse con otros nodos trabajadores. Esto es necesario cuando se usa computación distribuida para entrenar una red de aprendizaje profundo, por ejemplo. 1
Una forma de reducir el tiempo de comunicación es usar computación en cluster: computadoras co-localizadas en una red local donde todas trabajan en tareas similares. En un cluster de computadoras, un mensaje no tiene que viajar muy lejos, y mas importante aún, no tiene que viajar a través de la red Internet pública.
Un cluster de computadoras en Molecular Foundry (fundición molecular), un laboratorio de investigación en nanociencia. Fuente de la imagen: US Department of Energy
La computación en cluster tiene sus propias limitaciones; configurar un cluster requiere espacio físico, experiencia en operación de hardware, y por supuesto, el dinero para comprar todos los dispositivos e infraestructura de red.
Afortunadamente, hoy en día muchas empresas ofrecen servicios de computación en la nube que proveen acceso a clusters administrados por ellas a programadores en todas partes. Estas compañías gestionan las operaciones de hardware, proveen herramientas para subir programas, y cobran por el uso.

Distribución de funcionalidad

Otra forma de computación distribuida es usar dispositivos computacionales diferentes para ejecutar distintos pedazos de funcionalidad.
Por ejemplo, imagina un zoológico con muchas cámaras de seguridad. Cada cámara de seguridad graba video en formato digital. Las cámaras mandan sus datos de video a un cluster de computadoras localizado en las oficinas del zoológico, y ese cluster corre algoritmos de análisis de video para detectar animales que se han escapado. El cluster también manda datos de video a un servidor computacional en la nube, que analiza terabytes de datos de video para descubrir tendencias históricas.
Cada dispositivo computacional en esta red distribuida trabaja sobre un pedazo diferente del problema, de acuerdo con sus fortalezas y debilidades. Las cámaras de seguridad no tienen suficiente poder ellas mismas para detectar animales que se han escapado, ni suficiente espacio de almacenamiento para guardar los videos de otras cámaras (que podrían ayudar a que un algoritmo detecte movimiento). El cluster local tiene una buena cantidad de poder de procesamiento y almacenamiento extra, asi que puede ejecutar la urgente tarea de detectar animales que han escapado. No obstante, el cluster delega la tarea que requiere más proceso y almacenamiento (pero que no es tan sensible al tiempo) al servidor de computación en nube.
Esta forma de computación distribuida reconoce que el mundo está lleno de una gama de dispositivos computacionales con diferentes capacidades, y que en última instancia, algunos problemas se resuelven mejor usando una red de dichos dispositivos.
De hecho, en este momento participas en un gigantesco ejemplo de computación distribuida: la web. Tu computadora hace mucho procesamiento para leer este sitio web: mandar solicitudes HTTP para obtener los datos del sitio, procesar el JavaScript que el sitio carga, y actualizar constantemente la pantalla a medida que desplazas la página. Pero nuestros servidores también están haciendo una gran cantidad de trabajo mientras responden a tus solicitudes HTTP, y además enviamos datos a servidores analíticos de alta potencia para su procesamiento posterior.
Toda aplicación que usa Internet es un ejemplo de computación distribuida, pero cada aplicación toma decisiones diferentes sobre cómo distribuir la computación. Para otro ejemplo, los asistentes inteligentes de casa realizan localmente una cantidad pequeña de procesamiento de lenguaje para determinar que les has pedido ayuda, pero luego envían tu audio a servidores de alta potencia para analizar tu pregunta completa.
El Internet posibilita computación distribuida a escala global, tanto para distribuir computación paralela como para distribuir funcionalidad. Los científicos de computación, programadores y emprendedores constantemente descubren nuevas formas de usar computación distribuida para aprovechar esta red de computadores tan masiva y resolver problemas.
🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿TIenes alguna pregunta sobre este tema? ¡Nos encantaría responderte; tan solo pregunta en el área de preguntas más abajo!

¿Quieres unirte a la conversación?

Sin publicaciones aún.
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.