He estado trabajando desde hace un rato en la arquitectura del nuevo sistema de Becual.com (excelente emprendimiento, les recomiendo pasar a mirar el modelo de negocio, les conviene…) y últimamente he estado tirando líneas para hacerlo más escalable horizontalmente (pensando en cuando seamos una empresa multimillonaria sin rostro y yo nade en dinero como rico mac pato), es por eso que he estado revisando apuntes de sistemas distribuidos y leyendo para retomar la forma de pensar en los mismos, y como hace tiempo que no escribo nada dije, ya que estamos en esto mejor le damos.

Bueno, rescatando la definición de wikipedia, un sistema distribuido es una colección de computadores conectados entre sí por una red de comunicación y por simplicidad en el post, para nosotros estos computadores son nodos de la red. Como este post no tiene por propósito hablar de la definición de un sistema distribuido ni mucho menos, pasamos de inmediato a lo interesante, ¿Qué es esto del teorema CAP? y ¿Qué tiene que ver con sistemas distribuidos?, han escuchado la expresión «Bueno, Bonito, Barato… elija sólo dos», esta expresión caracteriza muy bien al teorema CAP (por sus siglas en ingles) o Teorema de Brewer (por Erick Brewer, el primero en enunciarlo), básicamente lo que el teorema indica es que un sistema distribuido tiene 3 característica fundamentales para cumplir, estas son:

  • Consistencia (Consistency): Todos los nodos que participan en un proceso distribuido, tienen acceso a la misma información, por lo que si actualizo la información en un nodo y consulto otro, el sistema debe asegurarme que la información que me entrega sea la mas nueva, en este caso, la información que acabo de actualizar.
  • Disponibilidad (Availability): Esto quiere decir, que se garantiza que toda petición aun nodo, como por ejemplo una lectura, responda en un tiempo acotado y sin responder un error, en simple, que siempre te responda no te deje esperando para siempre y jamás te tire un time out.
  • Tolerancia al particionado (Partition Tolerance): Que dice que el sistema debe seguir funcionando pese a que entre ellos los nodos no se puedan comunicar.

Y como partimos postulando, no se puede tener todo en la vida, por lo que estamos restringidos a asegurar dos de ellas, el teorema tiene una muy buena y fundada explicación teórica que no explicaré para no quedar en vergüenza… pero les tengo aún más malas noticias, las restricciones que tenemos son aún mayores, pero eso lo revisaremos en otra ocasión, cuando analicemos las ocho falacias de la computación distribuida… estamos aún más atados de manos de lo que creemos.