1. DESCRIPCIÓN DEL ÁREA TECNOLÓGICA
Las infraestructuras de computación han sufrido grandes cambios en los últimos 20 años. Esta revolución ha venido provocada, en parte, por los avances de la tecnología y, por otra, por la demanda, siempre creciente, de servicios por parte de usuarios, tanto particulares como corporativos o empresariales.
Hace menos de 20 años sólo grandes compañías tenían la necesidad de disponer de grandes centros de datos o de almacenamiento. Estos centros eran principalmente privados, dedicados exclusivamente a la ejecución de tareas de dicha empresa. Además, el uso de estos recursos no era eficiente puesto que, en general, las tareas se asignaban a máquinas individuales que quedaban bloqueadas independientemente de que utilizaran todos sus recursos o no. Incluso en los casos en los que no era necesario un centro de datos, pero si una cierta cantidad de potencia de cómputo, esto era un problema, dado que era un gasto complicado de amortizar pero necesario si se quería ofrecer un determinado servicio. Entonces llegaron las tecnologías de virtualización.
La virtualización supuso un alivio en la inversión y gasto en infraestructuras y recursos de computación. Primero, impulsó un aumento en la eficiencia del uso de recursos, puesto que la unidad de cómputo paso a ser la máquina virtual, no la máquina física. Esto permitió ejecutar muchas más tareas con los mismos recursos físicos. Segundo, obviamente, reducía los gastos de todas aquellas compañías que requerían infraestructura, tanto en adquisición de bienes capitales, dado que menos máquinas físicas eran necesarias, como de operaciones, dado que el gasto en mantenimiento y consumos de estas máquinas era menor. Y entonces, llego la nube.
La computación en la nube supuso un antes y un después en todo lo relacionado con infraestructuras de computación y, principalmente, supuso su democratización.
Comenzaron a aparecer los grandes proveedores de infraestructura en la nube, permitiendo a particulares, pequeñas, medianas o grandes empresas utilizar recursos de computación sin tener que adquirirlos, alquilándolos y ajustándolos a su demanda instantánea. Esto, por una parte, hacía factible para estos proveedores amortizar la infraestructura adquirida y evitaba el gran desembolso que el resto de actores tenía que hacer para adquirir recursos de computación que, además, muchas veces se dimensionaban para cubrir picos máximos de consumo, no cubrir el servicio habitual.
Además, la computación en la nube ha llevado a la aparición de distintos submodelos según lo que el cliente final alquila. Los principales modelos derivados son: Infraestructura como servicio (IaaS, por sus siglas en inglés – Infrastructure as a Service), Plataforma como servicio (PaaS) o Software como servicio (SaaS). Esto también ha derivado en otras aproximaciones como BigData as a Service (BDaaS) o Function as a Service (Faas), entre otros.
En paralelo, otra revolución estaba teniendo lugar, la de los datos. La explosión en capacidad de cómputo a la que, de repente, tenían acceso las empresas facilitó que éstas comenzaran a almacenar más datos y a analizarlos. Esto se complementó, posteriormente, con la llegada de redes de sensores que aumentaron la cantidad de datos disponibles y retroalimentó la necesidad de capacidad de cómputo para poder analizarla.
Sucesivos avances tecnológicos, como la llegada del Internet of Things (IoT), el auge de la inteligencia artificial y el análisis de datos o, más recientemente, las Distributed Ledger Technologies (DLTs) y Blockchain, abanderados por la red Bitcoin, no han hecho más que seguir retroalimentando este ciclo, ya sea de manera indirecta, ofreciendo más datos, o directa, incrementando la necesidad de cómputo. Esto ha contribuido a la creación de infraestructuras de cómputo cada vez mayores y más complejas sin las que hoy sería posible concebir o gestionar la revolución tecnológica en la que vivimos.
El área tecnológica se distribuye en cuatro ramas principales:
- Cloud Computing
- Edge Computing
- High Performance Computing (HPC)
- Distributed Ledger Technologies.
A continuación, exploraremos algunas de los aspectos y aplicaciones más relevantes de cada uno de ellos.
CLOUD COMPUTING
La computación en la nube ha facilitado a cualquier usuario, ya sea una empresa o un particular, el acceso a una cantidad ilimitada de recursos de computación.
Sin embargo, la democratización de estos recursos ha sido mayor de lo que estas palabras expresan. El acceso a recursos podría parecer suficiente, a priori, sin embargo, no cualquier usuario tiene la capacidad de gestionar, configurar, manipular máquinas virtuales en un entorno online. Es más, adicionalmente, haría falta instalar y configurar aquellas herramientas que se quisiera utilizar en esta infraestructura. Es por esto que la computación en la nube recoge múltiples paradigmas, según el grado de control o profundidad que se quiere tener. Los tres paradigmas más comunes son:
- Infraestructura como servicio (IaaS): El usuario alquila la infraestructura directamente, máquinas virtuales o contenedores vacíos sobre los que tiene pleno control. Esto también implica una mayor complejidad y dificultad de uso ya que conlleva selección y mantenimiento de sistemas operativos, seguridad, escalado e incluso configuración de red.
- Plataforma como Servicio (PaaS): Este nivel ya obvía parte de las complejidades anteriores, ofreciendo una plataforma sobre la que el usuario puede instalar ciertas aplicaciones, configurara servicios, pero ya se abstrae de cuestiones como la gestión de la arquitectura, como el escalado o gestión de sistemas operativos.
- Software como Servicio (SaaS): A este nivel se interactúa directamente con un software del que se es usuario. No hay complejidades añadidas ni configuraciones más allá de posibles personalizaciones. Ejemplos de SaaS del día a día podrían ser servicios de email como Gmail o de gestión de archivos como Dropbox.
Sin embargo, las tecnologías en la nube han ido más allá. Además de ofrecer distintas granularidades para el usuario a nivel de servicio, se ofrecen distintas granularidades a nivel de capacidad de cómputo y ejecución. No sólo hablamos de tener máquinas virtuales de distintos tamaños, sino también de elementos más ligeros como contenedores, por ejemplo Docker, que están pensados para ejecutar servicios o aplicaciones individuales; o de incluso elementos más ligeros, orientados a la ejecución o servicio de peticiones individuales, lo que se ha venido a llamar Function as a Service (FaaS). En este último caso, el servicio deriva las peticiones conforme van llegando y las ejecuta en contenedores que contienen lo justo para servir estas peticiones, normalmente sin estado. Estos contenedores se crean, exprofeso, para ejecutar estas peticiones y su vida útil suele ser sólo lo que cuesta en servir dicha petición.
Las aplicaciones de la computación en la nube son muy variadas. Mas allá de las aplicaciones más obvias ejemplificadas en servicios SaaS, la posibilidad de desplegar recursos adicionales en la nube permite a muchas empresas hacer frente a picos de demanda de sus servicios de manera flexible y a bajo coste. Ejemplos de esto van desde la pequeña empresa que, en momentos de alta demanda como, por ejemplo, navidad, puedan contratar recursos extra para servir su tienda online o, si ya la tienen hospedada en la nube, escalarla automáticamente conforme a la demanda; a ejemplos conocidos por la mayoría como Netflix, que decidió pasar el grueso de su infraestructura a la nube, para obtener beneficios adicionales como autoescalado, redundancia multizona o, por supuesto, reducción de costes.
Sin embargo, la nube también ofrece servicios complejos que facilitan la vida a profesionales de muchos sectores. Un ejemplo de esto son plataformas BigData as a Service, como Radiatus, desarrollada en el ITI. Radiatus ofrece una amplia variedad de servicios relacionados con el análisis de datos, machine learning e inteligencia artificial en general. Los usuarios de este servicio son, principalmente, analistas de datos y científicos que, de esta manera evitan la complejidad de tener que desplegar stacks completos de herramientas de análisis o conocer sus dependencias otras complicaciones derivadas del proceso de instalación. Con plataformas como Radiatus, el usuario sólo debe elegir que herramientas necesita, esperar a que se desplieguen y empezar a trabajar.
EDGE COMPUTING
El edge computing surge como respuesta a una necesidad en muchos sectores de la industria, así como consecuencia al aumento exponencial de la cantidad de datos, multimedia o no, disponibles hoy día. Una arquitectura habitual en muchos sistemas consistía en tener nodos sensores o capturadores de información que se limitaban a reenviar estos datos a grandes centros de cómputo o datos para su procesado o almacenamiento. Estos datos se recibían en el centro correspondiente, se procesaban, y si era necesario, se mandaba una respuesta. Esto era factible por el bajo volumen de datos a enviar, porque en general esos datos podían procesarse rápidamente o porque la latencia asociada con enviar estos datos a un centro de datos no era relevante.
Sin embargo, la explosión de datos multimedia ocurrida en los últimos años ha dinamitado, al menos, dos de estas condiciones. En muchos casos, el volumen de los datos a enviar ya no es trivial, especialmente en los casos en que flujos de vídeo están implicados. Además, el procesado de este tipo de datos no es trivial o ágil en muchos de los casos. Es más, con la cada vez más frecuente externalización de servicios a la nube e implementación de servicios complementarios y adicionales, hay cada vez una mayor necesidad de obtener respuestas en tiempo cuasi real, bien por su criticidad, bien por la presencia de usuarios.
Como respuesta a esta problemática surgió el concepto de Edge Computing. La computación en el Edge consiste en bien añadir nodos intermedios, cercanos a donde se generan los datos, o bien dotar de recursos de computación a estos dispositivos. El objetivo es ahora preprocesar, filtrando o agregando, por ejemplo, los datos con tal de reducir el ancho de banda y agilizar la tarea a ejecutar en el centro de datos remoto; o directamente ejecutar ciertas tareas más críticas, reduciendo la latencia en la respuesta y garantizando completa disponibilidad. Dos ejemplos de caso de uso podrían ser el coche autónomo o dispositivos de análisis clínico.
En el primer caso, el coche autónomo, tenemos un dispositivo, el coche en sí, que será capaz de generar enormes cantidades de datos diariamente. Pensemos en la cantidad y variedad de sensores con que puede contar un vehículo de estas características: cámaras, acelerómetros, sensores para cada uno de los circuitos del coche, sensores de distancia, etc. Los datos generados en un día podrían estar en el orden de los terabytes, debido principalmente a las cámaras de vídeo. Esta cantidad de datos no puede estar siendo transmitida de manera continua a centros de datos remotos por tres motivos. Primero, no sería posible proveer la cantidad de ancho de banda necesaria para cubrir las necesidades de comunicación del conjunto de automóviles cuando la tecnología se asentara. Segundo, el envío de esta información y su procesado supondría un incremento inasumible de latencia en la toma de decisiones. Imaginemos por ejemplo un coche que necesita decidir en una fracción de segundo que maniobra hacer para evitar el atropello de un peatón o una colisión. Tercero, similar al segundo caso pero más extremo, la cantidad de vehículos mandando datos podría causar la saturación del centro de datos, provocando el encolamiento de tareas, inaceptable siendo tareas críticas, o incluso que hubiera caídas de servicio. Por este motivo, los coches autónomos serán centros de computación ambulantes, donde cualquier operación crítica será resuelta en tiempo real en el mismo vehículo y tareas secundarias, como modelos de consumo, cómputos basados en históricos, sí que podrían derivarse a la nube.
El caso de dispositivos médicos es similar. Muchos de estos dispositivos, como un TAC, son máquinas con una cantidad de recursos y funciones limitadas. El motivo para esto es que añadir más funcionalidad en el dispositivo puede aumentar la posibilidad de generación de errores. Si esta maquinaria desempeña labores críticas o que puedan poner en riesgo vidas humanas, estos errores no son asumibles, por lo que se optaba por sistemas austeros en su funcionalidad pero que fueran fiables. Sin embargo, ahora se está empezando a estudiar o a incluir la posibilidad de disponer de funcionalidad adicional que no se ejecuta en la misma máquina, sino en un nodo desplegado en el mismo centro médico si tiene algún tipo de limitación de latencia, o incluso en la nube si no hay requisitos o criticidad temporal. De esta manera, la máquina sigue siendo igual de segura, pero el valor añadido y funcionalidades pueden aumentar de manera casi ilimitada.
HIGH PERFORMANCE COMPUTING (HPC)
La computación de alto rendimiento o High Performance Computing ha estado con nosotros desde hace décadas. Explicado de una manera sencilla, consiste en el uso de supercomputadoras o de computadoras especializados para la resolución de problemas altamente complejos y que, comparados con una computadora de sobremesa, permiten reducir el tiempo de cómputo requerido para su resolución en uno o más órdenes de magnitud. Ejemplos que han estado entre nosotros un poco desde siempre han sido aquellos superordenadores que intentaban ganar al ajedrez a grandes maestros, como el de Deep Blue vs Kasparov.
Sin embargo, los sistemas HPC y el interés por ellos, están viviendo una segunda juventud gracias en parte al boom del análisis de datos y al BigData. Como se ha mencionado, uno de los grandes retos actuales es analizar de manera eficiente la inmensa cantidad de datos disponibles y la generación de modelos basados en estos datos que resuelvan necesidades o casos de uso particulares. La complejidad del proceso de entrenar estos modelos, o de las operaciones necesarias para resolver según qué operaciones, hace que el acceso a clústers de procesadores de alto rendimiento, como por ejemplo GPUs (Unidades de Procesado Gráfico o, en inglés, Graphics Processing Units) se convierta en objeto de deseo para analistas de datos, gracias a la mayor eficiencia y capacidad de procesado de estos dispositivos.
El principal caso de uso de estos sistemas sigue siendo el desarrollo de técnicas de inteligencia artificial. Para esto, el principal demostrador sigue siendo la capacidad de una máquina de jugar a juegos altamente complejos e intentar vencer a los correspondientes campeones humanos. Son numerosos los ejemplos que se publican hoy en día, como el ya conocido del ajedrez, o los últimos logros del equipo DeepMind de Google derrotando a campeones de Go, juego de mesa asiático de gran tradición, o su incursión en juegos de ordenador, como por ejemplo StarCraft. En 2019 mismo, AlphaStar, la aplicación de DeepMind para StarCraft 2 ha conseguido gabar de forma holgada a jugadores profesionales de este juego. Para conseguirlo, la última evolución del sistema, basado en redes convolucionales, entrenó de manera intensiva, jugando contra sí misma, durante una semana seguida, analizando datos y resultados y consiguiendo el aprendizaje equivalente a 200 años de juego. Sorprendentemente, la partidas contra jugadores humanos no las ganó aprovechando un mayor índice de acciones ejecutadas por minuto, que podríamos pensar que es su principal arma. De hecho, los jugadores humanos llegaron a alcanzar mayores índices de acciones por minuto. Sus victorias se debieron a que sus decisiones y estrategia fueron, simplemente mejores. AlphaStar había aprendido a jugar mejor que los humanos.
Otro ejemplo de uso de GPUs para análisis de datos es en el estudio de la segmentación del tejido denso en imágenes médicas de alta resolución en el estudio cáncer de mama, realizado aquí en el ITI. En este caso, este tipo de estudio se realizaba por parte de radiólogos estudiando estos conjuntos de imágenes médicas. El principal problema es que este proceso era lento, arduo, y estaba limitado por la cantidad de especialistas. Por ello, la introducción de sistemas automáticos que permiten automatizar el análisis del tejido denso del pecho de la mujer mediante el uso de redes neuronales convolucionales ha supuesto un gran avance gracias a la sencillez con la que se pueden entrenar estos sistemas, el tiempo que esto permite ahorrar y la posibilidad de alcanzar grados de efectividad similares a los de un especialista humano.

DISTRIBUTED LEDGER TECHNOLOGIES
Las Distributed Ledger Technologies (DLT) han irrumpido con fuerza en el panorama tecnológico de la última década, abanderadas por el Bitcoin, la más popular de las criptodivisas y su red Blockchain. De Blockchain, un caso particular de DLT, se han dicho muchas cosas: que arruinará la economía mundial, que sustituirá a los bancos, o que no es más que un vehículo de especulación. Sin embargo, más allá de toda especulación, lo cierto es que cada día surgen más casos de uso completamente válidos, tanto en el mundo privado y corporativo como de cara al gran público.
De cara al gran público, tenemos los casos de Bitcoin, pero también de otras tecnologías como Ethereum, que mediante el avance realizado en el desarrollo de SmartContracts ha permitido el despliegue de gran variedad de aplicaciones en su red. Ejemplos de estas aplicaciones pueden ir desde banales juegos de colección, como CryptoKitties, donde usuarios puede comprar su propio gatito virtual completamente único, a contratos entre particulares o empresas con la garantía de que ninguna de las partes puede violarlo o hacer trampa. De hecho, esta es la principal virtud de los DLTs, las transacciones son inmutables, no repudiables, es todo seguro y permite que individuos que no confían el uno en el otro puedan hacer transacciones sin necesidad de un tercero, como por ejemplo un banco. Si además sumamos los Smart Contracts, añadimos la posibilidad de ejecutar cadenas de acciones de manera segura y que producen de manera determinista un resultado dada una misma entrada.
Desde el punto de vista privado, cada vez son más frecuentes los despliegues de redes DLT en distintos entornos de negocios gracias, principalmente, a estas características, la inmutabilidad y el no repudio, y el valor añadido que estos suponen en una relación comercial entre partes que no necesariamente se fían la una de la otra. Desde iniciativas relativamente abiertas como Quorum a otras como Hyperledger Fabric, abierta también, pero impulsada por compañías como IBM, el interés por la tecnología es creciente.
Uno de los problemas más importantes a superar por esta tecnología fue como garantizar el consenso, la confianza, entre las partes implicadas. En sistemas privados donde las partes han de conocerse, incluso permitirse el acceso, suena factible, pero ¿qué pasa en un sistema abierto como Bitcoin u otras redes blockchain?. Estas redes se han valido de los sistemas distribuidos y de su capacidad de cómputo para proporcionar sus características. Tomando como ejemplo Bitcoin, la primera medida de seguridad es que el libro de cuentas, ledger, o log de transacciones, no está en posesión de un usuario, si no de todos los de la red, seguridad proporcionada por la escala. Pero la información ha de ser consistente, ahí entra el consenso, que mediante el algoritmo Proof of Work y criptografía, proporciona un sistema en el que una vez una transacción se almacena en la red blockchain, modificarla resulta prácticamente imposible, ya que haría falta falsificar toda la cadena para hacer un solo cambio y el esfuerzo computacional sería inabarcable.
¿NECESITAS ALGUNA DE ESTAS TECNOLOGÍAS EN TU PROYECTO?
Ponte en contacto con nosotros a través del formulario para empresas y te orientaremos para incorporar estos tecnologias a tu proyecto a través de los socios especializados en tu actividad.
