Clouds para mi Claus

Tengo la suerte y la fortuna de que mi esposa no es ingeniera de sistemas, ni tiene plena comprensión de mi lenguaje técnico, y todo ese argot, esa jerga que usamos en informática nerd, de hecho ella no tiene una idea exacta de los mis pensamientos digitales ni de mi mundo basado en bits bytes y qubits para almacenar información o del procesamiento de pixeles para representarlos en algún tipo de modelos 3D, y digo la suerte, porque disruptivamente mi vida hace diariamente un alto en el camino, cuando paso tiempo con ella, seguramente si fuese ingeniera mantendríamos surfeando en internet buscando resolver juntos cada cosa que me llama la atención, o cada problema que se nos presentara lo buscaríamos resolver de una manera muy ingeniosa.- por el contrario, como no es ingeniera, nuestras charlas y conversaciones nunca o casi nunca giran en torno a los scripts, las líneas de código o para hacer conexión con la idea de este post, con las nubes.

Sin embargo conversando en estos días durante un café, ella me manifestó que se sentía interesada en comprender de una manera sencilla sobre todos esos temas de cloud que nos apasionan a todos nosotros los informáticos, así que he decidido escribir este post para personas, no para ingenieros.

La nube es la nueva frontera para los devops y los sysadmins

Y es que seguramente si le preguntas a mis padres o a mis hijas, que es lo que hace Fabián, seguramente miraran hacia los lados, lo pensaran un poco haciendo esa mirada para el techo, y finalmente no lo saben a detalle tampoco… muy por encima dirán, ¡” Es ingeniero!”… como si eso mágicamente lo explicará todo. Tal vez solo explica mis prominentes y abultados cachetes… jajaja.

En esencia “la ingeniería de sistemas se propone por medio de procedimientos, rutinas y algoritmos, el resolver necesidades específicas que faciliten la vida de las personas.”, desde una óptica académica, o una comparativa profesional, los psicólogos tratan de entender el comportamiento humano, los filósofos se cuestionan si la historia y los métodos fueron éticos, apropiados, y dadas las circunstancias la mejor opción, bueno por algoritmos vamos a decir que son métodos o funciones, que deducimos pensando en optimizar, mejorar, o facilitar, pero ese primer ejercicio de pensar como hallar una solución es lo que realmente le da valor que no solo por medio de código podemos realizar, realmente lo que se busca es ofrecer recomendaciones que permitan flujos, aprobaciones, o crear software que ayude a las personas a facilitar sus tareas diarias. Insisto, no todo lo que vemos los ingenieros de sistemas son bits, bytes y qubits, a veces el hecho de como registrar contablemente, es un procedimiento más manual que sistémico. Muchas de las soluciones actuales son más incluyentes y permiten que personas con limitaciones o acceso reducido, puedan aprovechar el potencial de la informática.

Sin embargo, no voy a idealizar que los sistemas informáticos no hayan transformado nuestra capacidad de memorizar y de retener en nuestros propios pensamientos alguna información importante. Como muchas personas de mi generación, a veces lográbamos memorizar los números de identidad, de cuentas bancarias o los números de teléfono de nuestros propios familiares, ahora que existen libretas digitales y post-it virtuales,  ya nadie recuerda ni por ejercicio ninguna información. Simplemente le piden a Alexa, Siri, Bixbi o Google que les recuerde la hora de la novela…

Bueno, volveré al tema de este post, sin cuestionar los efectos colaterales de la informática moderna, y los asistentes digitales y mi mala memoria, la evolución oficinista, administrativa y de secretaria artificial, que ha ofrecido Microsoft Office, no tiene comparación, y recuerdo con cierta nostalgia cuando de pequeño acompañante iba a la oficina de mi mamá quien era asistente- secretaria de gerencia. Ella tenía que organizar carpetas en archivadores, con cientos de documentos que mecanografiaba en su flamante máquina de escribir. Ahora le hacemos dictados por voz y la información es almacenada e indexada para facilidad de búsqueda.

Hoy en día todos hablan de Cloud computing peeero… eso en términos claros, ¿eso que es? – bueno vamos a decir simplemente que en tiempos de antaño cuando Windows server 2003 existía, teníamos capacidades de virtualizar máquinas usando un aplicativo llamado virtual PC. Virtualizar una máquina consiste en crear un espacio de ejecución donde asignamos una cantidad de memoria y un número de procesadores para instalar un sistema operativo sobre un archivo que llamamos un disco duro virtual, sobre este se puede instalar según convenga un Linux o un Windows. Este hipervisor hacia la administración de recursos del sistema operativo del host para permitir que una máquina imaginaria (virtual), se ejecutará dentro de la máquina física.  Ciertamente esto propone en ese momento un paradigma nuevo y disruptivo que permite aprovechar más el uso de los recursos como procesadores o memoria, el uso de cableado, alimentación eléctrica y de refrigeración. Pero sobre todo dinamiza increíblemente el tiempo de despliegue e instalación de nuevos proyectos se reduce a horas… que digo horas, minutos tal vez.

Sin embargo, decimos que es una nube, porque es borroso, lograr identificar en que servidor (físico) se están ejecutando nuestras cargas de máquinas virtuales, y dado que pueden estar ejecutándose en muchas maquinas físicas, no precisamente en el mismo centro de datos, por eso decimos que estamos en una nube. Por referirme puntualmente al caso de Microsoft, al momento de escribir este post Azure cuenta con más de 60 centros de datos a nivel mundial, centros de datos que tienen el tamaño de 20 campos de futbol americano, es decir que son lotes enormes, con diferentes edificios, con alimentación eléctrica redundante, y diferentes salas llenas de miles y miles de racks donde están organizados miles o cientos de miles de servidores físicos.

Porque gracias a la virtualizacion, podemos simular redes internas o externas, podemos manejar distintos sistemas operativos y montar fácilmente todo un escenario de laboratorio con varias máquinas virtuales sobre un solo servidor físico. 😉

Microsoft pudo transformar esta aplicación de virtual PC a un concepto llamado hipervisor o Hyper-v donde se podía hacer una mejor administración de recursos gracias a una integración nativa a nivel de kernel.  Paralelamente otros fabricantes como VMware o Virtual Box también presentaron sus funciones de hipervisor, y en el mundillo Linux hubo buenos competidores también.  Sin embargo, aprendimos que para el host se precisan 2GB de RAM al menos, y por cada máquina virtual para su propio sistema operativo 2 GB más lo que precisa el rol que la máquina virtual ejecutará. El mundo de los centros de datos llenos de servidores ruidosos, calurosos y monotarea rápidamente fueron cambiando a modelos de virtualización de máquinas, las cuales podían migrar entre diferentes hosts y esto aumentaba significativamente los índices de disponibilidad para estos equipos. Claramente vivimos una gran optimización de uso de recursos, de redes y de espacios.

Para una empresa emergente o startup era difícil invertir unos $15.000 dólares para comprar sus propios servidores, entonces muchos empezaron a alquilar un espacio compartido, un co-hosting con otras empresas sobre los mismos servidores, así pagando entre varios el alquiler era como compartir los costos de la renta de un departamento entre varios. Sin embargo, la actividad de poder aplicar hotfix a los diferentes sistemas operativos, y mantener un monitoreo constante sobre el uso de recursos y de las alertas de disponibilidad, podía precisar de un sistema adicional como System Center Operations Manager o Nagios. Entonces aquellos centros de datos que permitían al cliente autogestión, escalabilidad y alta disponibilidad fue lo que denominamos una nube privada, o en inglés un private Cloud. Grandes corporaciones como AWS, Google o Azure de Microsoft, implementaron enormes centros de datos, como si fueran complejos hoteleros, donde puedes escoger la talla de la máquina virtual que quieres alquilar, de acuerdo con el tamaño de la suite así mismo tienes que pagar.

En la nube publica entonces puedes contratar diferentes tipos de servicio, desde un flamante Windows Server 2022, con 64 VCPU y 512 terabytes de RAM, a un modesto Linux de un VCPU y media giga de RAM. Nos podemos montar en una maquina muy sencilla y en la medida que nuestro negocio prospere, o el servicio se haga más popular y utilizado podemos o agrandar en capacidades la máquina o ampliar el número de equipos que realizan el mismo rol. Estas nubes públicas son flexibles en cuanto a contratos y pagos así que puedes usar tu tarjeta de crédito y pagar de acuerdo con tus consumos, o aprovisionar un saldo del cual ir descontando cada mes como un modelo prepagado

Ahora bien, si he sido claro hasta este punto, quiero que se imaginen la nueva realidad donde ya no ocupamos sistemas operativos independientes por cada instancia de máquina virtual, sino que ocupamos un “sandbox” que es un espacio de ejecución aislado, donde podemos ejecutar los Pods de Docker, estas instancias ocupan menos recursos pues funcionan con la misma mecánica que un rol instalado a un sistema operativo, ocupando las librerías DLL y los binarios para ejecutar su aplicación. La idea de usar estos microservicios está revolucionando todas las arquitecturas, porque es como si tuvieras varios módulos que se pudieran añadir a tu habitación del Hotel… quieres con Jacuzzi, ¡¡bam!! Ahí está, quieres otra habitación, ¡¡bam!! Desplegada… en cuestión de segundos, necesitas otro baño, igualmente… así mismo hay pods basados en Linux Alpine que pesan solamente 5MB, y que tras instalar un NGINX que equivale a un apache o un IIS, nos permite publicar un web site.

A veces nuestras conversaciones entre ingenieros pueden ser realmente complicadas si no tienes el contexto…

Ahora bien, la invitación a todos ustedes es que exploren un poco más esta nueva visión que está revolucionando la forma de ejecutar aplicaciones registrándose en https://hub.docker.com ejecuten docker, usen el https://labs.play-with-docker.com/, también y porque no, que aprendan de Linux, de administración de soluciones de almacenamiento, así como de bases de datos, de seguridad informática, firewalls y de cómo funcionan las redes de comunicaciones, DHCP, enrutamiento, y resolución de nombres por DNS, aunque sea un poco, pero estas cosas crecen tan rápido como un incendio, y como son de comunidades, es muy fácil quedarse atrás del lote. cuando empezamos los primeros a explorar las configuraciones de soluciones en nube teníamos que al menos como una referencia, conocer de todos estos aspectos.

En este caso los microservicios componen toda tu arquitectura, esto es gracioso pues si necesitas un pod de base de datos, y dos o tres que hagan web front end es posible sin más que especificar el archivo de manifiesto. Vamos a aumentar el número de pods, simplemente modificamos el manifiesto y este desplegara tantas máquinas como hagan falta. Los pods como ya no ejecutan un sistema operativo ahora ocupan muy poca memoria, y reiniciar un pod es cuestión de segundos. Si tenemos que administrar algunos pods es sencillo, pero cuando estamos monitoreando algunos cientos de ellos, es necesario valernos de utilidades como Kubernetes para poder gestionarlos sin mayor problema.

Es fácil quedarse cuando no vamos pedaleando al igual.

Muchas grandes compañías como Netflix se apalancan en sus plataformas gracias a los microservicios y esto permite que un microservicio maneje el inicio de sesión mientras que otro lleve estadísticas de tus preferencias y de la parrilla que te ofrece en consecuencia a tus últimas visualizaciones, estos algoritmos se ejecutan sobre algunos pods. En el caso de estos pods podemos tener batallones de pequeños pods haciendo cálculos ejecución de firmas, análisis de datos y transformación de datos… con el poder de los microservicios.

Los quiero ver a todos pedaleando en Powershell, explorando los comandos de Docker, desplegando kubernetes y utilizando los archivos de manifiesto JSON para sus despliegues automatizados en la nube. Hasta la proxima amigos.