Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas

domingo, 24 de marzo de 2024

Los Contenedores: Preguntas y Respuestas

 ¿Para qué nacieron las Computadoras? Para resolver problemas. Sí. Ya son legendarias las aventuras de Alan Turing, su equipo de trabajo y todos los esfuerzos por parte del gobierno británico para descifrar o más bien decriptar los mensajes generados con la máquina "Enigma" de los nacionales socialistas alemanes (nazis).

También las computadoras se han aplicado para analizar datos, ordenarlos (por eso en España se les dice "ordenadores") clasificarlos, realizar operaciones matemática e iterando algoritmos (que deriva del nombre del matemático árabe Abu Abdallah Muḥammad Ibn Mūsā Al-Jwarizmī).

Son precisamente esos algoritmos lo que hace que un grupo de personas, los Programadores, puedan "ecribir" Programas de Cómputo y que estos al ejecutarse en el Hardware, realmente le den sentido a las Computadoras.

Durante mucho tiempo, sin importar el lenguaje de cómputo, se seguían los lineamientos y cánones de la Programación en Cascada.

La Programación en Cascada

Más comúnmente conocida como el modelo de desarrollo de software en cascada, es una metodología secuencial que se ha utilizado tradicionalmente en la ingeniería de software. Este modelo se caracteriza por una serie de fases claramente definidas y ordenadas, donde cada fase debe completarse antes de pasar a la siguiente. Aquí te detallo sus características principales y cómo se desarrolla:

Secuencialidad: El proceso sigue una secuencia lineal desde el inicio del proyecto hasta su conclusión, sin retroceder a fases anteriores.

Estructura Fija: Las fases del proyecto son fijas y se completan una tras otra en orden específico: Requisitos, Diseño, Implementación, Verificación, y Mantenimiento.

Documentación Completa: Cada fase produce documentos que sirven como entrada para la siguiente fase. Esto significa que antes de escribir código, se realiza una extensa documentación de los requisitos y el diseño.

Revisiones y Aprobaciones: Al final de cada fase, el trabajo realizado se revisa y debe ser aprobado antes de pasar a la siguiente etapa.

Las Fases del Modelo en Cascada incluyen:

  • Análisis de Requisitos: Se identifican las necesidades del sistema y se documentan de manera detallada. Es la base para el diseño del sistema.
  • Diseño del Sistema y del Software: Basándose en los requisitos, se elabora una arquitectura de cómo el software funcionará internamente y en interacción con otros sistemas o con el usuario.
  • Implementación y Codificación: Los diseñadores comienzan a escribir el código del software según las especificaciones del diseño.
  • Pruebas: El software se prueba para identificar y corregir errores. Se verifica que cumpla con los requisitos especificados.
  • Despliegue: Una vez que el software ha sido probado y se considera listo, se instala o se libera para su uso.
  • Mantenimiento: Después del lanzamiento, el software entra en una fase de mantenimiento para corregir errores no identificados previamente o para realizar actualizaciones.

¿Cuáles son las Ventajas y Desventajas de este modelo de programación?:

Ventajas:
  • Predecible: Las etapas y resultados están claramente definidos, lo que facilita la planificación y el presupuesto.
  • Estructura: La metodología en cascada es fácil de entender y seguir, especialmente para proyectos simples y pequeños.
Desventajas:
  • Rigidez: La dificultad para volver a fases anteriores puede resultar en problemas si los requisitos cambian durante el desarrollo.
  • Retrasos en la Prueba: Las pruebas se realizan al final del ciclo de vida, lo que puede resultar en la detección tardía de errores fundamentales.
  • Dificultad con Requisitos Complejos o Cambiantes: No es ideal para proyectos donde los requisitos no están bien definidos desde el principio o son propensos a cambiar.
Aunque el modelo en cascada ha sido criticado por su rigidez y por no adaptarse bien a los proyectos donde los requisitos son inciertos o cambiantes, sigue siendo una metodología valiosa para ciertos tipos de proyectos con requisitos bien definidos y donde los cambios son mínimos o nulos.

Precisamente por su rigidez y como resultado de un cada vez más cambiante ambiente de operación para cualquier programa de cómputo, así como también la necesidad de incluir más dinámicos, flexibles y versátiles ambientes de ejecución, es por lo que se buscó un enfoque diferente y obviamente un modelo de programación que pudiese cumplir con todos estos nuevos requisitos. Es entonces que nace el Modelo de Programación basado en Microservicios.

La Programación Basado en Microservicios

El modelo de programación basado en microservicios representa un enfoque arquitectónico para el desarrollo de aplicaciones. En lugar de construir una aplicación monolítica grande (o inmensa en ocasiones), el enfoque de microservicios descompone o más bien parte la aplicación en componentes más pequeños y manejables, conocidos como microservicios. Estos microservicios son independientes entre sí, cada uno ejecutando un proceso único y gestionando una parte específica de la funcionalidad de la aplicación.

A continuación enumeramos cuáles son las características principales, cómo funcionan, y las ventajas y desventajas de este modelo basado en microservicios.

Características Principales:

Desacoplamiento: Cada microservicio es independiente y responsable de una función específica dentro de la aplicación. Esto permite que se desarrollen, desplieguen, y escalen de manera independiente.

Especialización: Los microservicios se centran en una sola tarea o proceso, siguiendo el principio de responsabilidad única. Esto facilita la comprensión, el desarrollo y el mantenimiento del código.

Comunicación a través de API: Los microservicios interactúan entre sí mediante interfaces de programación de aplicaciones (APIs), generalmente sobre protocolos HTTP/HTTPS con patrones de comunicación REST o GraphQL.

Tecnología Diversa: Cada microservicio puede ser desarrollado utilizando el lenguaje de programación, base de datos, o tecnología de almacenamiento más adecuado para su función específica.

Funcionamiento:
  • Una aplicación basada en microservicios se compone de varios servicios pequeños que se comunican a través de la red.
  • Cada servicio tiene su propia base de datos y lógica de negocio, lo que permite su desarrollo y escalabilidad de manera independiente.
  • Los servicios se despliegan típicamente en contenedores, lo que facilita su replicación y gestión a través de plataformas de orquestación como Kubernetes.
Ventajas:
  • Flexibilidad Tecnológica: Permite el uso de diferentes tecnologías y lenguajes de programación según las necesidades específicas del servicio.
  • Escalabilidad: Los servicios pueden escalarse independientemente, mejorando el uso de recursos y la capacidad de respuesta ante cargas variables.
  • Resiliencia: El fallo en un microservicio no necesariamente causa un fallo en toda la aplicación, lo que mejora la disponibilidad y confiabilidad del sistema.
  • Facilita la Integración Continua y la Entrega Continua (CI/CD): La independencia de los servicios facilita la actualización, el testing y el despliegue rápido y frecuente de nuevas características.
Desventajas:
  • Complejidad de Gestión: El manejo de múltiples servicios y su intercomunicación puede resultar en una complejidad operativa significativa.
  • Consistencia de Datos: Mantener la consistencia a través de los servicios puede ser desafiante, especialmente en transacciones que abarcan múltiples servicios.
  • Latencia: La comunicación entre servicios a través de la red puede introducir latencia.
  • Sobrecarga de Desarrollo: El diseño e implementación inicial pueden requerir más trabajo comparado con una aplicación monolítica debido a la planificación de la interacción entre servicios.
El enfoque de microservicios es particularmente adecuado para aplicaciones empresariales grandes y complejas, donde la capacidad de escalar y actualizar componentes de manera independiente puede ofrecer ventajas significativas en términos de agilidad y mantenibilidad.

Queremos aquí hacer una pausa, pues como veremos más delante en esta entrada, Microservicios es un Modelo de Programación, pero los Contenedores son una manera de llevar a la práctica este modelo de programación y no por ello presentar las mismas desventajas.

¿Qué son los Contenedores?

Los contenedores son una tecnología de virtualización a nivel de sistema operativo que permite empaquetar y distribuir aplicaciones y sus dependencias de manera ligera y portátil. Cada contenedor encapsula una aplicación, junto con todas sus bibliotecas y archivos necesarios para ejecutarse, en un entorno aislado y autocontenido.

Aquí hay algunas características clave de los contenedores:

Aislamiento: Cada contenedor ejecuta su propia instancia del sistema operativo, lo que proporciona un alto grado de aislamiento y seguridad. Los contenedores comparten los recursos del sistema subyacente, como el kernel del sistema operativo, pero tienen sus propios espacios de nombres para procesos, red, almacenamiento, etc.

Portabilidad: Los contenedores son portátiles y se pueden ejecutar en cualquier entorno que admita el motor de contenedores utilizado. Esto significa que una aplicación empaquetada en un contenedor funcionará de la misma manera, independientemente de si se ejecuta en un entorno de desarrollo, pruebas o producción.

Eficiencia: Los contenedores son ligeros y rápidos de crear y destruir. Comparados con las máquinas virtuales tradicionales, que incluyen un sistema operativo completo, los contenedores comparten el núcleo del sistema operativo subyacente, lo que reduce la sobrecarga y el consumo de recursos.

Escalabilidad: Los contenedores facilitan la implementación de aplicaciones en entornos de infraestructura escalables y distribuidos. Pueden escalarse horizontalmente de manera rápida y eficiente para satisfacer las demandas cambiantes de la carga de trabajo.

Orquestación: Para gestionar y coordinar un gran número de contenedores en entornos de producción, se utilizan herramientas de orquestación de contenedores como Kubernetes, Docker Swarm o Amazon ECS. Estas herramientas permiten automatizar tareas como el despliegue, la escalabilidad, la monitorización y la recuperación ante fallos de los contenedores.

Cierto es que a la fecha en la que esta entrada fue creada, los contenedores ya no son unos completos desconocidos y el crecimiento de adopción de éstos ha sido descomunal, pero sí vale la pena (sobre todo para quienes son novatos en este tema) revisar

¿Qué SÍ son y qué NO son los Contenedores?

Qué SÍ son los contenedores:
  • Sí son entornos aislados: Los contenedores encapsulan una aplicación y todas sus dependencias en un entorno aislado del resto del sistema, lo que garantiza que funcionen de manera consistente y sin conflictos con otras aplicaciones.
  • Sí ofrecen portabilidad: Los contenedores son portátiles y pueden ejecutarse en cualquier entorno que admita el motor de contenedores utilizado, lo que facilita el desarrollo, la prueba y la implementación de aplicaciones en diferentes entornos de forma consistente.
  • Sí son eficientes: Los contenedores son ligeros y rápidos de crear y destruir, lo que los hace ideales para implementaciones rápidas y escalables de aplicaciones.
  • Sí son escalables: Los contenedores pueden escalarse horizontalmente fácilmente para satisfacer las demandas cambiantes de la carga de trabajo, lo que los hace ideales para aplicaciones en la nube y en entornos distribuidos.
Qué NO son los contenedores:
  • No son máquinas virtuales: A diferencia de las máquinas virtuales, los contenedores no incluyen un sistema operativo completo. En su lugar, comparten el kernel del sistema operativo subyacente y solo encapsulan las bibliotecas y dependencias necesarias para ejecutar la aplicación.
  • No son un reemplazo de la virtualización tradicional: Aunque los contenedores ofrecen muchas ventajas en términos de eficiencia y portabilidad, no reemplazan por completo la virtualización tradicional. Ambas tecnologías pueden coexistir y ofrecer beneficios complementarios en entornos de desarrollo y producción.
  • No son una solución de seguridad completa: Aunque los contenedores ofrecen un cierto grado de aislamiento y seguridad, no son una solución de seguridad completa por sí solos. Se deben implementar medidas adicionales, como políticas de acceso y control de seguridad, para proteger los contenedores y las aplicaciones que contienen.
MUY IMPORTANTE
Los contenedores son una herramienta poderosa para empaquetar y distribuir aplicaciones de manera eficiente y portátil, pero es importante comprender sus características y limitaciones para aprovechar al máximo su potencial.

¿Qué empresas son actualmente los más importantes e influyentes exponentes de los Contenedores?

Hay varias empresas que han sido influyentes en el desarrollo y la adopción de contenedores. Algunas de las más destacadas incluyen:

Docker, Inc.: Docker es la empresa que popularizó la tecnología de contenedores al crear la plataforma Docker. Su enfoque en la facilidad de uso y la portabilidad ayudó a impulsar la adopción masiva de contenedores en la industria de la tecnología.

Google: Google ha desempeñado un papel fundamental en el desarrollo de la tecnología de contenedores. Contribuyeron al desarrollo de Kubernetes, un sistema de orquestación de contenedores de código abierto, que se ha convertido en el estándar de facto para administrar contenedores a escala.

Red Hat: Red Hat ha sido un líder en la adopción de contenedores en el mundo empresarial. Contribuyeron al desarrollo de herramientas como Kubernetes y OpenShift, una plataforma de contenedores empresariales basada en Kubernetes.

Amazon Web Services (AWS): AWS ofrece una amplia gama de servicios de contenedores, incluyendo Amazon ECS (Elastic Container Service) y Amazon EKS (Elastic Kubernetes Service). Su infraestructura de nube escalable ha facilitado la adopción de contenedores en empresas de todos los tamaños.

Microsoft: Microsoft ha integrado el soporte para contenedores en su plataforma en la nube Azure, así como en su sistema operativo Windows Server. Han contribuido al desarrollo de herramientas como Docker Desktop for Windows y Azure Kubernetes Service (AKS).

VMware: VMware ha expandido su oferta para incluir soluciones de contenedores a través de productos como VMware Tanzu y vSphere Integrated Containers. Su experiencia en virtualización ha ayudado a las empresas a integrar contenedores en sus infraestructuras existentes.

CoreOS (ahora parte de Red Hat): CoreOS fue una empresa pionera en el desarrollo de sistemas operativos optimizados para contenedores. Su sistema operativo CoreOS Container Linux y su plataforma de orquestación de contenedores Tectonic contribuyeron al avance de la tecnología de contenedores en la industria.

Estas son solo algunas de las empresas que han desempeñado un papel importante en el desarrollo y la adopción de contenedores. Hay muchas otras organizaciones y líderes en la comunidad de código abierto que también han contribuido al éxito de esta tecnología.

¿Qué liboros y/o guías básicas hay ya disponibles para el entendimiento y aprendizaje de los Contenedores?

Aquí compartimos una lista de libros y guías básicas que pueden ser útiles para entender y aprender sobre contenedores:

"Docker Deep Dive" por Nigel Poulton: Este libro proporciona una introducción completa a Docker, desde los conceptos básicos hasta las características avanzadas. Es ideal tanto para principiantes como para usuarios experimentados.

"Kubernetes Up & Running" por Kelsey Hightower, Brendan Burns y Joe Beda: Este libro es una guía completa para comenzar con Kubernetes, la plataforma de orquestación de contenedores más popular. Cubre todo, desde los fundamentos hasta la implementación y la administración en producción.

"Docker in Action" por Jeff Nickoloff: Este libro cubre los conceptos básicos de Docker y cómo se puede utilizar para empaquetar, distribuir y ejecutar aplicaciones de manera eficiente. Proporciona ejemplos prácticos y consejos para trabajar con Docker en entornos reales.

"Containerization with Docker" por Russ McKendrick: Este libro es una guía práctica para comenzar con Docker, cubriendo temas como la instalación, la creación de imágenes de contenedores y la administración de contenedores en producción.

"The Kubernetes Book" por Nigel Poulton: Este libro es una guía detallada para comprender y trabajar con Kubernetes. Cubre desde los conceptos básicos hasta las prácticas recomendadas para implementar y administrar aplicaciones en Kubernetes.

"Learn Docker - Fundamentals of Docker 19.x" por Gabriel N. Schenker: Este libro es una introducción práctica a Docker, diseñada para aquellos que están comenzando con la tecnología de contenedores. Cubre los fundamentos y proporciona ejemplos paso a paso para comenzar a trabajar con Docker.

Documentación oficial de Docker y Kubernetes: Ambas comunidades ofrecen una amplia documentación en línea que cubre todos los aspectos de sus respectivas tecnologías. Estas guías son una excelente fuente de información para aprender sobre contenedores.

¿Qué debe de incluír un programa de estudios para una capacitación y formación completa en los Contenedores?

¿Desea ir más allá de lo que ofrecen los libros y la documentación? Entonces al parecer es necesario tomar un curso. ¿Qué debe de incluír un programa de estudios para una capacitación y formación completa en los Contenedores?

Un programa de estudios completo para la capacitación y formación en contenedores debe incluir una variedad de temas que cubran desde los fundamentos básicos hasta los aspectos más avanzados de la tecnología. Aquí hay una propuesta de los temas que podrían incluirse en dicho programa:

Introducción a los contenedores:
  • Definición de contenedores y su importancia en el desarrollo de software moderno.
  • Diferencias entre contenedores y máquinas virtuales.
  • Historia y evolución de la tecnología de contenedores.
Conceptos básicos de Docker:
  • Instalación y configuración de Docker en diferentes sistemas operativos.
  • Creación y gestión de contenedores Docker.
  • Uso de imágenes de Docker y registro de Docker Hub.
  • Redes y almacenamiento en Docker.
Orquestación de contenedores con Kubernetes:
  • Introducción a Kubernetes y su arquitectura.
  • Instalación y configuración de un clúster de Kubernetes.
  • Despliegue y escalado de aplicaciones en Kubernetes.
  • Gestión de recursos y monitoreo en Kubernetes.
Desarrollo de aplicaciones basadas en contenedores:
  • Desarrollo de aplicaciones utilizando Docker y Docker Compose.
  • Uso de Docker en entornos de desarrollo local y en la nube.
  • Integración de contenedores en pipelines de integración continua/despliegue continuo (CI/CD).
Seguridad y buenas prácticas en contenedores:
  • Principios de seguridad en contenedores.
  • Mejores prácticas para la creación de imágenes seguras.
  • Configuración de políticas de acceso y control de seguridad en Kubernetes.
Optimización y rendimiento de contenedores:
  • Estrategias para optimizar el tamaño y el rendimiento de las imágenes de Docker.
  • Configuración de recursos y límites en contenedores.
  • Estrategias de almacenamiento y gestión de datos en contenedores.
Casos de uso y estudios de casos:
  • Aplicaciones de contenedores en diferentes industrias y sectores.
  • Estudios de casos de empresas que han adoptado contenedores con éxito.
  • Prácticas recomendadas y lecciones aprendidas de implementaciones reales.
Este es solo un ejemplo de los temas que podrían incluirse en un programa de estudios completo sobre contenedores. Es importante adaptar el contenido según las necesidades y el nivel de conocimiento de los estudiantes, así como incorporar ejercicios prácticos y proyectos para reforzar los conceptos aprendidos.

¿Qué alternativas existen en línea, para el aprendizaje, formación y capacitación en Contenedores?

Plataformas de cursos en línea:
  • Udemy: Ofrece una amplia variedad de cursos sobre Docker, Kubernetes y contenedores en general, impartidos por instructores expertos.
  • Coursera: Tiene cursos y especializaciones en contenedores ofrecidos por universidades y empresas líderes en tecnología.
  • LinkedIn Learning: Ofrece una amplia gama de cursos y tutoriales sobre Docker, Kubernetes y desarrollo de contenedores.
  • Pluralsight: Tiene cursos especializados en contenedores y orquestación de contenedores, diseñados para profesionales de la tecnología.
  • edX: Ofrece cursos en línea gratuitos y de pago sobre contenedores, impartidos por universidades y organizaciones académicas.
Recursos gratuitos y de código abierto:
  • Documentación oficial de Docker y Kubernetes: Ambas comunidades ofrecen una amplia documentación en línea que cubre todos los aspectos de sus respectivas tecnologías.
  • Tutoriales y guías en blogs y sitios web: Hay muchos blogs y sitios web que ofrecen tutoriales y guías gratuitas sobre Docker, Kubernetes y contenedores en general.
  • GitHub: Hay numerosos repositorios en GitHub con ejemplos de código, proyectos y recursos de aprendizaje relacionados con contenedores.
Cursos especializados y certificaciones:
  • Certificaciones oficiales de Docker y Kubernetes: Tanto Docker como Kubernetes ofrecen programas de certificación oficial que pueden ayudar a validar tus habilidades en contenedores.
  • Cursos especializados en plataformas de capacitación en línea: Algunas plataformas ofrecen cursos específicos para la preparación de certificaciones en Docker y Kubernetes.
Comunidades y grupos de usuarios:
  • Participar en comunidades en línea, como foros, grupos de usuarios y canales de Slack relacionados con Docker y Kubernetes, puede ser una forma útil de aprender y compartir conocimientos con otros profesionales de contenedores.
¿Qué ambientes de ejecución (en máquinas físicas o virtuales) existen y cuáles son las mas recomendables para comenzar a aprender a programar y ejecutar contenedores?

Para comenzar a aprender a programar y ejecutar contenedores, es útil familiarizarse con los ambientes de ejecución que permiten manejar estas tecnologías eficientemente. La buena noticia es que podemos iniciar con herramientas relativamente sencillas que no requieren de infraestructuras complejas ni de grandes recursos de hardware. Aquí algunos de los entornos más populares y accesibles:

1. Docker
Docker es la plataforma de contenedores más popular y un excelente punto de partida para aprender sobre contenedores. Permite crear, desplegar y manejar contenedores de manera sencilla y eficiente. Docker puede ejecutarse tanto en máquinas físicas como virtuales y es compatible con múltiples sistemas operativos, incluyendo Linux, macOS y Windows. Para quienes inician, Docker ofrece una curva de aprendizaje amigable y una gran cantidad de documentación y recursos de aprendizaje.

2. Kubernetes
Aunque Kubernetes es más un sistema de orquestación de contenedores que un ambiente de ejecución per se, aprender a usarlo después de Docker es un paso natural. Kubernetes te permite manejar aplicaciones contenerizadas a gran escala. Es más complejo que Docker en términos de curva de aprendizaje, pero también es muy poderoso y ampliamente utilizado en la industria. Minikube es una herramienta que te permite ejecutar Kubernetes localmente en tu máquina (física o virtual), simplificando el proceso de aprendizaje y experimentación con Kubernetes.

3. Play with Docker (PWD)
Play with Docker es una herramienta en línea que proporciona un entorno Docker gratuito, accesible directamente desde tu navegador. Es una opción excelente para experimentar con Docker sin necesidad de instalar nada en tu máquina. Aunque no sustituye la experiencia de trabajar con Docker localmente, es una forma rápida de empezar a aprender y experimentar con contenedores.

4. Katacoda
Katacoda es una plataforma de aprendizaje interactivo que ofrece escenarios gratuitos y tutoriales en vivo para tecnologías como Docker y Kubernetes. Katacoda ejecuta contenedores y ambientes de orquestación directamente en tu navegador, lo que permite aprender y experimentar sin configuraciones complejas.

Recomendaciones para Principiantes
Para los principiantes, empezar con Docker en una máquina local es altamente recomendable. Esto se debe a que Docker simplifica muchos de los conceptos fundamentales de los contenedores y tiene una comunidad de soporte extensa. Una vez que te sientas cómodo con Docker, avanzar hacia Kubernetes utilizando Minikube o incluso Katacoda para experimentar sin necesidad de un entorno de hardware dedicado puede ser el siguiente paso lógico.

¿Qué Sistemas Operativos son más recomendables para ejecutar Contenedores?

Los contenedores son una tecnología que se ejecuta en sistemas operativos basados en Linux, por lo que cualquier distribución Linux es adecuada para ejecutar contenedores. Sin embargo, algunos sistemas operativos han sido diseñados específicamente con contenedores en mente y ofrecen características adicionales para administrar y desplegar contenedores de manera más eficiente. Aquí hay algunas opciones recomendadas:

Ubuntu: Es una de las distribuciones Linux más populares y ampliamente utilizadas para ejecutar contenedores. Es fácil de instalar, tiene una amplia base de usuarios y cuenta con una gran cantidad de documentación y soporte disponible.

Fedora CoreOS: Es una distribución de Linux optimizada para ejecutar contenedores en entornos de producción. Está diseñada para ser segura, estable y fácil de administrar, con actualizaciones automáticas y soporte nativo para Kubernetes.

Red Hat Enterprise Linux (RHEL): Es una distribución de Linux empresarial con soporte comercial proporcionado por Red Hat. Ofrece características avanzadas de seguridad y administración, así como soporte a largo plazo para entornos críticos.

CentOS: Es una distribución de Linux de código abierto basada en el código fuente de RHEL. Es una opción popular para entornos de servidor debido a su estabilidad y compatibilidad con aplicaciones empresariales.

Debian: Es una distribución de Linux conocida por su estabilidad y seguridad. Es una opción sólida para ejecutar contenedores, especialmente si prefieres un enfoque más conservador y de código abierto.

Arch Linux: Es una distribución de Linux para usuarios avanzados que prefieren construir su sistema desde cero. Si estás dispuesto a configurar tu sistema manualmente, Arch Linux puede ser una opción interesante para ejecutar contenedores.

¿Qué Lenguaje de Programación puedo utilizar para programar contenedores?

La belleza de los contenedores es que permiten empaquetar y ejecutar aplicaciones de manera consistente a través de diferentes entornos, independientemente del lenguaje de programación en que estas estén escritas. Esto significa que podemos utilizar prácticamente cualquier lenguaje de programación para desarrollar tu aplicación antes de contenerizarla. La elección del lenguaje dependerá de preferencias personales, requisitos del proyecto y el ecosistema del lenguaje. Algunos de los lenguajes de programación más comunes utilizados para desarrollar aplicaciones en contenedores incluyen:

Python: Gracias a su simplicidad y legibilidad, junto con una vasta biblioteca de módulos de terceros, Python es un favorito para el desarrollo de aplicaciones web, automatización, análisis de datos, aprendizaje automático, y más.

JavaScript (Node.js): Permite ejecutar JavaScript en el lado del servidor, lo que lo hace ideal para construir aplicaciones web escalables y en tiempo real. La popularidad de JavaScript y el ecosistema NPM ofrecen una gran flexibilidad para el desarrollo de aplicaciones modernas.

Go (Golang): Conocido por su simplicidad, eficiencia y soporte nativo para la concurrencia. Es ampliamente utilizado en el ecosistema de contenedores y microservicios, especialmente porque herramientas como Docker y Kubernetes están escritas en Go.

Java: Sigue siendo popular en entornos empresariales debido a su robustez, escalabilidad y vasto ecosistema. Las aplicaciones Java pueden ser fácilmente contenerizadas y desplegadas en cualquier entorno.

Ruby: En particular el framework Ruby on Rails, es una excelente opción para el desarrollo rápido de aplicaciones web. Aunque ha disminuido en popularidad frente a otros lenguajes más nuevos, sigue siendo una opción sólida para muchos proyectos.

.NET (C#): Con la evolución de .NET Core, las aplicaciones .NET pueden ejecutarse en Linux y contenerizarse fácilmente. Esto hace que C# sea una opción atractiva para el desarrollo de aplicaciones web, servicios, y aplicaciones de escritorio.

Rust: Está ganando popularidad debido a su enfoque en la seguridad y el rendimiento. Es una buena opción para sistemas y aplicaciones donde la eficiencia y la seguridad son críticas.

¿Cuáles son los pasos a seguir para armar un laboratorio casero para aprender a programar y probar contenedores?

1. Definamos Objetivos
Antes de comenzar, es importante saber qué se quiere lograr. Esto puede incluir aprender un lenguaje de programación específico, entender cómo funcionan los contenedores o desarrollar una aplicación concreta.

2. Eligir y Preparar el Hardware
Casi cualquier computadora moderna puede ser adecuada para trabajar con contenedores. Sin embargo, asegurémonos de tener suficiente memoria RAM (8 GB es un buen punto de partida, aunque 16 GB es ideal) y espacio en disco para las imágenes de los contenedores y los contenedores mismos.

3. Instalar un Sistema Operativo Compatible
Los sistemas operativos basados en Linux son ampliamente considerados como los más adecuados para el trabajo con contenedores, aunque Windows y macOS también soportan herramientas de contenedorización como Docker. Si está instalado Linux como Sistema Operativo por defecto, podemos instalarlo en una máquina virtual o usar una dual boot setup.

4. Instalar Docker o una Plataforma de Contenedores Similar
Docker es la plataforma de contenedorización más popular. Su instalación es sencilla y está bien documentada en su sitio web oficial. Otras opciones incluyen Podman, que es un daemon-less y se presenta como una alternativa a Docker.
  • Para Linux: Encontraremos instrucciones específicas para la distribución en la documentación oficial de Docker.
  • Para Windows y macOS: Docker Desktop es la opción recomendada. Hay que asegurarse de cumplir con los requisitos del sistema.
5. Aprender los Fundamentos de Docker y la Contenedorización
Antes de empezar a programar, es crucial entender los conceptos básicos de Docker y cómo funcionan los contenedores. Esto incluye imágenes de contenedores, contenedores, Dockerfiles, volúmenes, redes y el registro de Docker. Hay muchos cursos y tutoriales gratuitos disponibles en línea.

6. Eligir un Editor de Código o IDE
Es mejor utilizar un editor de código o un entorno de desarrollo integrado (IDE) que sea cómodo. Visual Studio Code, por ejemplo, es una opción popular y gratuita que soporta una amplia gama de lenguajes de programación y tiene extensiones para trabajar con Docker.

7. Comenzar con Proyectos Simples
Practicar creando imágenes de contenedores para aplicaciones sencillas en el lenguaje de programación de nuestra elección. Un proyecto típico de iniciación puede ser contenerizar una aplicación web básica o una API.

8. Experimentar con Orquestación de Contenedores
Una vez que estemos cómodo trabajando con contenedores individuales, consideremos aprender sobre orquestación de contenedores usando herramientas como Docker Compose en un inicio, seguido de Kubernetes para escenarios más complejos.

9. Participa en la Comunidad
Unirse a comunidades en línea, como foros de Docker, GitHub, o Stack Overflow, puede proporcionar soporte, nuevos conocimientos y oportunidades para resolver problemas reales de otros usuarios.

10. Mantén la Curiosidad y Continúa Aprendiendo
El campo de la contenedorización y la infraestructura como código está en constante evolución. Hay que mantenerse actualizado con las últimas tendencias, herramientas y mejores prácticas.

Si buscamos soluciones más enfocadas en ambientes de producción o en simulación de ambientes de producción, herramientas como Minikube (para Kubernetes) o Rancher Desktop pueden ser alternativas interesantes. Estas herramientas permiten gestionar clústeres de Kubernetes en una máquina local y están más orientadas hacia pruebas de orquestación y manejo a escala de contenedores.

Hablando concretamente de Minikube, es una herramienta que facilita la ejecución de Kubernetes localmente en la computadora de escritorio o la laptop. Está diseñada para desarrolladores o entusiastas de Kubernetes que desean experimentar o desarrollar con Kubernetes sin necesidad de desplegar un clúster de Kubernetes completo en la nube o en un entorno de servidor dedicado.

Características Principales de Minikube:
  • Sencillez: Minikube inicia un clúster de Kubernetes de un solo nodo dentro de una máquina virtual (VM) en la máquina de escritorio o la laptop, lo que hace que sea fácil de instalar y ejecutar.
  • Compatibilidad: Funciona en sistemas operativos Linux, Windows y macOS.
  • Flexibilidad: Soporta diversas herramientas de virtualización, incluyendo VirtualBox, KVM, HyperKit, y más. También puede ejecutarse directamente en contenedores Docker si preferimos evitar usar una VM.
  • Desarrollo Local: Proporciona un entorno ideal para aprender Kubernetes y experimentar con contenedores sin incurrir en costos de infraestructura de nube.
  • Herramientas de Desarrollo: Minikube incluye características útiles para el desarrollo, como un Dashboard de Kubernetes, soporte para carga de configuración y volúmenes persistentes, y la capacidad de emular redes y condiciones de entorno específicas.
Cómo Funciona Minikube:
Al ejecutar Minikube, este crea y configura una máquina virtual que corre una distribución ligera de Linux. Dentro de esta VM, se inicia un clúster de Kubernetes de un solo nodo, permitiéndote desplegar y gestionar contenedores usando Kubernetes en tu máquina local.

Usos de Minikube:
  • Aprendizaje de Kubernetes: Por ser un clúster de Kubernetes real, aunque sea de un solo nodo, Minikube es una excelente herramienta para aprender cómo funciona Kubernetes y cómo se despliegan y gestionan las aplicaciones en él.
  • Desarrollo de Aplicaciones: Los desarrolladores pueden usar Minikube para desarrollar y probar aplicaciones en un entorno de Kubernetes local antes de desplegarlas en un entorno de producción o en la nube.
  • Pruebas de Integración y Funcionalidad: Permite a los equipos de desarrollo probar nuevas características, configuraciones, y más, en un entorno controlado y fácilmente reproducible.
Inicio con Minikube:
Para empezar con Minikube, necesitamos instalarlo en nuestra máquina. La documentación oficial de Minikube proporciona instrucciones detalladas de instalación y uso para diferentes sistemas operativos. Una vez instalado, podemos iniciar tu clúster de Kubernetes con el comando minikube start y comenzar a experimentar con Kubernetes de manera local.

Conclusión

Aún queda mucho material que podríamos compartir en esta entrada, pero recomendamos más bien comenzar con todo lo que hemos incluido aquí y que sea su experiencia en particular la que dicte cuáles serían los siguientes pasos.

¿Está Usted listo para comenzar con los contenedores?

jueves, 30 de junio de 2022

Cómo van las Top500 después del primer semestre de 2022

"Citius, Altius, Fortius" es una locución latina que significa Más rápido, más alto, más fuerte. Es el lema de los Juegos Olímpicos de la era moderna desde sus inicios en 1896 hasta la actualidad, con los cinco anillos de diferentes colores entrelazados y con la antorcha, simbolizando el espíritu olímpico. La frase fue pronunciada por Pierre de Coubertin en la inauguración de los primeros Juegos de la Edad Moderna, de Atenas en 1896.

Desde que los seres humanos comenzamos a utilizar más nuestro cerebro, además de otras habilidades, nos gusta saber qué o quién es el número uno en algo. Lo que sea. Que mejor ejemplo de las competencias en los ya mencionados Juegos Olímpicos, las competencias de bólidos en los circuitos de la Fórmula 1 y un interminable etcétera.

Las tecnologías de la información no son la excepción y e por lo que desde el año 1993 nace el proyecto Top500 con el claro objetivo de mejorar y renovar las estadísticas de la supercomputadora de Mannheim en Alemania, que había estado en uso durante siete años.

El enfoque que aporta TOP500 no define "supercomputadora" como tal, pero usan un punto de referencia para clasificar los sistemas y decidir si califican o no para la lista TOP500. El punto de referencia que decidimos fue Linpack, lo que significa que los sistemas se clasifican solo por su capacidad para resolver un conjunto de ecuaciones lineales, A x = b, utilizando una matriz aleatoria densa A. Por lo tanto, cualquier supercomputadora, sin importar cuál sea su arquitectura, puede entrar en la lista TOP500, siempre que sea capaz de resolver un conjunto de ecuaciones lineales utilizando la aritmética de punto o coma flotante. 

Top500 ha sido criticado por esta elección desde el principio, pero ahora, después de 20 años, podemos decir que fue exactamente esta elección la que hizo que TOP500 tuviera tanto éxito; por lo tanto, Linpack fue una buena elección, amén que no había, y aún no hay, alternativa a Linpack. Cualquier otro punto de referencia habría sido igualmente específico, pero no habría estado disponible tan fácilmente para todos los sistemas, un factor muy importante, ya que compilar las listas TOP500 dos veces al año es un proceso muy complejo.

El éxito de las listas TOP500 radica en recopilar y analizar datos a lo largo del tiempo. A pesar de depender únicamente en Linpack, hemos podido identificar y rastrear correctamente TODOS los desarrollos y tendencias durante los últimos 20 años, cubriendo fabricantes y usuarios de sistemas de Cómputo de Alto Desempeño (High Performance Computing o HPC), arquitecturas, interconexiones, procesadores, sistemas operativos, etc. Y, sobre todo, la fortaleza de TOP500 es que ha demostrado ser una herramienta excepcionalmente fiable para pronosticar la evolución del rendimiento.

La 59.ª edición del TOP500 reveló que el sistema Frontier es la máquina a exaescala real Número 1, con una puntuación HPL de 1.102 exaflop/s (1,102,000,000,000,000,000 o un trillon ciento dos mil millones de operaciones de punto flotante por segundo).

El puesto Número 1 ahora lo ocupa el sistema Frontier en el Laboratorio Nacional de Oak Ridge (ORNL) en los Estados Unidos. Está basado en la última arquitectura HPE Cray EX235a y equipado con procesadores AMD EPYC 64C de 2 GHz, el sistema tiene un total de 8'730,112 núcleos, una calificación de eficiencia energética de 52.23 gigaflops/Watt y depende de Gigabit Ethernet para la transferencia de datos.

Sin embargo, un desarrollo reciente del sistema Frontier ha permitido que la máquina supere la barrera de 1 exaflop. Con una puntuación HPL exacta de 1.102 Exaflop/s, Frontier no solo es la supercomputadora más poderosa que jamás haya existido, sino que también es la primera máquina a exaescala real.

La primera posición la ocupó previamente durante dos años consecutivos el sistema Fugaku en el Centro RIKEN para Ciencias Computacionales (R-CCS) en Kobe, Japón. Siguiendo con su puntaje de referencia HPL anterior de 442 PFlop/s, Fugaku ahora ha caído al Número 2. Teniendo en cuenta el hecho de que el pico teórico de Fugaku está por encima de la barrera de 1 exaflop, hay motivos para llamar a este sistema también una máquina de exaescala. Sin embargo, Frontier es el único sistema capaz de demostrar esto en la prueba comparativa de HPL.

Otro cambio dentro del TOP10 es la introducción del sistema LUMI en EUROHPC/CSC en Finlandia. Ahora ocupando el tercer puesto, este nuevo sistema tiene 1,110,144 núcleos y tiene un punto de referencia HPL de casi 152 PFlop/s. LUMI también destaca por ser el sistema más grande de Europa

Finalmente, otro cambio dentro del TOP10 ocurrió en el puesto No. 10 con la nueva incorporación del sistema Adastra en GENCI-CINES en Francia. Logró una puntuación de referencia de HPL de 46,1 Pflop/s y es la segunda máquina más potente de Europa, detrás de LUMI.



Gráficas Comparativas



En conclusión, ya se ha sobrepasado la barrera de los trillones de operaciones de punto flotante por segundo. Esto augura que, si continúa el crecimiento del poder de cómputo siguiendo la Ley de Moore, romperemos más y más límites y expectativas con el Cómputo de Alto Rendimiento, utilizando procesadores binarios.

miércoles, 30 de diciembre de 2020

Computadoras en Una Sola Tarjeta (SBC) ¿Son una buena opción?

Si es Usted una persona que se dedica directa o indirectamente a las Tecnologías de la Información y ha estado completamente aislado o aislada por completo, entonces no se ha dado cuenta de los inmensos avances que las Computadoras en Una Sola Tarjeta (Single Board Computers - SBC).

Todo comenzó con la Raspbery Pi. Wikipedia la define como: "Una serie de Computadoras de Placa Reducida, Computadoras de Placa Única o Computadoras en Una Sola Tarjeta de bajo coste desarrollado en el Reino Unido por la Raspberry Pi Foundation, con el objetivo de poner en manos de las personas de todo el mundo el poder de la informática y la creación digital".

A partir de ahí otras fundaciones y empresas han querido igualar o superar a este fenómeno informático (algunas con resultados muy prometedores), que al igual que las Tarjetas Microcontroladoras italianas Arduino, pusieron delante de todos nosotros el concepto Open Source Hardware.

En sus inicios, la idea era que quien utilizara esta opción de equipo de cómputo, fuesen más allá que simplemente instalarle un Sistema Operativo, ejecutar OpenOffice, acceder a Internet y/o realizar lo que se considera hoy las funciones más básicas de una computadora de escritorio. La idea era que esta maravilla fuese la piedra angular de una solución de Domótica, una solución de Internet de las Cosas, fuese el cimiento de toda una estrategia de aprendizaje para el desarrollo, la automatización, etc. a nivel universitario. Hoy ya se le ve como una opción más que seria para sustituir a las pesadas y en ocasiones muy costosas y sobradas computadoras de escritorio.

El objetivo de esta entrada la Blog Tecnológico es mostrar cuál es el estado actual de esta muy seria opción para oficinistas, estudiantes, "hobistas", amas de casa, etc. Comencemos entonces con una descripción general de las propiedades físicas e informáticas de este artilugio.

La Raspberry Pi 4B al desnudo

Esta es la versión más reciente del equipo y sus características son:

  • Procesador Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit "SoC" @ 1.5GHz
  • 8GB LPDDR4-3200 de memoria SDRAM
  • Conexión a red inalámbrica 2.4 GHz y 5.0 GHz IEEE 802.11ac
  • Bluetooth 5.0, BLE
  • Puerto RJ45 Gigabit Ethernet alámbrico
  • 2 puertos USB 3.0 y otros 2 puertos USB 2.0.
  • Conector de 40 pines GPIO completamente compatible con todas las versiones de tarjeta.
  • 2 puertos de video micro-HDMI con soporte a resolución 4K p60
  • Puerto para monitor touch integrado 2-lane MIPI DSI
  • Puerto para cámara 2-lane MIPI CSI
  • Puerto a 4-polos audio stereofónico y video compuesto
  • Decodificador H.265 (4kp60) y H264 (1080p60)
  • Codificador 1080p30
  • Soporte para gráficos OpenGL ES 3.0
  • Puerto para tarjeta Micro-SD para carga de sistema operativo y almacenamiento no volátil
  • Conector para alimentación 5V DC USB-C (mínimo 3A)
  • Alimentación 5V DC vía GPIO (mínimo 3A)
  • Habilitado para Power over Ethernet (PoE) 
  • Puede operar en ambientes con temperaturas desde los 0°C y hasta 50°C

En la siguiente figura, se muestra la vista superior de la tarjeta:

El precio unitario promedio aquí en México, a través de el portal de Comercio Electrónico más famosa en América Latina es de $2,750.00 MXN con entrega a domicilio sin costo (dependiendo del proveedor y el comprador). Este precio no incluye nada más que la tarjeta, siendo necesario comprar (por separado) la fuente de alimentación, el teclado, el monitor, el dispositivo puntero (mouse) y la "carcasa". De manera muy recomendable y opcional, están los disipadores y el ventilador. Todo el "kit" sin incluir monitor, teclado y mouse, puede costar $3,200.00 a través del mismo portal de Comercio Electrónico.

El Sistema Operativo de la Raspberry Pi

Estos dispositivos pueden ejecutar sin problema Sistemas Operativos Linux (Ubuntu, Mint, Raspbian principalmente), aunque también la empresa de Redmond, Washington ya liberó una versión del Sistema Operativo Windows 10 para procesadores de Arquitectura ARM.

También es posible ejecutar versiones del Sistema Operativo Android y Google Chrome OS.

VMware ya liberó también (para respaldar dispositivos orientados a su proyecto Monterey) una versión de su afamado hipervisor ESXi, mientras que por su parte la empresa Oracle publico oficialmente haber creado y puesto a trabajar exitosamente un Cluster para Cómputo de Alto Desempeño (High Performance Computing - HPC) conformado por 1,060 dispositivos Raspberry Pi.

Raspberry Pi 400. El todo en uno listo para usarse

Para los que no desean lidiar con la preparación desde cero de todo lo necesario para trabajar, existe una opción lista para usar, que el fabricante pone disponible con el nombre "Raspberry Pi 400".

Esta opción viene con 4 GB de memoria RAM y lo único que se requiere añadir es el monitor. El formato del producto ha sido comparado con opciones de computadoras caseras como la legendaria Commodore 64, ya que el teclado y el equipo de cómputo están integrados.

Lo importante a destacar es el hecho de que no se pierden características que han hecho tan popular a la Raspberry Pi, como lo es el acceso completo a los puertos de entrada y salida que permiten la interacción con sensores y actuadores. 

Raspberry Pi 4B como equipo para Aulas

¿Qué es lo que se busca cuando vamos a impartir un curso teórico práctico? Que cada estudiante tenga acceso al portal de laboratorios, de manera eficiente, rápida, segura, confiable y sin tener que invertir mucho en el equipo de cómputo.

En este rubro Raspberry Pi 4B tiene mucha ventaja contra otras opciones en las que se incluyen Laptops, Desktops y equipamientos semejantes.

Aquí estamos dando por hecho de que estamos utilizando Infraestructura de Escritorios Virtuales (Virtual Desktop Infrastructure - VDI) para cada alumno. Este esquema ya se ha venido llevando a cabo con éxito en los últimos tres o cuatro años. Con éste tenemos todo lo necesario para cada estudiante ejecutándose en servidores y computadoras virtuales, siendo necesario en un 90% de los casos de tan solo un navegador que soporte HTML V5 (Chrome, Firefox, Chromium).

Raspberry Pi 4B como equipo para Usuarios Básicos y Desarrolladores

¿Qué es un Usuario Básico? Todo aquel usuario que sólo requiere encender el equipo, esperar lo más poco posible para poder utilizarlo y tenerlo todo listo para realizar actividades como abrir el navegador para acceder a aplicaciones, abrir, crear, modificar documentos con un Procesador de Texto, Hoja de Cálculo y/o una herramienta para Presentaciones. Tal vez como una aplicación más, aquella que permita fuera del navegador, descargar, leer, contestar correos electrónicos.

Estos son los usuarios más comunes en las empresas, instituciones y organizaciones como lo son recepcionistas, personal de telemercadeo, ejecutivos de venta, etc.

Para los desarrolladores el ambiente es bastante distinto, pues aquí es necesario interactuar con plataformas de desarrollo, acceso a servidores de prueba y desarrollo, así como ya cada vez menos ocasiones, realizar un trabajo muy intenso para ejecución de código a nivel local.

Raspberry Pi 4B como equipo para Diseñadores

Quienes realizan labores orientadas al diseño gráfico, diseño industrial, diseño arquitectónico, etc. saben perfectamente que es necesario contar, para realizar correcta y cabalmente sus labores, con equipos de cómputo de muy alto desempeño equipados con muchos recursos informáticos como lo son procesadores multi núcleo, memoria de acceso aleatorio, tarjetas de aceleración gráfica, etc.

Obviamente la Raspberry Pi 4B no cuenta con esos recursos, pero si en la empresa, la organización se cuenta con una solución de Infraestructura de Escritorios Virtuales (Virtual Desktop Infrastructure - VDI), será posible que usuarios que realizan tareas de Diseño Gráfico, Diseño Industrial, etc. podrán ejecutar sin problemas sus muy "pesadas" aplicaciones como AutoCAD, Photoshop, etc. sin necesidad de agregar más recursos informáticos al equipo de usuario.

Raspberry Pi 4B como equipo para Kioscos de Autoservicio y Paneles Informativos

¿Han estado en una plaza comercial y requieren saber a dónde está una tienda, un servicio en particular? Cuando vamos a un banco, a un hospital, a un restaurante, es muy importante conocer, tener certeza del estatus de nuestra orden, el turno con el que me nos a atender, si la persona o pariente que ingresamos al hospital se encuentra estable o va mejorando. 

Existe desde hace más de una década, la tendencia a utilizar de kioscos interactivos para propiciar la cultura del autoservicio, así como también para sustituir a personal que sólo se dedicaba a dar información en escritorios estratégicamente ubicados.

Aquí también Raspberry Pi 4B entra en acción como una muy seria opción para ser el cerebro de los kioscos interactivos. Sea que estén conectados a una red de datos en un esquema 24x7 o con actualizaciones a cada cierto tiempo. Recuerden que es posible conectar a este dispositivos cámaras y monitores "touch". 

Raspberry Pi 4B como piedra angular de Domótica, Vehículos Inteligentes, etc.

Como consecuencia de La Cuarta Revolución Industrial, la Tercera Plataforma y la Transformación Digital, ahora es posible automatizar no solamente procesos industriales, sino también vehículos y casas habitación.

Estamos hablando de no solamente poder automatizar o mejorar la automatización ya existente en electrodomésticos. Sino también involucrar Inteligencia Artificial (algoritmos informáticos que permiten respuesta rápida en caso de cambios no previstos en el entorno), Aprendizaje de Máquina y otros beneficios que ya son una realidad dentro de las Tecnologías de la Información.

Dentro de los objetivos, en el caso de la Domótica o automatización del hogar, están el realizar un consumo más racional e inteligente del suministro de energía eléctrica, revisión 24x7 de todos y cada uno de los dispositivos para garantizar su funcionamiento continuo, monitoreo "in situ" de la salud de quienes se encuentran en casa con posibilidad de interacción con servicios de ambulancia y hospitalarios, etc.

En la industria del automóvil, ya no es suficiente para el conductor tener un sistema de audio que pueda interactuar con el Dispositivo Personal Móvil del conductor. Ahora se requiere un monitoreo más estricto de todos y cada uno de los sistemas que componen el vehículo, interacción con el Sistema de Posicionamiento Global para la elección de mejores rutas, vigilar en todo momento (predominantemente cuando el vehículo está andando) la proximidad de otros vehículos, así como te el súbito cruce de peatones.

¿Qué dicen de vehículos automotores que se pueden conducir solos, permitiendo que todos sus ocupantes puedan relajarse, utilizar su tiempo en algo más que no sea estar pendiente de la operación y conducción del vehículo? Esto no es algo que viva en ese mundo de la fantasía que ofrece Hollywood, sino que gracias a dispositivos como Raspberry Pi 4B ya es posible y algunas empresas fabricantes y entusiastas ya lo están haciendo.

Conclusión

Ya no hay que esperar años para poder realizar a modo personal o a nivel empresarial, soluciones y dispositivos que aprovechen lo mejor de las Tecnologías de la Información, para mejorar el funcionamiento de electrodomésticos, vehículos, etc.

Tampoco es necesario invertir grandes sumas de dinero en equipamiento para el alumnado o para quienes realizan laboras de oficina típicas. Lo que es más, también es posible que no sea necesario asignar caros equipos de cómputo cargados de recursos informáticos, para personal de diseño.

Las Computadoras en Una Sola Tarjeta permiten todo esto y mucho más, permitiendo que nuestra creatividad no tenga límites.

NOTA AL CALCE

Esta entrada al Blog Tecnológico Tech Data se realizó completamente utilizando una RaspberryPi 4B, con sistema operativo Raspbian y navegador Chromium.

jueves, 27 de agosto de 2020

La evolución de las Tecnologías de la Información hacia la hiperconvergencia

Las tecnologías avanzadas alteran continuamente el panorama de nuestro mundo y cada paso es una evolución incremental que lo impulsa hacia adelante. Las empresas modernas dependen en gran medida de esta disrupción positiva cíclica e iterativa para ser competitivas en el mercado e innovar, brindando nuevos servicios y productos a sus clientes más rápido que nunca.

Las empresas también exigen flexibilidad, posibilidad de elegir, agilidad y rentabilidad de estas tecnologías habilitadoras, para garantizar que las capacidades comerciales puedan cambiar con la demanda, el mercado, la misión comercial, etc.

En la última década, el auge de los servicios en la nube satisfizo la demanda de más Tecnologías de la Información y agilidad empresarial, lo que permitió que nuevas aplicaciones y servicios estuvieran en línea casi de la noche a la mañana. Sin embargo, esta capacidad creó problemas secundarios de expansión de datos y sistemas, gobernanza y estratificación del cumplimiento, costando a las empresas más que los modelos tradicionales de centros de datos, ya que carecía de controles de costos maduros.

Entonces, por estas razones y más, las empresas se dieron cuenta de que ciertas cargas de trabajo y conjuntos de datos eran más adecuados para sus centros de datos, mientras que otras requerían una arquitectura a escala "web" que llegara a una audiencia global, sin fricciones ni resistencia alguna. Así nació el modelo de nube híbrida. Ésta combina control, flexibilidad, seguridad, escalabilidad y rentabilidad, satisfaciendo las necesidades tanto de las empresas como de los clientes. Pero para comprender realmente los impulsores comerciales que llevaron a la nube híbrida, debemos analizar brevemente dónde comenzó todo esto. Y todo empezó con El Mainframe (la Primera Plataforma).

Mainframes (nace la Primera Plataforma)

Comenzando con la computación basada en Mainframes u Computadoras Centrales, los usuarios tenían la capacidad de crear estructuras de código monolíticas masivas, que residían en equipos en gran parte aislados y hechos a la medida. La potencia de procesamiento y el diseño centralizado de este sistema lo hacían muy costoso e inflexible. Utilizaban tecnología propietaria y el mantenimiento de cada sistema requería capacitación especializada y una coordinación cuidadosa, para garantizar interrupciones comerciales mínimas.

En caso de falla, se requiere forzosamente de un Mainframe Secundario, y la restauración desde las cintas de respaldo puede tardar días en completarse (Recovery Time Objective prolongado). Hablando de las aplicaciones, éstas tenían que ser escritas a medida para cada plataforma, lo que requería mucho tiempo y dinero.

Servidores Unix (nace la Segunda Plataforma)

La creación de los sistemas operativos Unix impulsó una estandarización de hardware y software en sistemas más enfocados y manejables. Esta homogeneidad permitió a los operadores de computadoras estandarizar sus habilidades y mantener los sistemas de manera similar en cualquier rubro de negocio o empresas. Sin embargo, el hardware del sistema Unix todavía está especializado por el proveedor (IBM POWER, IA64, SUN SPARC y otros), al igual que los distintos Sistemas Operativos Unix. 

Las aplicaciones (ahora en modalidad Cliente-Servidor) se desarrollan pero aún no se transfieren entre proveedores dispares, creando un bloqueo y requiriendo conjuntos de habilidades personalizados para los operadores de computadoras. Creación de Silos de Cómputo.

Arquitecturas Intel-AMD x86/X64 (se consolida la Segunda Plataforma)

En los años noventa hace acto de presencia la plataforma Intel-AMD x86/X64: un conjunto de hardware comercializado que se entrega de manera rápida, económica y estandarizada de la forma en la que se crean los sistemas de hardware en la actualidad. Al optimizar la arquitectura de hardware subyacente, los siguientes sistemas operativos en sistemas Intel-AMD x86/X64 se administran más fácilmente que sus contrapartes. Los componentes y los sistemas completos son intercambiables, las imágenes del Sistema Operativo se transfiere con relativa facilidad y las aplicaciones se desarrollan y migran más rápidamente a nuevos sistemas.

El avance de los sistemas Intel-AMD x86/X64 también hizo que la innovación de hardware supere la demanda de software, donde los sistemas multinúcleo con abundante memoria y almacenamiento quedarían inactivos o subutilizados en algunos momentos, debido a la naturaleza estática del tamaño del sistema. Los servidores Intel-AMD x86/X64 sufrieron su propio éxito y requirieron más innovación a nivel de software para desbloquear la próxima innovación: La Virtualización.

Virtualización de la Arquitectura Intel-AMD x86/X64 (cimientos de la Tercera Plataforma)

Aquí es menester hacer un paréntesis, pues el concepto de "Hipervisor" y por ende "Virtualización", ya había sido creado desde la era de los Mainframes. Pues gracias a ambos era posible poder ejecutar múltiples Cargas de Trabajo en el mismo Hardware.

La Virtualización de la Arquitectura Intel-AMD x86/X64 (como en cualquier otra plataforma) abstrae un sistema operativo de su hardware subyacente, lo que permite que cualquier sistema operativo que ya de por sí se podía ejecutar sobre la Arquitectura Intel-AMD x86/X64, ahora se pueda ejecutar simultáneamente con otros sistemas operativos en el mismo servidor "Bare Metal" (de manera nativa o a metal desnudo). Esto permitió aún más flexibilidad, ahorro de costos y eficiencia, así como portabilidad; ahora las aplicaciones se envían preinstaladas dentro de los “archivos” o imágenes de la máquina virtual. Estos sistemas virtualizados maximizan la densidad del sistema operativo al hardware, reduciendo los costos en el centro de datos y habilitando nuevas formas programáticas para implementar rápidamente nuevas Cargas de Trabajo.

Los sistemas virtualizados aún requerían cierta sobrecarga de mantenimiento y un conjunto de habilidades especializadas para operar y mantener. Con frecuencia las empresas sufrían la complejidad operativa de mantener cientos o incluso miles de máquinas virtuales a escala. Las mejoras, actualizaciones y el mantenimiento del sistema aún requerían una coordinación y planificación cuidadosas y a menudo, interrumpían las operaciones comerciales. Este modelo volvió a cambiar positivamente cuando se introdujeron "Los Contenedores".

Contenedores (consolidación de la Tercera Plataforma)

Los Contenedores son imágenes preempaquetadas de software (Microservicios), que utilizan fracciones de la capacidad informática y de almacenamiento de las máquinas virtuales, que se pueden implementar instantáneamente en cualquier ambiente de ejecución preparado para contenedores (Docker), a través de la automatización y la orquestación (Kubernetes).

Estas pequeñas unidades de cómputo (Microservicios) permitieron a los desarrolladores probar e implementar código rápidamente en cuestión de minutos en lugar de revisar los cambios de software en un repositorio en días, habilitando un ciclo de prueba y compilación de software automatizado que podría simplemente monitorearse, sin requerir grandes esfuerzos para su administración.

Los Contenedores también permitieron subdividir las aplicaciones en "Microservicios" más pequeños, donde no es necesario que una aplicación completa resida en la misma instancia o sistema operativo, sino solo una fracción que podría satisfacer una demanda comercial conocida. Esta capacidad combinada con el modelo operativo de La Nube "paga por lo que usa", permitió a las empresas pagar realmente solo por los servicios que necesitaban, cuando los necesitaban.

Arquitectura Sin Servidor (Serverless)

Atomizando las aplicaciones aún más, la computación Sin Servidor o la “Función como un Servicio” minimizó aún más la huella de los servicios de aplicaciones, al ejecutar solo pequeñas secciones de código a la vez. La computación Sin Servidor permitió a las empresas consumir fracciones de tiempo computacional y almacenamiento mínimo, simplemente ejecutando su código "bajo demanda" y sin la necesidad de poseer, administrar y dar mantenimiento al resto de la infraestructura subyacente.

En cada paso del camino, la potencia informática se mejoró, se hizo más eficiente y acercó las aplicaciones a su entorno operativo deseado siempre procurando obtener el desempeño y rendimiento correcto, satisfaciendo la demanda correcta del cliente, exactamente al costo y escala correctos.

Sin embargo, la informática Sin Servidor no es la única opción para obtener el mejor rendimiento, al menor costo y con la más óptima escalabilidad. Como ya hemos mencionado en este Blog Tecnológico, existe un riesgo inherente al entregar el control completo del hardware a un tercero y simplemente consumir recursos como un servicio. Una organización que pierde el control de sus datos no es un escenario ideal, por lo que existe una clara necesidad de una solución local que brinde los mismos beneficios que ofrece la computación sin servidor, pero sin los riesgos de seguridad y gobernabilidad.

Esa solución alternativa local es la Hiperconvergencia.

Infraestructura Hiperconvergente

La Infraestructura Hiperconvergente es aquella que gracias a La Virtualización de todos los elementos de los sistemas convencionales otrora "definidos por hardware", ahora son definidos por software. La Infraestructura Hiperconvergente (HCI por sus siglas en inglés) incluye como mínimo, recursos de cómputo (procesador y memoria) , almacenamiento y redes definidos por software . 

La Infraestructura Hiperconvergente normalmente se ejecuta en servidores comerciales listos para usar, dando como resultado los Centros de Datos Definidos por Software (SDDC por sus siglas en inglés) que permiten ofrecer a los Usuarios una Infraestructura como un Servicio (IaaS), en modalidad de Nube Privada. 

Algo muy importante a tomar en cuenta en este momento, es que la Infraestructura Hiperconvergente no sustituye ni a La Virtualización ni mucho menos a los Microservicios que vienen aparejados con Los Contenedores. Digamos que más bien aquí gracias a La Virtualización puede existir la Infraestructura Hiperconvergente, mientras que sobre una Infraestructura Hiperconvergente es posible el ejecutar Microservicios en formato de Contenedores.

Aunque se antoja pensar que la Infraestructura Hiperconvergente es el pináculo de las Tecnologías de la Información, recordemos que ésta permite que las empresas puedan gozar de Infraestructura como un Servicio en Nube Privada y Nube Híbrida (en conjunción con la Núbe Pública). Pero estamos muy seguros de que este es un escalón más a ambientes de cómputo cada vez más eficientes, flexibles y bajo demanda.

¿En qué estado se encuentran actualmente sus Tecnologías de la Información?

martes, 28 de julio de 2020

Pronóstico de Crecimiento en Ingresos para Software y Servicios de Gestión de Contenedores

En las dos más recientes entradas: "Antes de entender Contenedores, entendamos Microservicios" y "Guía esencial de contenedores", explicamos qué son los Contenedores (en el ámbito de las Tecnologías de la Información), por qué se han convertido en un "deber ser" para las áreas de Desarrollo y Operación de las empresas, así como también aportamos una muy breve guía de cómo comenzar esta aventura.

Como bien sabemos, nada en este mundo (incluidas por supuesto las Tecnologías de la Información) funciona, subsiste, persiste o trasciende si no viene con su dosis (directa o indirectamente) de beneficio económico.

Por ello queremos aquí compartir cuál es, en estos meses más recientes, el panorama con respecto a los Contenedores y quiénes son los que están partiendo el pastel.

Entrando de lleno al tema, es un hecho que los ingresos mundiales de gestión de contenedores alcanzarán los $ 944 millones en 2024, frente a una pequeña base de $ 465.8 millones en 2020, según las nuevas cifras de Gartner.

Entre los diversos subsegmentos, la orquestación de contenedores en la nube pública y las ofertas de contenedores sin servidor experimentarán el crecimiento más significativo, dice la firma analista.

Esta es la primera vez que Gartner publica un pronóstico para la gestión de contenedores, en respuesta a la creciente importancia de la tecnología subyacente.

"Ha habido una exageración considerable y un alto nivel de interés en la tecnología de contenedores, pero un menor nivel de despliegues de producción hasta la fecha", dice Michael Warrilow, vicepresidente de investigación de Gartner.

"Los contenedores se han vuelto populares porque proporcionan una herramienta poderosa para abordar varias preocupaciones críticas de los desarrolladores de aplicaciones, incluida la necesidad de una entrega más rápida, agilidad, portabilidad, modernización y gestión del ciclo de vida", afirma.

Gartner predice que para 2022, más del 75% de las organizaciones globales ejecutarán aplicaciones en contenedores en producción, en comparación con menos del 30% actual.

"Como resultado del uso creciente de contenedores, la demanda empresarial para la gestión de contenedores está aumentando", dice Warrilow, quien además agrega que "la gestión de contenedores proporciona software y/o servicios que respaldan la gestión de contenedores, a escala, en entornos de producción".

Según Gartner, la popularidad de las aplicaciones nativas de la nube está detrás del crecimiento de la administración de contenedores.

Warrilow añade que el crecimiento previsto en la adopción empresarial de la gestión de contenedores indica el atractivo intrínseco de la arquitectura nativa de la nube.

"La comprensión de" nativo de la nube "varía, pero tiene importantes beneficios potenciales sobre el diseño tradicional de aplicaciones monolíticas, como la escalabilidad, la elasticidad y la agilidad", afirma y además comenta que "también está fuertemente asociado con el uso de contenedores".

Gartner afirma que las condiciones económicas recesivas frenarán el crecimiento en el mediano plazo.

Varios factores restringirán la adopción entre organizaciones que desarrollan o modernizan aplicaciones personalizadas. A pesar de la necesidad de apoyar la Transformación Digital, las iniciativas se verán limitadas por condiciones económicas recesivas por lo menos a mediano plazo, a medida que las prioridades de la organización cambien a la optimización de costos, aporta la firma analista.

Gartner espera que hasta el 15% de las aplicaciones empresariales se ejecuten en un entorno contenedor para 2024, frente a menos del 5% en 2020, obstaculizado por la acumulación de solicitudes, la deuda técnica y las limitaciones presupuestarias.

"El cuello de botella será la velocidad a la que las aplicaciones se pueden refactorizar y / o reemplazar", comparte Warrilow.

Un dato de suma importancia es lo que Gartner ha encontrado y nos comparte en la frase: -"Los contenedores alimentarán un ecosistema abierto."-

Los ingresos directos por software y servicios de gestión de contenedores seguirán siendo una pequeña parte del ecosistema de contenedores. Los ingresos adicionales provendrán de una variedad de segmentos adyacentes que no están incluidos en el pronóstico de administración de contenedores de Gartner. Esto incluye el desarrollo de aplicaciones, servicios administrados, hardware local e Infraestructura como un Servicio (IaaS) entre otros segmentos.

Por ejemplo, se espera que los ingresos de IaaS asociados con la gestión de contenedores alcancen $ Un Mil Millones antes de 2023. Muchos de los segmentos adyacentes ya se informan en los pronósticos existentes de Gartner

"Aunque los ingresos incrementales directos pueden ser menores de lo que muchos esperan, los contenedores pueden tener un papel diferente que desempeñar", explica Warrilow. "Los contenedores podrían en última instancia alimentar un ecosistema abierto similar a Linux".

En este punto ya pudimos darnos cuenta de qué tan preponderante e importante son ya los Contenedores, no solo para las áreas de Desarrollo y Operaciones de las empresas en general, como también para aquellas que su negocio principal sea precisamente el Desarrollo de Aplicaciones, sino también desde el punto de vista del negocio en general.

Ahora bien. ¿Qué empresas son las que hoy predominan, desde el punto de vista de Productos y Servicios, en lo que respecta a Contenedores Informáricos?

La creciente oportunidad está resultando atractiva para los proveedores de software que buscan demostrar que sus ofertas comerciales basadas en Kubernetes son mejores que el resto. Hasta ahora, Red Hat se destaca como líder del mercado con una cuota de mercado del 44%. La compañía está cosechando el fruto de su estrategia de ventas práctica, donde primero consultan y capacitan a los desarrolladores empresariales y luego monetizan una vez que la empresa despliega contenedores en producción.

"Las funciones de automatización son la clave del crecimiento de los contenedores", dijo Vladimir Galabov, analista principal de IHS Markit. “Los proveedores de servicios en la nube de hiperescala fueron los primeros en adoptar el software de contenedor en sus centros de datos (DC) y ya ejecutan sistemas operativos de contenedor en máquinas virtuales en más de un tercio de sus servidores de múltiples inquilinos. En comparación, las empresas de telecomunicaciones y las empresas ejecutan software de contenedores en solo el 8 por ciento de sus servidores de múltiples inquilinos en la actualidad ”.

El retraso en la implementación se debe a la complejidad de administrar Kubernetes en varios equipos dentro de la organización, así como en varias nubes.

"Esta es la razón por la cual las empresas y las empresas de telecomunicaciones requieren niveles más altos de automatización de administración de contenedores, administración de clúster y características de configuración de políticas que las que estaban disponibles en 2018", dijo Galabov.

Los principales desarrollos de cuota de mercado en el primer trimestre de 2019 incluyen:

Red Hat obtuvo un 44% de participación en los ingresos del mercado de software de contenedores. Su software de contenedor, OpenShift, recientemente superó los 1.100 clientes. Red Hat demostró que la mejor estrategia para vender software de contenedores es un enfoque práctico donde la capacitación y la consultoría son lo primero. La adquisición de CoreOS de CoreOS también ha permitido la adición de nuevas funciones de configuración de políticas, administración y automatización a OpenShift.

Docker fue No. 2 con 23%. El compromiso de la compañía de adoptar Kubernetes en lugar de seguir adelante con su software alternativo de administración de contenedores, Swarm, está dando sus frutos. El proveedor indicó que más de 750 clientes implementaron Docker Enterprise a fines de abril de 2019.

Pivotal y VMware tomaron el puesto número 3 con una participación de ingresos del 6% generada por sus esfuerzos conjuntos de comercialización. Aún en su infancia, el acuerdo de los proveedores ha producido un software de contenedor PKS desarrollado conjuntamente, que ha superado los 140 clientes acumulados.

Rancher Labs y Canonical completaron los cinco primeros con 3% y 2% de acciones, respectivamente. El primero ha duplicado su número de empleados durante el último año para apoyar a sus 250 clientes acumulados.

"Red Hat ha asegurado una posición de liderazgo en el mercado con una adquisición oportuna de CoreOS y una estrategia de ventas práctica diferenciada", dijo Galabov. “El atractivo de este mercado en crecimiento ha llevado a otros proveedores a intensificar su juego, con Docker haciendo las paces con Kubernetes y VMware formando una estrategia de salida al mercado más clara después de adquirir Heptio. Es probable que VMware refleje la estrategia de ventas de Red Hat y aumente su enfoque en las empresas de consultoría y capacitación para permitir de manera más efectiva la implementación de software de contenedores en la producción ".

Aspectos más destacados del mercado de software adicional para el servidor de múltiples inquilinos (multitenant).

Otros desarrollos notables incluyen:

  • Los servidores de múltiples inquilinos representaron el 67% del total de servidores enviados en el primer trimestre.
  • Un total del 48% de las unidades de software de servidor de múltiples inquilinos en el primer trimestre fueron autogestionadas, ya sea de código abierto, con un 38%, o propietarias, con un 10%.
  • Los contenedores en servidores bare metal representaban el 5% del total de servidores multiinquilinos.
  • VMware fue el número 1 en participación de mercado de ingresos de software de virtualización de servidores del primer trimestre con 47%, seguido de Microsoft con 14% y Red Hat con 11%.

En conclusión, tanto los Contenedores de Software, como todos los productos y servicios que ya están ofertándose y consumiendo el día de hoy, están transformando todo lo tocante a Desarrollo y Operaciones (DevOps), además de que representa una excelente oportunidad de negocio.