E PLURIBUS UNUM [*]
JON KLEINBERG
Catedrático de ciencias informáticas de la Universidad de Cornell; coautor (junto con David Easley) de Networks, Crowds, and Markets: Reasoning About a Highly Connected World.
Si ya utilizaba usted un ordenador personal hace veinticinco años recordará que todo cuanto debía preocuparle ocurría en el interior de la caja que tenía enfrente. En la actualidad, las aplicaciones que usamos en una hora se encuentran dispersas en una red: la que forman un conjunto de ordenadores repartidos por todo el mundo. En la mayoría de los casos hemos perdido por completo la capacidad de señalar en qué punto exacto se sitúan realmente nuestros datos. Hemos inventado términos para expresar la pérdida de este sentido de la orientación, ya que nuestros mensajes, nuestras fotos y nuestro perfil de la Red se encuentran en algún lugar o, como suele decirse, en «la nube».
La nube no es un objeto único. Lo que tenemos interiorizado como nuestra cuenta de Gmail, o nuestro perfil de Facebook, se convierte en real gracias al trabajo conjunto de un enorme número de componentes físicamente dispersos; es decir, se trata de un sistema distribuido, por utilizar el lenguaje de la informática. Sin embargo, podemos concebirla como si fuera un objeto único, y eso es lo más importante, dado que las ideas de los sistemas distribuidos encuentran aplicación en todos aquellos casos en que observamos que existe un gran número de pequeños elementos operando de forma independiente pero coordinada, produciendo además la ilusión de corresponder a una única experiencia singular. Se trata de un efecto que ocurre tanto en Internet como en otros muchos ámbitos. Pensemos, por ejemplo, en una gran corporación que está lanzando nuevos productos al mercado y realizando para ello anuncios públicos como si se tratase de un actor único —cuando lo cierto es que sabemos perfectamente que, observada con un mayor nivel de detalle, la compañía en cuestión está integrada por decenas de miles de empleados—. O consideremos el caso de una inmensa colonia de hormigas capaz de proceder a una exploración coordinada de su entorno. O las neuronas de nuestro propio cerebro, dotadas de la facultad de crear la experiencia que está usted teniendo en este preciso instante.
El reto al que se enfrenta un sistema distribuido radica en lograr la ilusión de una conducta unificada y única pese al enorme volumen de complejidad subyacente. Y este desafío general está compuesto, de forma harto pertinente al caso, por un gran número de envites de menor envergadura en permanente tensión recíproca.
Una de las piezas más importantes de este rompecabezas es la coherencia. Cada uno de los elementos que integran un sistema distribuido ha de bregar con cosas diferentes, y su capacidad para comunicarse con el resto de los elementos del sistema es limitada, de modo que las distintas partes de ese sistema pueden acabar desarrollando una visión del mundo que resulte mutuamente incompatible. Existen muchos ejemplos que muestran cómo este estado de cosas termina a veces generando problemas, ya sea en la esfera tecnológica o en otros ámbitos. Su dispositivo móvil no se sincroniza con su correo electrónico, de modo que usted actúa sin darse cuenta de que, en realidad, ya han respondido a su mensaje. Dos personas del país reservan a un tiempo el asiento 5F en un mismo vuelo y con el mismo horario. Al ejecutivo de una determinada organización «no le ha llegado el informe», de modo que se sale por la tangente. Un pelotón de soldados ataca demasiado pronto y alerta al enemigo.
Es natural tratar de «arreglar» este tipo de problemas imponiendo una única visión global del mundo y exigiendo que todos los elementos que integran el sistema se remitan invariablemente a ese punto de vista global antes de actuar. Sin embargo, esto resta interés a muchas de las razones que nos impulsan originalmente a utilizar un sistema distribuido, ya que convierte al componente que proporciona la visión global en un enorme cuello de botella y en un punto potencialmente expuesto a la ocurrencia de peligrosos fallos. Una compañía no funciona si el director ejecutivo de la empresa tiene que refrendar todas las decisiones.
Para hacernos una idea más concreta de las cuestiones que lleva aparejadas el diseño subyacente de un sistema distribuido resultará útil pararnos a examinar con cierto detenimiento los pormenores de un ejemplo concreto —aunque se trata, en realidad, de un tipo de situación elemental en la que trataremos de conseguir el resultado deseado mediante una información y unas acciones repartidas entre un gran número de actores—. El ejemplo al que me refiero se relaciona con los problemas que plantea la necesidad de compartir de manera segura la información. Imaginémonos que estamos tratando de realizar la copia de seguridad de una base de datos muy importante en un gran número de ordenadores, protegiendo al mismo tiempo los mencionados datos de modo que estos solo puedan reconstruirse en caso de que la mayoría de los ordenadores implicados en la conservación de nuestra copia de seguridad cooperen en el empeño. Ahora bien, como en último término las cuestiones relacionadas con una puesta en común segura de la información no guardan ninguna relación específica ni con los ordenadores ni con Internet, vamos a formular nuestro problema de otro modo: valiéndonos del relato de un tropel de piratas y un tesoro enterrado.
Supongamos que un rey pirata, entrado ya en años, conoce la ubicación de un tesoro escondido y que antes de abdicar se propone compartir el secreto con sus cinco hijos, todos ellos unos rematados haraganes. Lo que el monarca quiere es que puedan acceder al tesoro en caso de que al menos tres de ellos sean capaces de unir sus fuerzas, pero también desea evitar que uno o dos de sus hijos formen una «facción escindida» y consigan apropiarse del tesoro en exclusiva. Para alcanzar este objetivo, el viejo rey pirata concibe un plan consistente en distribuir el secreto de la localización del tesoro en cinco «partes», dando a cada uno de sus cinco hijos una de ellas —y asegurándose así de que se cumpla en lo sucesivo la condición que exponemos a continuación—. Si, en cualquier instante futuro, al menos tres de sus hijos consiguen compartir sus respectivos indicios del secreto, podrán reunir el conocimiento preciso para encontrar el tesoro. Sin embargo, si uno de sus hijos pretende averiguar por sí solo el paradero de los caudales o solo logra ponerse de acuerdo con uno de sus cuatro hermanos, entonces no contará con la suficiente información.
¿Cómo lograrlo? No es difícil idear una o varias formas que permitan generar cinco pistas o claves de tal modo que todas ellas resulten necesarias para hallar el tesoro. Sin embargo, en ese caso sería necesario que los cinco hermanos cooperaran de manera unánime para poder hallar la fortuna oculta. Pero ¿cómo proceder para que la cooperación de cualquiera de los tres implicados baste para conseguir el objetivo y no ocurra lo mismo si colaboran solo dos de ellos?
Como acostumbra a suceder en el caso de muchas grandes intuiciones, la respuesta resulta fácil de entender a posteriori. El rey pirata traza un círculo secreto en el globo terráqueo (un círculo que solo él alcanza a distinguir) y le dice a sus hijos que ha enterrado el tesoro exactamente en el punto más meridional de dicho círculo. A continuación proporciona a cada uno de sus hijos las coordenadas de un punto distinto del círculo en cuestión. Para reconstruir un círculo en concreto basta con disponer de tres de los puntos que lo definen, y por consiguiente cualquier grupo formado por tres de los príncipes piratas podrá compartir la información de que disponen sus integrantes, identificar el círculo y hallar el tesoro. Sin embargo, toda pareja formada únicamente por dos piratas descubrirá que por los dos puntos que son capaces de determinar pasan una infinidad de círculos, sin que les resulte posible saber cuál indica el modo de recuperar el tesoro. Se trata de un truco muy sólido que, además, puede aplicarse a una multitud de casos. De hecho, los principios básicos de los modernos sistemas de protección de datos emplean alguna variante de esta estrategia de puesta en común de los elementos secretos que permiten el acceso a la información deseada. Su descubridor fue el criptógrafo Adi Shamir, y con este esquema pueden codificarse los datos arbitrarios de cualquier materia utilizando los puntos de una curva y reconstruyéndola tan pronto como se conocen los demás puntos de esa misma curva.
La literatura relativa a los sistemas distribuidos está repleta de ideas de esta índole. Desde un punto de vista más general, los principios de los sistemas distribuidos nos abren una vía para reflexionar acerca de las dificultades inherentes a los sistemas complejos compuestos por un gran número de partes capaces de interactuar unas con otras. Y de ese modo, cada vez que se nos ofrezca la oportunidad de tener la impresión de estar navegando por una Red unificada, de consultar un sistema bancario global igualmente unificado o de vivir una experiencia sensorial también única, deberíamos pensar en los miles de desafíos que implica mantener agrupadas en una misma entidad singular todas esas experiencias.