Cuando se creaba una aplicación web en años anteriores, era común tener un servidor en un centro de datos central donde se podía ejecutar la aplicación. A medida que aumentara el uso, solucionaría los cuellos de botella de escalabilidad a medida que surgieran.
Hoy en día, las aplicaciones web se escalan desde el principio. El código se ejecuta cada vez más en plataformas sin servidor, en espacios aislados virtuales que pueden existir solo durante el tiempo que se tarda en enviar una respuesta al usuario. El almacenamiento de archivos y las bases de datos se administran cada vez más para los desarrolladores sin tener que configurar su propio hardware.
Uno de los beneficios de este cambio es que el código puede vivir en el borde de la red, en los puntos de intercambio de Internet que conectan a los ISP de los consumidores con los proveedores de alojamiento en la nube, lo que permite tiempos de carga de baja latencia. Este cambio significa necesariamente que el código existirá en varios servidores de todo el mundo desde el momento en que se implemente por primera vez, en lugar de cuando se necesite escalabilidad.
Los sistemas de software que habríamos construido centralmente hace años ahora son sistemas distribuidos. Estas prácticas incluso se están abriendo camino en los centros de datos centrales, utilizando tecnologías como Kubernetes para escalar automáticamente las aplicaciones en contenedores virtuales.
Los últimos meses han demostrado que algunas organizaciones de tecnología están luchando por cerrar esta brecha, en particular las empresas donde el software se administra como un monolito centralizado (a menudo denominado «monorepo») sin estructuras de comunicación bien definidas entre las diferentes partes del sistema. Los sistemas distribuidos son efectivos en sistemas simples con estructuras de comunicación escalables.
La Ley de Conway es un adagio muy conocido en la gestión de ingeniería de software que establece: «Cualquier organización que diseñe un sistema (en términos generales) producirá un diseño cuya estructura es una copia de la estructura de comunicación de la organización».
En otras palabras, su diseño organizacional refleja en última instancia la arquitectura de su software. Las organizaciones administradas centralmente con bajos niveles de confianza tendrán dificultades para construir sistemas distribuidos con estructuras de comunicación efectivas.
Para tener éxito en la construcción de sistemas distribuidos, necesita ingenieros calificados que estén administrados y motivados de manera efectiva con las estructuras de incentivos adecuadas. Esto significa que una cultura de experimentación y seguridad psicológica están en el centro de la creación de servicios web sobre la próxima generación de tecnologías en la nube.
Junade Ali es un tecnólogo experimentado con intereses en gestión de ingeniería de software, investigación de seguridad informática y sistemas distribuidos.