Transformación Tecnológica | Jose Luis Bugarin
|Cada empresa, independientemente de sus orígenes, se está convirtiendo en una empresa digital. Esta transformación requiere que las aplicaciones móviles, los dispositivos en Internet de las cosas (IoT) o incluso los vehículos y sistemas autónomos consuman APIs y servicios. La creciente criticidad de estos sistemas significa que es necesario que estos sistemas en línea se creen con redundancia, tolerancia a fallas y alta disponibilidad. Al mismo tiempo, los requerimientos de las empresas buscan agilidad para desarrollar y lanzar un nuevo producto de software, iterar en aplicaciones existentes o experimentar con nuevas interfaces de usuario y APIs. La confluencia de estos requisitos ha llevado a un aumento de orden de magnitud en el número de sistemas distribuidos que deben construirse.
La tarea de construir estos sistemas todavía es demasiado difícil y complejo. El costo general de desarrollar, actualizar y mantener dicho sistema es demasiado alto. Del mismo modo, el conjunto de personas con las capacidades y habilidades para construir tales aplicaciones es demasiado pequeño para satisfacer la creciente necesidad.
Históricamente, cuando estas situaciones se presentaron en el desarrollo y la tecnología de software, surgieron nuevas capas de abstracción y patrones de desarrollo de software para hacer que la creación de software sea más rápida, fácil y confiable. Esto ocurrió por primera vez con el desarrollo de los primeros compiladores y lenguajes de programación. Más tarde, se produjo el desarrollo de lenguajes de programación orientados a objetos. Asimismo, en cada uno de estos momentos, estos desarrollos técnicos abrieron el conocimiento y las prácticas de los expertos en una serie de algoritmos y patrones que podrían ser aplicados por un grupo mucho más amplio de profesionales. El avance tecnológico combinado con el establecimiento de patrones democratizó el proceso de desarrollo de software y amplió el conjunto de desarrolladores que podían crear aplicaciones en la nueva plataforma. Esto a su vez condujo al desarrollo de más aplicaciones y diversidad de aplicaciones, lo que a su vez expandió el mercado para las habilidades de estos desarrolladores.
Nuevamente, nos encontramos en un momento de transformación tecnológica. La necesidad de sistemas distribuidos supera con creces nuestra capacidad de entregarlos. Afortunadamente, el desarrollo de la tecnología ha producido otro conjunto de herramientas para expandir aún más el grupo de desarrolladores capaces de construir estos sistemas distribuidos. El reciente desarrollo de contenedores y orquestación de contenedores ha traído herramientas que permiten el desarrollo rápido y más fácil de sistemas distribuidos.
Patrones como sidecars, function as a service, servicios, colas y más pueden formar la base sobre la cual se construyen los sistemas distribuidos modernos. Los desarrolladores de sistemas distribuidos ya no deberían construir sus sistemas desde cero como individuos, sino colaborar juntos en implementaciones reutilizables y compartidas de patrones que forman la base de todos los sistemas que implementamos colectivamente. Esto nos permitirá satisfacer las demandas de los servicios y APIs confiables y escalables de hoy, y potenciar un nuevo conjunto de aplicaciones y servicios para estar preparados en el futuro.