Plataforma de Contenedores Gestionada: Ventajas y Beneficios Clave

Plataforma de Contenedores Gestionada: Ventajas y Beneficios Clave

La Plataforma de Contenedores Gestionada ofrece ventajas a cualquier sistema dentro de cualquier empresa. Echa un vistazo a las tres críticas.

La Plataforma de Contenedores Gestionada está revolucionando todo. Estamos viviendo en una época donde el desarrollo y el panorama de TI están cambiando, nuevos paradigmas como microservicios y contenedores parecen estar presentes desde hace algunos años, y si confiamos en la realidad que los blogs y artículos muestran hoy, todos los usuarios ya los estamos usando todo el tiempo.

¿Has visto alguna publicación de blog sobre cómo desarrollar una aplicación J2EE que se ejecute en tu servidor Tomcat local? Probablemente no. El artículo más similar probablemente debería ser cómo contenerizar tu aplicación basada en Tomcat.

¿Pero sabes qué? La mayoría de las empresas todavía están trabajando de esa manera. Así que incluso si todas las empresas tienen un nuevo enfoque digital en algunos departamentos, también tienen otros que son más tradicionales.

Entonces, parece que necesitamos encontrar una manera diferente de traducir las principales ventajas de una plataforma basada en contenedores a un tipo de discurso que puedan ver y darse cuenta de los beneficios tangibles que pueden obtener de allí y tener el espíritu de «¡Hey, esto puede funcionar para mí!».

1. Obtendrás todos los componentes aislados y actualizados más rápidamente

Esa es una de las grandes cosas sobre las plataformas basadas en contenedores en comparación con enfoques anteriores como las plataformas basadas en servidores de aplicaciones. Cuando tienes un clúster de servidores de aplicaciones, todavía tienes un clúster con varias aplicaciones. Así que usualmente haces algo de aislamiento, mantienes aplicaciones relacionadas, proporcionas infraestructura independiente para las críticas, y así sucesivamente.

Pero incluso con eso, a algún nivel, la aplicación continúa estando acoplada, por lo que algunos problemas con algunas aplicaciones podrían derribar otra que no se esperaba por razones comerciales.

Con una plataforma basada en contenedores, obtienes cada aplicación en su burbuja, por lo que cualquier problema o error afectará a esa aplicación y nada más. La estabilidad de la plataforma es una prioridad para todas las empresas y todos los departamentos dentro de ellas. Solo pregúntate: ¿Quieres terminar con esas «cadenas de dominó» de fallos? ¿Cuánto mejorarán tus operaciones? ¿Cuánto aumentará tu felicidad?

Además, basado en el enfoque de contenedores, obtendrás componentes más pequeños. Cada uno de ellos realizará una sola tarea proporcionando una única capacidad a tu negocio, lo que significa que será mucho más fácil de actualizar, probar y desplegar en producción. Así que, al final, generará más despliegues en el entorno de producción y reducirá el tiempo de comercialización de tus capacidades empresariales.

Podrás desplegar más rápido y tener operaciones más estables al mismo tiempo.

2.- Optimizarás el uso de tu infraestructura

Costos, todo se trata de costos. No hay conversaciones con clientes que no estén tratando de pagar menos por su infraestructura. Así que, enfrentémoslo. Deberíamos poder ejecutar operaciones de manera optimizada. Así que, si el costo de nuestra infraestructura está aumentando, eso necesita significar que nuestro negocio está creciendo.

Las plataformas basadas en contenedores permitirán optimizar la infraestructura de dos maneras diferentes. Primero, si se utilizan dos conceptos principales: Elasticidad y Compartición de Infraestructura.

La elasticidad está relacionada porque solo voy a tener la infraestructura que necesito para soportar la carga que tengo en este momento. Así que, si la carga aumenta, mi infraestructura aumentará para manejarla, pero después de que ese momento pase, volverá a lo que necesita ahora después de que ese pico haya ocurrido.

La compartición de infraestructura se trata de usar cada parte del servidor que está libre para desplegar otras aplicaciones. Imagina un enfoque tradicional donde tengo dos servidores para mi conjunto de aplicaciones. Probablemente no tengo un uso del 100% de esos servidores porque necesito tener algo de capacidad de reserva para poder actuar cuando la carga aumente. Probablemente tengo un 60–70% de uso. Eso significa un 30% libre. Si tenemos diferentes departamentos con diferentes sistemas, y cada uno tiene su infraestructura con un 30% libre, ¿cuánta de nuestra infraestructura estamos simplemente desperdiciando? ¿Cuántos dólares/euros/libras estás simplemente tirando por la ventana?

Las plataformas basadas en contenedores no necesitan herramientas o software específicos instalados en la plataforma para ejecutar un tipo diferente de aplicación. No es necesario porque todo reside dentro del contenedor, por lo que puedo usar cualquier espacio libre para desplegar otras aplicaciones haciendo un uso más eficiente de esos.

3.- No necesitarás infraestructura para administración

Cada sistema que es lo suficientemente grande tiene algunos recursos dedicados para poder gestionarlo. Sin embargo, incluso la mayoría de las arquitecturas recomendadas recomiendan colocar esos componentes aislados de tus componentes de tiempo de ejecución para evitar cualquier problema relacionado con el administrador o el mantenimiento que pueda afectar tus cargas de trabajo de tiempo de ejecución, lo que significa infraestructura específica que estás usando para algo que no está ayudando a tu negocio. Por supuesto, puedes explicar a cualquier usuario de negocio que necesitas una máquina para ejecutar que proporcione las capacidades requeridas. Pero es más complejo que usar infraestructura adicional (y generar costo) para colocar otros componentes que no están ayudando al negocio.

Así que, las plataformas de contenedores gestionadas eliminan ese problema porque vas a proporcionar la infraestructura que necesitas para ejecutar tus cargas de trabajo, y se te proporcionarán de forma gratuita o por una tarifa tan baja las capacidades de administración. Y además de eso, ni siquiera necesitas preocuparte de que las funciones de administración estén siempre disponibles y funcionando bien porque esto se apoya en el propio proveedor.

Conclusión y próximos pasos

Como puedes ver, describimos beneficios muy tangibles que no están basados en la industria o enfocados en el desarrollo. Por supuesto, podemos tener muchos más para agregar a esta lista, pero estos son los críticos que afectan a cualquier empresa en cualquier industria en todo el mundo. Así que, por favor, tómate tu tiempo para pensar en cómo estas capacidades pueden ayudar a mejorar tu negocio. Pero no solo eso, tómate tu tiempo para cuantificar cómo eso mejorará tu negocio. ¿Cuánto puedes ahorrar? ¿Cuánto puedes obtener de este enfoque?

Y cuando tengas frente a ti un caso de negocio sólido basado en este enfoque, obtendrás todo el apoyo y el coraje que necesitas para avanzar en esa ruta. ¡Así que te deseo una transición pacífica!

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?

Aprende cómo puedes incluir el registro de Harbor en tu conjunto de herramientas DevSecOps para aumentar la seguridad y gestión en tu plataforma basada en contenedores

Con la transición a un proceso de desarrollo más ágil donde el número de implementaciones ha aumentado de manera exponencial. Esa situación ha hecho que sea bastante complejo mantener el ritmo para asegurarnos de que no solo estamos implementando código más a menudo en producción que proporciona las capacidades requeridas por el negocio. Sino que, al mismo tiempo, podemos hacerlo de manera segura y confiable.

Esa necesidad está llevando hacia la idea de DevSecOps para incluir la seguridad como parte de la cultura y prácticas de DevOps como una forma de garantizar la seguridad desde el principio en el desarrollo y a lo largo de todos los pasos estándar desde la máquina del desarrollador hasta el entorno de producción.

Además de eso, debido al paradigma de los contenedores, tenemos un enfoque más políglota con diferentes tipos de componentes ejecutándose en nuestra plataforma utilizando una imagen base diferente, paquetes, bibliotecas, etc. Necesitamos asegurarnos de que sigan siendo seguros de usar y necesitamos herramientas para poder gobernar eso de manera natural. Para ayudarnos en esa tarea es donde componentes como Harbor nos ayudan a hacerlo.

Harbor es un proyecto de CNCF en la etapa de incubación en el momento de escribir este artículo, y proporciona varias capacidades sobre cómo gestionar imágenes de contenedores desde una perspectiva de proyecto. Ofrece un enfoque de proyecto con su registro de docker y también un museo de gráficos si queremos usar Helm Charts como parte de nuestro desarrollo de proyectos. Pero también incluye características de seguridad, y esa es la que vamos a cubrir en este artículo:

  • Escaneo de Vulnerabilidades: te permite escanear todas las imágenes de docker registradas en los diferentes repositorios para verificar si tienen vulnerabilidades. También proporciona automatización durante ese proceso para asegurarse de que cada vez que empujamos una nueva imagen, esta se escanea automáticamente. Además, permitirá definir políticas para evitar extraer cualquier imagen con vulnerabilidades y también establecer el nivel de vulnerabilidades (bajo, medio, alto o crítico) que nos gustaría tolerar. Por defecto, viene con Clair como el escáner predeterminado, pero también puedes introducir otros.
  • Imágenes firmadas: el registro de Harbor proporciona opciones para desplegar notary como parte de sus componentes para poder firmar imágenes durante el proceso de empuje para asegurarse de que no se realicen modificaciones a esa imagen
  • Inmutabilidad de Etiquetas y Reglas de Retención: el registro de Harbor también proporciona la opción de definir la inmutabilidad de etiquetas y reglas de retención para asegurarse de que no haya ningún intento de reemplazar imágenes con otras usando la misma etiqueta.

El registro de Harbor se basa en docker, por lo que puedes ejecutarlo localmente usando docker y docker-compose siguiendo el procedimiento disponible en su página web oficial. Pero también admite ser instalado sobre tu plataforma Kubernetes usando el helm chart y el operador que están disponibles.

Una vez que la herramienta está instalada, tenemos acceso al Portal Web de la UI, y podemos crear un proyecto que tenga repositorios como parte de él.

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?
Lista de Proyectos dentro del Portal UI de Harbor

Como parte de la configuración del proyecto, podemos definir las políticas de seguridad que nos gustaría proporcionar a cada proyecto. Eso significa que diferentes proyectos pueden tener diferentes perfiles de seguridad.

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?
Configuraciones de seguridad dentro de un Proyecto en el Portal UI de Harbor

Y una vez que empujamos una nueva imagen al repositorio que pertenece a ese proyecto, vamos a ver los siguientes detalles:

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?

En este caso, he empujado una aplicación de TIBCO BusinessWorks Container Edition que no contiene ninguna vulnerabilidad y solo muestra eso y también dónde se verificó.

Además, si vemos los detalles, podemos verificar información adicional como si la imagen ha sido firmada o no, o poder verificarla nuevamente.

Registro de Harbor: ¿Cómo usarlo para aumentar la seguridad en tu plataforma?
Detalles de la imagen dentro del Portal UI de Harbor

Resumen

Así que, estas son solo algunas características que Harbor proporciona desde la perspectiva de seguridad. Pero Harbor es mucho más que solo eso, así que probablemente cubramos más de sus características en futuros artículos. Espero que, basado en lo que leíste hoy, te gustaría darle una oportunidad y comenzar a introducirlo en tu conjunto de herramientas DevSecOps.

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Guerras tecnológicas: Solución de Gestión de API vs Malla de Servicios

Guerras tecnológicas: Solución de Gestión de API vs Malla de Servicios

Service Mesh vs. Solución de Gestión de API: ¿es lo mismo? ¿Son compatibles? ¿Son rivales?

Cuando hablamos de comunicación en un mundo distribuido nativo de la nube y especialmente cuando hablamos de arquitecturas basadas en contenedores basadas en la plataforma Kubernetes como AKS, EKS, Openshift, etc., dos tecnologías generan mucha confusión porque parecen estar cubriendo las mismas capacidades: Esas son Service Mesh y Soluciones de Gestión de API.

Ha sido un tema controvertido donde se han hecho diferentes declaraciones audaces: Personas que piensan que esas tecnologías trabajan juntas de manera complementaria, otras que creen que están tratando de resolver los mismos problemas de diferentes maneras e incluso personas que piensan que una es solo la evolución de la otra hacia la nueva arquitectura nativa de la nube.

Soluciones de Gestión de API

Las Soluciones de Gestión de API han sido parte de nuestras arquitecturas durante mucho tiempo. Es un componente crucial de cualquier arquitectura hoy en día que se crea siguiendo los principios de la Arquitectura Guiada por API, y son una evolución del Gateway de API preexistente que hemos incluido como una evolución de los proxies puros a finales de los 90 y principios de los 2000.

La Solución de Gestión de API es un componente crítico de su Estrategia de API porque permite a su empresa trabajar en un Enfoque Guiado por API. Y eso es mucho más que el aspecto técnico de ello. Usualmente tratamos de simplificar el Enfoque Guiado por API al lado técnico con el desarrollo basado en API y los microservicios que estamos creando y el espíritu colaborativo en mente que usamos hoy para hacer cualquier pieza de software que se despliega en el entorno de producción.

Pero es mucho más que eso. Las Arquitecturas Guiadas por API se tratan de crear productos a partir de nuestra API, proporcionando todos los artefactos (técnicos y no técnicos) que necesitamos para hacer esa conversión. Una lista rápida de esos artefactos (pero no es una lista exhaustiva) son los siguientes:

  • Soporte de Documentación de API
  • Definición de Planes de Paquetes
  • Capacidades de Suscripción
  • Capacidades de Monetización
  • Descubrimiento de API de Autoservicio
  • Capacidades de Versionado

Tradicionalmente, la solución de Gestión de API también viene con capacidades de Gateway de API integradas para cubrir incluso el aspecto técnico de ello, y que también proporcionan algunas otras capacidades más a nivel técnico:

  • Exposición
  • Enrutamiento
  • Seguridad
  • Limitación

Service Mesh

Service Mesh es más una palabra de moda en estos días y una tecnología que ahora está en tendencia porque ha sido creada para resolver algunos de los desafíos que son inherentes al enfoque de microservicios y contenedores y todo bajo la etiqueta de nativo de la nube.

En este caso, proviene del lado técnico, por lo que es mucho más un enfoque de abajo hacia arriba porque su existencia es para poder resolver un problema técnico e intentar proporcionar una mejor experiencia de usuario a los nuevos desarrolladores y administradores de sistemas en este nuevo mundo mucho más complicado. ¿Y cuáles son los desafíos que se han creado en esta transición? Echemos un vistazo a ellos:

El Registro y Descubrimiento de Servicios es una de las cosas críticas que necesitamos cubrir porque con el paradigma elástico del mundo nativo de la nube hace que los servicios cambien su ubicación de vez en cuando comenzando en nuevas máquinas cuando sea necesario, eliminándolos cuando no hay suficiente carga para requerir su presencia, por lo que es esencial proporcionar una manera de gestionar fácilmente esa nueva realidad que no necesitábamos en el pasado cuando nuestros servicios estaban vinculados a una máquina específica o conjunto de dispositivos.

La seguridad es otro tema importante en cualquier arquitectura que podamos crear hoy, y con el enfoque poliglota que hemos incorporado en nuestras arquitecturas es otra cosa desafiante porque necesitamos proporcionar una manera segura de comunicar nuestros servicios que son compatibles con cualquier tecnología que estemos usando y cualquiera que podamos usar en el futuro. Y no estamos hablando solo de Autenticación pura sino también de Autorización porque en una comunicación de servicio a servicio también necesitamos proporcionar una manera de verificar si el microservicio que está llamando a otro está permitido para hacerlo y hacerlo de una manera ágil para no detener todas las nuevas ventajas que su arquitectura nativa de la nube proporciona debido a su concepción.

Los requisitos de enrutamiento también han cambiado en estas nuevas arquitecturas. Si recuerdas cómo solíamos desplegar en arquitecturas tradicionales, normalmente intentamos encontrar un enfoque de cero tiempo de inactividad (cuando es posible) pero un procedimiento muy estándar. Desplegar una nueva versión, validar su funcionamiento y abrir el tráfico para cualquiera, pero hoy los requisitos exigen paradigmas mucho más complejos. Las tecnologías de Service Mesh soportan estrategias de implementación como Pruebas A/B, Enrutamiento basado en peso, Implementaciones Canary.

¿Rival o Compañero?

Entonces, después de hacer una vista rápida del propósito de estas tecnologías y el problema que intentaron resolver, ¿son rivales o compañeros? ¿Deberíamos elegir una u otra o intentar colocar ambas en nuestra arquitectura?

Como siempre, la respuesta a esas preguntas es la misma: «¡Depende!». Depende de lo que estás tratando de hacer, lo que tu empresa está tratando de lograr, lo que estás construyendo…

  • Se necesita una solución de Gestión de API siempre que estés implementando una Estrategia de API en tu organización. La tecnología de Service Mesh no está tratando de llenar ese vacío. Pueden proporcionar capacidades técnicas para cubrir lo que tradicionalmente ha hecho el componente de Gateway de API, pero este es solo uno de los elementos de la Solución de Gestión de API. Las otras partes que proporcionan las capacidades de gestión y gobernanza no están cubiertas por ningún Service Mesh hoy en día.
  • Se necesita Service Mesh si tienes una arquitectura nativa de la nube basada en la plataforma de contenedores que se basa firmemente en la comunicación HTTP para la comunicación sincrónica. Proporciona tantas capacidades técnicas que harán tu vida mucho más manejable que tan pronto como lo incluyas en tu arquitectura, no podrás vivir sin él.
  • Service Mesh solo va a proporcionar sus capacidades en un enfoque de plataforma de contenedores. Entonces, si tienes un panorama más heterogéneo como muchas empresas tienen hoy en día, (tienes una plataforma de contenedores pero también otras plataformas como aplicaciones SaaS, algunos sistemas aún en las instalaciones y arquitecturas tradicionales que todas ellas están proporcionando capacidades que te gustaría aprovechar como parte de los productos de API), necesitarás incluir una Solución de Gestión de API.

Por lo tanto, estas tecnologías pueden jugar juntas en una arquitectura completa para cubrir diferentes tipos de requisitos, especialmente cuando estamos hablando de arquitecturas heterogéneas complejas con la necesidad de incluir un enfoque Guiado por API.

En próximos artículos, cubriremos cómo podemos integrar ambas tecnologías desde el aspecto técnico y cómo fluye la información entre los diferentes componentes de la arquitectura.

Los 3 mejores trucos de Bash para mejorar tu rendimiento

Los 3 mejores trucos de Bash para mejorar tu rendimiento

Encuentra la lista de los trucos de rendimiento de bash que uso todo el tiempo y que pueden ayudarte a ahorrar mucho tiempo en tu trabajo diario.

El conocimiento de trucos de bash es una de las formas de mejorar tu rendimiento. Pasamos muchas horas dentro de ellos y hemos desarrollado patrones y hábitos cuando iniciamos sesión en una computadora. Por ejemplo, si tienes dos personas con un nivel de habilidad similar y les das la misma tarea para hacer, probablemente, usen herramientas diferentes y diferentes caminos para llegar al mismo resultado.

Y eso es porque la cantidad de opciones disponibles para realizar cualquier tarea es tan significativa que cada uno de nosotros aprende una o dos formas de hacer algo, y nos aferramos a ellas, y simplemente las automatizamos, así que no estamos pensando cuando las escribimos.

Entonces, la idea de hoy es proporcionar una lista de algunos comandos que uso todo el tiempo que probablemente ya conozcas, pero para mí son como ahorros de tiempo cada día de mi vida laboral. Así que, comencemos con ellos.

1.- CTRL + R

Este comando es mi truco de bash predilecto. Es el que uso todo el tiempo; tan pronto como inicio sesión en una máquina remota que es nueva o simplemente regreso a ellas, lo uso para casi todo. Desafortunadamente, este comando solo te permite buscar en el historial de comandos.

Te ayuda a autocompletar basado en los comandos que ya estás escribiendo. Es como lo mismo que escribir history | grep <algo> pero simplemente más rápido y más natural para mí.

Este truco de bash también me permite autocompletar rutas que no recuerdo el nombre exacto de la subcarpeta o lo que sea. Hago este comando complicado cada dos semanas para limpiar algo de memoria de procesos o aplicar alguna configuración. O simplemente para solucionar problemas en qué máquina estoy iniciando sesión en un momento específico.

2.- find + action

El comando find es algo que todos conocemos, pero la mayoría de ustedes probablemente lo usen como una funcionalidad limitada de todas las disponibles del comando find. Y eso es porque ese comando es increíble. Proporciona tantas características. Pero esta vez, solo voy a cubrir un tema específico. Acciones después de localizar los archivos que estamos buscando.

Usualmente usamos el comando find para encontrar archivos o carpetas, lo cual es evidente para un comando que se llama de esa manera. Pero también nos permite agregar el parámetro -exec para concatenar una acción que se realizará para cada uno de los archivos que coincidan con tus criterios, por ejemplo, algo como esto

Encuentra todos los archivos yaml en tu carpeta actual y simplemente renómbralos para moverlos a una carpeta diferente. Puedes hacerlo directamente con este comando:

find . -name “*.yaml” -exec mv {} /tmp/folder/yamlFiles/ ;

3.- cd –

Un truco de bash tan simple y tan útil. Al igual que nuestro comando de bash para CTRL-Z. El comando cd - nos permite volver a la carpeta anterior en la que estábamos.

Tan valioso para cuando nos equivocamos de carpeta a la que queremos ir, solo para cambiar rápidamente entre dos carpetas y así sucesivamente. Es como volver atrás en tu navegador o el CTRL-Z en tu procesador de textos.

Conclusión

Espero que ames este comando tanto como yo, y si ya lo conoces, por favor déjame en las respuestas los trucos de bash que son más relevantes para ti diariamente. Puede ser porque lo usas todo el tiempo como yo hago con estos o porque incluso si no lo usas tantas veces, las veces que lo haces, ¡te ahorra una cantidad masiva de tiempo!

Observabilidad en un Ecosistema de Microservicios Políglota

Observabilidad en un Ecosistema de Microservicios Políglota

Aprende a gestionar los requisitos de observabilidad como parte de tu ecosistema de microservicios

“Que vivas en tiempos interesantes” es la traducción al inglés de la maldición china, y esto no podría ser más cierto como descripción de los tiempos en los que vivimos en cuanto a nuestra arquitectura de aplicaciones y desarrollo de aplicaciones.

Todos los cambios del enfoque nativo de la nube, incluyendo todas las nuevas tecnologías que vienen con él, como contenedores, microservicios, API, DevOps, etc., han transformado completamente la situación para cualquier arquitectura, desarrollador o administración de sistemas.

Es algo similar si te fuiste a la cama en 2003 y te despiertas en 2020, todos los cambios, todas las nuevas filosofías, pero también todos los desafíos únicos que vienen con los cambios y nuevas capacidades son cosas con las que necesitamos lidiar hoy.

Creo que todos podemos estar de acuerdo en que el presente es políglota en términos de desarrollo de aplicaciones. Hoy no se espera que ninguna gran empresa o corporación encuentre una tecnología disponible, un lenguaje disponible para soportar todos sus productos internos. Hoy todos seguimos y estamos de acuerdo con el principio de “la herramienta adecuada para el trabajo adecuado” para intentar crear nuestro conjunto de herramientas de tecnologías que vamos a usar para resolver diferentes casos de uso o patrones que necesitas enfrentar.

Pero ese acuerdo y movimiento también vienen con su desafío respecto a cosas en las que usualmente no pensamos, como el rastreo y la observabilidad en general.

Cuando usamos una sola tecnología, todo es más sencillo. Definir una estrategia común para rastrear tus flujos de extremo a extremo es fácil; solo necesitas incrustar la lógica en tu marco de desarrollo común o biblioteca que todos tus desarrollos están usando. Probablemente definir una arquitectura de encabezado típica con todos los datos que necesitas para poder rastrear efectivamente todas las solicitudes y definir un protocolo estándar para enviar todos esos rastros a un sistema estándar que pueda almacenarlos y correlacionarlos todos y explicar el flujo de extremo a extremo. Pero intenta mover eso a un ecosistema políglota: ¿Debería escribir mi marco o biblioteca para cada lenguaje o tecnología que necesitaría usar, o también puedo usar en el futuro? ¿Tiene sentido eso?

Pero no solo eso, ¿debería ralentizar la adopción de una nueva tecnología que puede ayudar rápidamente al negocio porque necesito proporcionar desde un equipo compartido este tipo de componentes estándar? Ese es el mejor caso en el que tengo suficiente gente que sabe cómo funcionan los internos de mi marco y tiene las habilidades en todos los lenguajes que estamos adoptando para poder hacerlo rápidamente y de manera eficiente. Parece poco probable, ¿verdad?

Entonces, a nuevos desafíos también nuevas soluciones. Ya he estado hablando sobre Service Mesh respecto a las capacidades que proporciona desde una perspectiva de comunicación, y si no lo recuerdas, puedes echar un vistazo a esas publicaciones:

Pero también proporciona capacidades desde otras perspectivas y el rastreo y la observabilidad es una de ellas. Porque cuando no podemos incluir esas características en cualquier tecnología que necesitemos usar, podemos hacerlo en una tecnología general que sea compatible con todas ellas, y ese es el caso con Service Mesh.

Como Service Mesh es la forma estándar de comunicar sincrónicamente tus microservicios en una comunicación de este a oeste cubriendo la comunicación de servicio a servicio. Entonces, si puedes incluir en ese componente también la capacidad de rastreo, puedes tener un rastreo de extremo a extremo sin necesidad de implementar nada en cada una de las diferentes tecnologías que puedes usar para implementar la lógica que necesitas, así que, has cambiado de la Figura A a la Figura B en la imagen a continuación:

Observabilidad en un Ecosistema de Microservicios Políglota
Implementación de lógica de rastreo en la aplicación vs. Soporte de rastreo de Service Mesh 

Y eso es lo que la mayoría de las tecnologías de Service Mesh están haciendo. Por ejemplo, Istio, como una de las opciones predeterminadas cuando se trata de Service Mesh, incluye una implementación del estándar OpenTracing que permite la integración con cualquier herramienta que soporte el estándar para poder recopilar toda la información de rastreo para cualquier tecnología que se use para comunicarse a través de la malla.

Entonces, ese cambio de mentalidad nos permite integrar fácilmente diferentes tecnologías sin necesidad de ningún soporte excepcional de esos estándares para cualquier tecnología específica. ¿Significa eso que la implementación de esos estándares para esas tecnologías no es necesaria? En absoluto, eso sigue siendo relevante, porque las que también soportan esos estándares pueden proporcionar aún más información. Después de todo, el Service Mesh solo conoce parte de la información que es el flujo que está sucediendo fuera de cada tecnología. Es algo similar a un enfoque de caja negra. Pero también agregar el soporte para cada tecnología al mismo estándar proporciona un enfoque adicional de caja blanca como puedes ver gráficamente en la imagen a continuación:

Observabilidad en un Ecosistema de Microservicios Políglota
Combinación de datos de rastreo de caja blanca y datos de rastreo de caja negra 

Ya hablamos sobre el cumplimiento de algunas tecnologías con el estándar OpenTracing como TIBCO BusinessWorks Container Edition que puedes recordar aquí:

Entonces, también, el soporte de estas tecnologías de los estándares de la industria es necesario e incluso una ventaja competitiva porque sin necesidad de desarrollar tu marco de rastreo, puedes lograr un enfoque de Datos de Rastreo Completo adicional a lo que ya proporciona el nivel de Service Mesh en sí mismo.

Métricas de Prometheus: ¿Cómo cambiar el nombre de la métrica?

Métricas de Prometheus: ¿Cómo cambiar el nombre de la métrica?

Encuentra una manera de redefinir y reorganizar el nombre de tus métricas de Prometheus para cumplir con tus requisitos

Prometheus se ha convertido en el nuevo estándar cuando hablamos de monitorear nuestra nueva arquitectura de aplicaciones modernas, y necesitamos asegurarnos de conocer todas sus opciones para asegurarnos de obtener lo mejor de él. Lo he estado usando durante algún tiempo hasta que me di cuenta de una característica que estaba desesperado por saber cómo hacer, pero no pude encontrar en ningún lugar claramente definido. Así que como no lo encontré fácilmente, pensé en escribir un pequeño artículo para mostrarte cómo hacerlo sin necesidad de gastar el mismo tiempo que yo.

Tenemos mucha información sobre cómo configurar Prometheus y usar algunos de los complementos de configuración habituales, como podemos ver en su página web oficial [1]. Incluso ya escribí sobre alguna configuración y usándolo para varios propósitos, como también puedes ver en otras publicaciones [2][3][4].

Uno de estos complementos de configuración es sobre el reetiquetado, y esto es algo genial. Tenemos que cada uno de los exportadores puede tener sus etiquetas y significado para ellas, y cuando intentas gestionar diferentes tecnologías o componentes hace complejo que todos ellos coincidan juntos incluso si todos ellos siguen la convención de nombres que tiene Prometheus [5].

Pero tuve esta situación, y estoy seguro de que tú también has pasado o pasarás por eso, que tengo métricas similares para diferentes tecnologías que para mí son las mismas, y necesito mantenerlas con el mismo nombre, pero como pertenecen a otras tecnologías no lo son. Así que necesito encontrar una manera de renombrar la métrica, y lo genial es que puedes hacer eso.

Para hacer eso, solo necesitas hacer una configuración de metric_relabel. Esta configuración se aplica para reetiquetar (como el nombre ya indica) etiquetas de tus métricas de prometheus en este caso antes de ser ingeridas, pero también nos permite usar algunos términos notables para hacer diferentes cosas, y uno de estos términos notables es __name__. __name__ es una etiqueta particular que te permitirá renombrar tus métricas de prometheus antes de ser ingeridas en la Base de Datos de Series Temporales de Prometheus. Y después de ese punto, esto será como si tuviera ese nombre desde el principio.

Cómo usar eso es relativamente fácil, es como cualquier otro proceso de reetiquetado, y me gustaría mostrarte un ejemplo sobre cómo hacerlo.

- source_labels: [__name__]
regex:  'jvm_threads_current'
target_label: __name__
replacement: 'process_thread_count'

Aquí hay un ejemplo simple para mostrar cómo podemos renombrar un nombre de métrica jvm_threads_current para contar los hilos dentro de la máquina JVM para hacerlo más genérico y poder incluir los hilos para el proceso en una métrica de prometheus process_thread_count que ahora podemos usar como si fuera el nombre original.


Referencias

[1] Prometheus: Configuración https://prometheus.io/docs/prometheus/latest/configuration/configuration/

[2] https://medium.com/@alexandrev/prometheus-monitoring-in-tibco-cloud-integration-96a6811416ce

[3] https://medium.com/@alexandrev/prometheus-tibco-monitoring-tibco-772018d093c4

[4] https://medium.com/@alexandrev/kubernetes-service-discovery-for-prometheus-fcab74237db6

[5] Prometheus: Nomenclatura de Métricas y Etiquetas https://prometheus.io/docs/practices/naming/

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Por qué deberíamos preocuparnos menos por pagar por servicios en línea

Por qué deberíamos preocuparnos menos por pagar por servicios en línea

Cuatro argumentos que cambian tu forma de pensar sobre esos gastos.

Si estás en tus treinta y tantos, probablemente seas como yo, y deberías recordar la vieja época de este mundo donde cada servicio en línea era gratuito. Vivíamos en un mundo donde la piratería era una situación normal. Todo, desde películas hasta música, desde libros hasta software era gratis. Podías encontrar rápidamente un torrent, un enlace de descarga directa, o incluso si eres más viejo, un enlace de Mule. ¿Todavía recuerdas Mule? Jaja, sí, yo también.

Nuestra generación se alejó de una era de «todo gratis sin la mejor calidad» a un enfoque de «pago por servicio». Y esta transición está siendo complicada. Así que, si ese es tu caso o conoces a alguien que usualmente tiene este tipo de pensamiento, intentaré explicar por qué deberías preocuparte menos por el costo de esos servicios.

1. No estamos evaluando esos gastos de la misma manera que lo hacemos con los servicios físicos

Ese es el primer tema, y me gustaría explicarlo un poco más. Imagina la suscripción a Medium, si no me equivoco, son 50€ al año por acceso ilimitado a esos artículos, y conozco a mucha gente que piensa que es caro, que no vale lo que ofrecen.

Las mismas personas pueden gastar 50€ al mes en una suscripción al gimnasio y no piensan que esto sea caro en absoluto. Así que, ahora, probablemente estés pensando algo como esto: ¡Vamos! ¡No eres justo! ¿Cómo te atreves a comparar la suscripción a Medium con una suscripción al gimnasio?

El gimnasio tiene una infraestructura física que necesitan mantener. Tienen personas trabajando allí, en la recepción, servicios de limpieza, entrenadores personales, etc. También tienen costos adicionales debido al uso de la infraestructura como electricidad, agua, impuestos, etc.

¡Sí, eso es cierto! ¿Y qué hay de Medium? ¿No tiene la misma situación? Tienen una infraestructura en la nube que necesitan mantener, servidores, red, almacenamiento, copias de seguridad, etc. También tienen personas trabajando en ello: en el sitio mismo, curadores, pero también desarrolladores, administradores de sistemas, etc., para realizar todas las tareas de mantenimiento para mantener el lugar al mejor nivel posible para que lo uses. Así que, esto no es diferente en absoluto en ambos casos. Pero este no es el único argumento.

2. ¡Los servicios en línea son increíblemente más baratos!

Ahora, en lugar de hablar de Medium, hablemos de una aplicación que podrías pensar que es cara. Hablemos de Netflix, que dependiendo de tu país puede tener una tarifa mensual de unos 15–20€.

Y puedes argumentar, pero no veo ni el 0.1% de su catálogo, ¿por qué debería pagar por todo si no voy a usar todo lo que ofrece?

Pero piensa en cuánto te costaron las entradas de cine la última vez que pudiste salir (Sí, sí, lo sé, este no es el mejor momento para hablar de cines y salir en esta situación, pero aguanta conmigo en esta).

Hagamos las cuentas conmigo: Dos personas yendo al cine, 10 € cada uno por las entradas. Si tienes algo más para beber o comer, podrías rápidamente gastar 35 € solo por una sesión de 2 horas.

Por supuesto, incluso con el mejor sistema de cine en casa, no es comparable en absoluto con lo que puedes sentir en una sesión de cine, pero ese no es el tema. El argumento es que si puedes permitirte una sesión de cine al mes (Sí, solo una al mes) y no sientes que estás desperdiciando tu dinero, puedes permitirte Netflix + Disney + Prime Video al mismo ritmo.

Y esto se aplica a todo. Siempre recomiendo cuando hablo de esto con otras personas comparar con algo físico que hacen sin pensarlo mucho, por ejemplo, un café matutino. Muchos de nosotros tomamos una taza de café para llevar cada día de nuestra vida laboral. Imagina un costo promedio de 1.5€, y cada mes tiene 20 días laborables, eso significa que estás gastando 30 € al mes solo en tu café matutino. Una vez más, la misma cantidad para tres servicios de streaming de video de primera.

La idea principal de este argumento no es que dejes de tomar esa primera taza de café que necesitas para que tu cuerpo funcione y se prepare para el día. Aún así, piensa que si no sientes mucho por ese café matutino, no deberías preocuparte tanto por la tarifa del servicio en línea también.

3. Puedes reevaluar tu decisión en cualquier momento

Además, otro argumento para no preocuparse mucho por esto es porque puedes revisarlo cada vez que quieras. El procedimiento aquí no es el mismo que usas para evaluar la compra de tu nuevo iPad, o si necesitas una laptop o un coche. Que necesitas estar muy seguro de que vas a sacarle el máximo provecho.

En este caso, esta es una tarifa recurrente que puedes cancelar en cualquier momento si crees que no la vas a usar o ves que no es tan útil como pensabas. Así que, no hay problema en probarlo por unos meses, y si no funciona, simplemente cancélalo. Así que, si tienes ese poder y opciones en tus manos, ¿por qué estás tan preocupado por dar ese paso de pagar por primera vez solo para probar?

Lo hacemos todo el tiempo en otros aspectos de la vida. Imagina la siguiente situación en el mercado, cuando ves una nueva marca de algo que vas a comprar. Puede ser yogur fresco, jugo fresco, o incluso una nueva cerveza. ¿Cuántas veces obtienes algo de una nueva marca, solo para probar? ¡Probablemente la respuesta sea TODO EL TIEMPO! Y sí, estás pagando por ello, no es como si fueras al cajero y le dijeras: No, no, déjame solo probar esto por varios meses y probablemente el próximo año pueda ver si vale la pena.

4. Estamos invirtiendo en nosotros mismos

Este argumento puede parecer extraño al principio porque parece más: No, no, no. Estoy invirtiendo en esta empresa, sus desarrolladores, y puedo sentirme feliz por ello, pero esto es una transacción. Sí, eso también es cierto, pero imagina eso. ¿Qué te pasa si todos los servicios que estás usando en línea desaparecen porque ya no es un negocio sustancial para ellos? ¿Va a afectar tu vida? Sí, seguro.

Solo recuerdo la primera aplicación que usé mucho que fue descontinuada y eliminada. Siempre he sido un chico de Linux, y he usado mucho una herramienta de gestión de tareas llamada BasKet como parte del entorno KDE que era similar a lo que hoy es OneNote. Podías juntar muchos tipos de contenido y gestionarlo como quisieras.

Era increíble, pero finalmente decidieron dejar de trabajar en la herramienta, y la herramienta no fue actualizada, y sí, eliminaron la herramienta. Mi vida cambió mucho. Necesitaba encontrar otra herramienta para hacer el mismo trabajo e imagina qué: No había ninguna en ese momento (estaba hablando de 2006 🙂 ). Así que mi vida fue peor porque nadie apoyó su esfuerzo al nivel que necesitaban para seguir haciéndolo. Así que, también deberías pensar eso, ¿cuánto me costará si esta aplicación X desaparece?

Conclusión

Así que, espero que estos argumentos puedan ayudarte a cambiar de opinión o ser útiles en tus conversaciones con otras personas que tienen esta idea de que todo debería ser gratis en el mundo en línea para ser más coherentes con la realidad en la que vivimos ahora. Así que, probemos nuevos servicios en línea, ¡y probablemente descubramos que nuestra vida en línea puede ser mejor!

Un nuevo concursante para destronar al Rey: Apache Pulsar

Un nuevo concursante para destronar al Rey: Apache Pulsar

Apache Kafka parece ser la solución estándar en la arquitectura actual, pero deberíamos centrarnos en si es la elección correcta para nuestras necesidades.

Hoy en día, estamos en una nueva era de Arquitectura Orientada a Eventos, y esta no es la primera vez que vivimos eso. Antes de los microservicios y la nube, EDA era la nueva normalidad en la integración empresarial. Basado en diferentes tipos de estándares, había protocolos como JMS o AMQP utilizados en productos basados en brokers como TIBCO EMS, Active MQ o IBM Websphere MQ, por lo que este enfoque no es algo nuevo.

Con el auge de las arquitecturas de microservicios y el enfoque liderado por API, parecía que habíamos olvidado la importancia de los sistemas de mensajería, y tuvimos que pasar por los mismos desafíos que vimos en el pasado para llegar a una nueva solución de mensajería para resolver ese problema. Así que estamos volviendo a la Arquitectura EDA, mecanismo pub-sub, para ayudarnos a desacoplar los consumidores y productores, moviéndonos de la orquestación a la coreografía, y todos estos conceptos encajan mejor en los mundos actuales con componentes cada vez más independientes que necesitan cooperación e integración.

Durante este esfuerzo, comenzamos a mirar nuevas tecnologías para ayudarnos a implementar eso nuevamente. Sin embargo, con la nueva realidad, olvidamos los protocolos y estándares pesados como JMS y comenzamos a pensar en otras opciones. Y debemos admitir que sentimos que hay un nuevo rey en esta área, y este es uno de los componentes críticos que parece ser, sin importar qué, en la arquitectura de hoy: Apache Kafka.

Y no me malinterpretes. Apache Kafka es fantástico, y ha sido probado durante mucho tiempo, una solución lista para producción, de alto rendimiento, con capacidades impresionantes para la reproducción y una API poderosa para facilitar la integración. Apache Kafka tiene algunos desafíos en este mundo nativo de la nube porque no se lleva tan bien con algunas de sus reglas.

Si has usado Apache Kafka durante algún tiempo, eres consciente de que hay desafíos particulares con él. Apache Kafka tiene una arquitectura que proviene de sus días en LinkedIn en 2011, donde Kubernetes o incluso Docker y las tecnologías de contenedores no eran una cosa, lo que hace que ejecutar Apache Kafka (servicio puramente con estado) de manera contenedorizada sea bastante complicado. Hay mejoras usando gráficos de helm y operadores para facilitar el viaje, pero aún así, no se siente como si las piezas pudieran integrarse bien de esa manera. Otra cosa es la geo-replicación que incluso con componentes como MirrorMaker, no es algo que se use, funcione sin problemas y se sienta integrado.

Otras tecnologías están tratando de proporcionar una solución para esas capacidades, y una de ellas es también otro proyecto de la Fundación Apache que ha sido donado por Yahoo! y se llama Apache Pulsar.

No me malinterpretes; esto no se trata de encontrar una nueva verdad, esa única solución de mensajería que es perfecta para las arquitecturas de hoy: no existe. En el mundo actual, con tantos requisitos y variables diferentes para los diferentes tipos de aplicaciones, una talla única ya no es cierta. Así que deberías dejar de pensar en cuál solución de mensajería es la mejor, y pensar más en cuál sirve mejor a tu arquitectura y cumple con los requisitos tanto técnicos como comerciales.

Hemos cubierto diferentes formas de comunicación general, con varias soluciones específicas para la comunicación sincrónica (tecnologías de malla de servicios y protocolos como REST, GraphQL o gRPC) y diferentes para la comunicación asincrónica. Necesitamos profundizar en la comunicación asincrónica para encontrar lo que funciona mejor para ti. Pero primero, hablemos un poco más sobre Apache Pulsar.

Apache Pulsar

Apache Pulsar, como se mencionó anteriormente, ha sido desarrollado internamente por Yahoo! y donado a la Fundación Apache. Como se indica en su sitio web oficial, hay varios puntos clave a mencionar al comenzar a explorar esta opción:

  • Funciones de Pulsar: Despliega fácilmente lógica de cómputo ligera usando APIs amigables para desarrolladores sin necesidad de ejecutar tu motor de procesamiento de flujos
  • Probado en producción: Apache Pulsar ha funcionado en producción a escala Yahoo durante más de tres años, con millones de mensajes por segundo a través de millones de temas
  • Escalabilidad horizontal: Expande la capacidad sin problemas a cientos de nodos
  • Baja latencia con durabilidad: Diseñado para baja latencia de publicación (< 5ms) a escala con fuertes garantías de durabilidad
  • Geo-replicación: Diseñado para replicación configurable entre centros de datos en múltiples regiones geográficas
  • Multi-tenencia: Construido desde cero como un sistema multi-tenant. Soporta Aislamiento, Autenticación, Autorización y Cuotas
  • Almacenamiento persistente: Almacenamiento persistente de mensajes basado en Apache BookKeeper. Proporciona aislamiento a nivel de IO entre operaciones de escritura y lectura
  • Bibliotecas de clientes: Modelos de mensajería flexibles con APIs de alto nivel para Java, C++, Python y GO
  • Operabilidad: API de administración REST para aprovisionamiento, administración, herramientas y monitoreo. Despliega en metal desnudo o Kubernetes.

Como podemos ver, en su diseño, Apache Pulsar está abordando algunas de las principales debilidades de Apache Kafka como la Geo-replicación y su enfoque nativo de la nube.

Apache Pulsar proporciona soporte para el patrón pub/sub, pero también ofrece muchas capacidades que también lo colocan como un sistema de mensajería de cola tradicional con su concepto de temas exclusivos donde solo uno de los suscriptores recibirá el mensaje. También proporciona conceptos y características interesantes utilizados en otros sistemas de mensajería:

  • Temas de Carta Muerta: Para mensajes que no pudieron ser procesados por el consumidor.
  • Temas Persistentes y No Persistentes: Para decidir si deseas persistir tus mensajes o no durante la transición.
  • Espacios de Nombres: Para tener una distribución lógica de tus temas, de modo que una aplicación pueda agruparse en espacios de nombres como lo hacemos, por ejemplo, en Kubernetes para poder aislar algunas aplicaciones de las otras.
  • Failover: Similar a exclusivo, pero cuando el consumidor adjunto falla al procesar, otro toma la oportunidad de procesar los mensajes.
  • Compartido: Para poder proporcionar un enfoque de round-robin similar al sistema de mensajería de cola tradicional donde todos los suscriptores estarán adjuntos al tema, pero solo uno recibirá el mensaje, y distribuirá la carga entre todos ellos.
  • Suscripciones Multi-tema: Para poder suscribirse a varios temas usando una expresión regular (similar al enfoque de Subject de TIBCO Rendezvous, por ejemplo, en los años 90) que ha sido tan poderoso y popular.

Pero también, si requieres características de Apache Kafka, aún tendrás conceptos similares como temas particionados, temas compartidos por clave, y así sucesivamente. Así que tienes todo a tu disposición para elegir qué tipo de configuración funciona mejor para ti y tus casos de uso específicos, también tienes la opción de mezclar y combinar.

Arquitectura de Apache Pulsar

La Arquitectura de Apache Pulsar es similar a otros sistemas de mensajería comparables hoy en día. Como puedes ver en la imagen a continuación del sitio web de Apache Pulsar, estos son los componentes principales de la arquitectura:

Un nuevo concursante para destronar al Rey: Apache Pulsar
  • Brokers: Uno o más brokers manejan mensajes entrantes de productores, despachan mensajes a consumidores
  • Cluster de BookKeeper para almacenamiento persistente de gestión de mensajes
  • Cluster de ZooKeeper para propósitos de gestión.

Así que puedes ver que esta arquitectura también es bastante similar a la de Apache Kafka nuevamente con la adición de un nuevo concepto del Cluster de BookKeeper.

El Broker en Apache Pulsar son componentes sin estado que principalmente ejecutarán dos piezas

  • Servidor HTTP que expone una API REST para gestión y es utilizado por consumidores y productores para búsqueda de temas.
  • Servidor TCP usando un protocolo binario llamado dispatcher que se utiliza para todas las transferencias de datos. Por lo general, los mensajes se despachan desde un caché de libro mayor gestionado por razones de rendimiento. Pero también si este caché crece demasiado, interactuará con el cluster de BookKeeper por razones de persistencia.

Para soportar la Replicación Global (Geo-Replicación), los Brokers gestionan replicadores que siguen las entradas publicadas en la región local y las republican en las regiones remotas.

El Cluster de Apache BookKeeper se utiliza como almacenamiento persistente de mensajes. Apache BookKeeper es un sistema de registro de escritura anticipada (WAL) distribuido que gestiona cuándo los mensajes deben ser persistidos. También soporta escalado horizontal basado en la carga y soporte multi-log. No solo los mensajes son persistentes sino también los cursores que son la posición del consumidor para un tema específico (similar al offset en la terminología de Apache Kafka)

Finalmente, el Cluster de Zookeeper se utiliza en el mismo rol que Apache Kafka como un cluster de almacenamiento de configuración de metadatos para todo el sistema.

Hola Mundo usando Apache Pulsar

Veamos cómo podemos crear un caso rápido de «Hola Mundo» usando Apache Pulsar como protocolo, y para hacer eso, vamos a intentar implementarlo de manera nativa en la nube. Así que haremos un cluster de un solo nodo de Apache Pulsar en una instalación de Kubernetes y desplegaremos una aplicación productora usando la tecnología Flogo y una aplicación consumidora usando Go. Algo similar a lo que puedes ver en el diagrama a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar
Diagrama sobre el caso de prueba que estamos haciendo

Y vamos a intentar mantenerlo simple, así que solo usaremos docker puro esta vez. Así que, primero que nada, solo inicia el servidor de Apache Pulsar y para hacer eso usaremos el siguiente comando:

docker run -it -p 6650:6650 -p 8080:8080 --mount source=pulsardata,target=/pulsar/data --mount source=pulsarconf,target=/pulsar/conf apachepulsar/pulsar:2.5.1   bin/pulsar standalone

Y veremos una salida similar a esta:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora, necesitamos crear aplicaciones simples, y para eso, se utilizarán Flogo y Go.

Comencemos con el productor, y en este caso, usaremos la versión de código abierto para crear una aplicación rápida.

Primero que nada, solo usaremos la interfaz web (dockerizada) para hacer eso. Ejecuta el comando:

docker run -it -p 3303:3303 flogo/flogo-docker eula-accept

E instalamos una nueva contribución para habilitar la actividad del publicador de Pulsar. Para hacer eso, haremos clic en el botón «Instalar nueva contribución» y proporcionaremos la siguiente URL:

flogo install github.com/mmussett/flogo-components/activity/pulsar

Y ahora crearemos un flujo simple como puedes ver en la imagen a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora construiremos la aplicación usando el menú, ¡y eso es todo!

Un nuevo concursante para destronar al Rey: Apache Pulsar

Para poder ejecutar, solo lanza la aplicación como puedes ver aquí:

./sample-app_linux_amd64

Ahora, solo necesitamos crear el consumidor en Go-lang para poder hacer eso necesitamos instalar el paquete golang:

go get github.com/apache/pulsar-client-go/pulsar

Y ahora necesitamos crear el siguiente código:

package main
import (
 “fmt”
 “log”
 “github.com/apache/pulsar-client-go/pulsar”
)
func main() {
 client, err := pulsar.NewClient(pulsar.ClientOptions{URL: “pulsar://localhost:6650”})
 if err != nil {
 log.Fatal(err)
 }
defer client.Close()
channel := make(chan pulsar.ConsumerMessage, 100)
options := pulsar.ConsumerOptions{
 Topic: “counter”,
 SubscriptionName: “my-subscription”,
 Type: pulsar.Shared,
 }
options.MessageChannel = channel
consumer, err := client.Subscribe(options)
 if err != nil {
 log.Fatal(err)
 }
defer consumer.Close()
// Recibe mensajes del canal. El canal devuelve una estructura que contiene el mensaje y el consumidor de donde
 // se recibió el mensaje. No es necesario aquí ya que tenemos un solo consumidor, pero el canal podría ser
 // compartido entre múltiples consumidores también
 for cm := range channel {
 msg := cm.Message
 fmt.Printf(“Mensaje recibido msgId: %v — contenido: ‘%s’n”,
 msg.ID(), string(msg.Payload()))
consumer.Ack(msg)
}
}

Y después de ejecutar ambos programas, puedes ver la siguiente salida como puedes ver, pudimos comunicar ambas aplicaciones en un flujo sin esfuerzo.

Un nuevo concursante para destronar al Rey: Apache Pulsar

Este artículo es solo un punto de partida, y continuaremos hablando sobre cómo usar Apache Pulsar en tus arquitecturas. Si deseas echar un vistazo al código que hemos utilizado en este ejemplo, puedes encontrarlo aquí:

Estamos haciendo mal el enfoque del trabajo remoto

Estamos haciendo mal el enfoque del trabajo remoto

Sé que todos vivimos en una situación muy complicada que nos ha obligado a trabajar bajo un conjunto diferente de reglas, tratando de ponernos al día para ser productivos y trabajar como solíamos hacerlo, pero en modo de trabajo completamente remoto.

Para algunos de nosotros, esto ha sido bastante fácil porque las personas que trabajan en la industria tecnológica, en cierto nivel, ya trabajan de forma remota. Especialmente las personas, como yo, que trabajan para empresas internacionales con equipos de diferentes ubicaciones, zonas horarias, etc., estábamos acostumbrados a algunas partes del proceso. Las herramientas que usábamos como Slack, Zoom, Microsoft Team o Google Meet no eran algo nuevo para nosotros.

Además, estábamos acostumbrados a gestionar diferentes zonas horarias en nuestras reuniones para poder encontrar un momento adecuado para todos nosotros y poder compartir nuestra experiencia, etc. Así que parecía que íbamos a hacerlo perfectamente. Pero, ese no es el caso, y ha sido bastante para todos.

Solo déjame hacerte una pregunta: ¿Cómo está tu calendario ahora comparado con cómo estaba antes de la pandemia? ¿Cuántas horas tienes dedicadas solo a reuniones internas?

Si buscas un poco, incluso aquí en Medium, podrías encontrar muchos ejemplos sobre esto, también si escuchas el podcast ya estás al tanto de esta situación, cada uno de nosotros sabe sobre esa situación o simplemente la hemos experimentado nosotros mismos.

Parece que estábamos tratando de cambiar de las conversaciones habituales que teníamos en la oficina o con clientes a una conferencia en línea de unos 30 minutos para ponernos al día sobre cualquier otro tema que solíamos manejar en un café rápido en la oficina o simplemente una llamada rápida de 2 minutos.

Aunque la mayoría de nosotros hemos crecido en el mundo de la mensajería instantánea y no quiero hablar de las «nuevas cosas» si podemos llamar a WhatsApp, Telegram o Slack de esa manera, lo estábamos haciendo desde hace mucho tiempo, con AOL, ICQ o IRC.

Nos hemos entrenado en la comunicación asincrónica, pero parece que no aprendimos nada de ella. ¿Cuántas reuniones podrían ser reemplazadas por un hilo de correo electrónico? ¿Cuántas reuniones podrían ser reemplazadas por un canal de Slack?

Estamos acostumbrados a pensar de la otra manera, que la reunión es mucho más efectiva que un hilo de correo, y eso posiblemente sea cierto en algunos casos. Finalmente, tenemos a todos los interesados al mismo tiempo en el mismo lugar hablando sobre el mismo tema, lo que hace que el tiempo dedicado al asunto sea menor.

Pero el problema es cuando el número de conversaciones y temas crece exponencialmente porque también necesitamos trabajar en base a eso. Acabamos de escuchar a un colega mío hace unos días decir algo como esto:

  • Ahora tengo todo el día bloqueado con reuniones
  • Para cada una de estas reuniones, termino con tareas que necesito trabajar.
  • Pero basado en lo lleno que está mi calendario, tengo menos tiempo para trabajar en ellas
  • Cada día tengo más trabajo por hacer y no puedo cumplir con mis plazos

Y este ciclo se repite una y otra vez y empeora la situación cada día, porque es cierto que estamos pasando mucho tiempo en reuniones, pero no solo eso, también las reuniones son bastante más agotadoras, lo que te deja con menos energía para trabajar en esos puntos de acción que recopilaste.

Además, está el horario del calendario, ya que tienes tantas reuniones que no puedes bloquear parte de tu tiempo más productivo para trabajar en esos elementos, y te ves obligado a trabajar en ellos solo en los espacios libres que tienes disponibles entre todas esas reuniones. Eso significa que no estás eligiendo lo que vas a hacer ahora, solo necesitas luchar para poder encontrar algún espacio para poder despejar un poco tu escritorio de esas tareas pendientes.

Entonces, ¿parece que el correo electrónico y la comunicación asincrónica son la respuesta a todo lo que estamos sufriendo ahora? No. Probablemente no, pero al menos la comunicación asincrónica se centra en varios conceptos clave que son importantes tener en cuenta:

Tu tiempo es tan valioso como el de cualquier otro.

Cuando eres el organizador de una reunión y tienes una lista de asistentes, probablemente la importancia del tema a discutir no será la misma para cada uno de ellos. Probablemente para ti como organizador eres el más interesado en organizar esa reunión y obtener algún resultado de ella, pero otros probablemente tengan otras cosas importantes en sus mentes también a esos niveles.

Por lo tanto, la comunicación asincrónica permite a todos manejar sus prioridades y actuar sobre cada elemento según puedan basarse en su lista de prioridades.

La flexibilidad es la clave

No estoy obligado a estar a las 9 PM mi hora para poder reunirme con mis colegas de EE. UU. o mis colegas indios no están obligados a hacerlo al mismo tiempo conmigo. La comunicación asincrónica permite a cualquiera atender los asuntos importantes durante el tiempo en que son más productivos y también poder gestionar su propio horario y tiempo.

Para mí puede ser mejor responder a esas preguntas durante mis horas de la mañana o al revés, prefiero centrarme en algunas tareas al comienzo de mi día y usar la tarde para cubrir esas.

La gestión también es necesaria para las conversaciones asincrónicas

El problema de la comunicación asincrónica, como sabemos, es que las cosas pueden ralentizarse porque, basándonos en los temas anteriores, las preguntas podrían necesitar más tiempo para responderse, pero esto se puede resolver utilizando la gestión de esas conversaciones. Cosas como plazos, recordatorios, conversaciones de seguimiento 1 a 1 podrían ayudar a cerrar los temas. El rol es el mismo que el del organizador de la reunión en la reunión en línea, pero utilizando herramientas asincrónicas.

Malentendidos entre lo escrito y lo hablado

Usualmente decimos que es más fácil no captar el significado completo de la conversación en un mundo asincrónico porque carecemos de muchos recursos que tenemos en nuestra reunión en línea o incluso mejor en nuestras reuniones cara a cara. Y eso es cierto. Incluso, con emojis y demás, no tenemos la misma caja de herramientas que tenemos usando nuestra voz o nuestro cuerpo para hacerlo, pero esto no es algo que no se resuelva también en los otros tipos de comunicación. ¿Cuántas veces pensamos que lo que otra persona estaba diciendo usando su voz tiene un significado diferente comparado con lo que realmente intentó decir? Tratamos de resolver eso con las actas de la reunión y tratando de ponerlo por escrito para poder tener un entendimiento común. Y probablemente esto es algo que evitamos en la comunicación asincrónica porque esto ya está escrito, pero esto no debería evitarse ya que también nos ayuda a poner todo junto nuevamente en la misma página sobre nuestro entendimiento común.

Conclusión

Así que, espero que todos aprendamos de esta situación para tratar de mejorar la forma en que nos comunicamos entre nosotros para ser más productivos y más eficientes y también para mejorar nuestro propósito de gestión del tiempo. Y soy consciente de que probablemente esta no sea la situación para todos nosotros, pero esto es bastante común y es importante tenerlo en cuenta incluso si somos capaces de tener éxito durante este tsunami de reuniones que enfrentamos cada día.

Además, mis expectativas son que probablemente todo lo que aprendamos en esta situación pueda ayudarnos a estar más preparados para la próxima o para nuestro trabajo diario cuando volvamos a la nueva situación normal si esto va a suceder en algún momento.

Aplicaciones Flogo ejecutándose como Funciones de Azure

Aplicaciones Flogo ejecutándose como Funciones de Azure
Serverless ya está aquí. Lo sabemos. Incluso para las empresas que están comenzando su viaje en la nube moviéndose a plataformas basadas en contenedores, ya saben que serverless está en su visión futura al menos para algunos casos de uso específicos. Su simplicidad sin necesidad de preocuparse por nada relacionado con la plataforma solo se enfoca en el código y también la economía que viene con ellos hace que este modelo de computación sea un cambio de juego. La plataforma principal para este enfoque en este momento es AWS Lambda de Amazon, hemos leído y escuchado mucho sobre AWS Lambda, pero todas las plataformas van por ese camino. Google con sus Google Functions, Microsoft con su Azure. Esto no es solo una cosa para los proveedores de nube pública, también si estás operando en un enfoque de nube privada puedes usar este modo de implementación usando frameworks como KNative o OpenFaaS. Si necesitas más detalles al respecto, también tuvimos algunos artículos sobre este tema: Todas estas plataformas están actualizando y mejorando su opción para ejecutar cualquier tipo de código que desees en ellas, y esto es lo que Azure Function acaba de anunciar hace unas semanas, el lanzamiento de un enfoque de Custom Handler para soportar cualquier tipo de lenguaje que puedas imaginar: Y vamos a probar eso haciendo lo que más nos gusta ………..
…. ¡Ejecutar una aplicación Flogo sobre eso!
Así que, ¡empecemos a trabajar!
Aplicaciones Flogo ejecutándose como Funciones de Azure
Foto de Serghei Trofimov en Unsplash
Lo primero que necesitamos hacer es crear nuestra aplicación Flogo. Voy a usar Flogo Enterprise para hacer eso, pero puedes hacer lo mismo usando la versión de código abierto también: Vamos a crear una aplicación simple, solo un servicio REST de Hello World. Como puedes ver aquí:
Aplicaciones Flogo ejecutándose como Funciones de Azure
El archivo JSON de la aplicación Flogo puedes encontrarlo en el repositorio de GitHub que se muestra a continuación: Pero las configuraciones principales son las siguientes:
  • El servidor escuchará en el puerto especificado por la variable de entorno FUNCTIONS_HTTPWORKER_PORT
  • El servidor escuchará una solicitud GET en la URI /hello-world
  • La respuesta será bastante simple “Invocando una aplicación Flogo dentro de Azure Functions”
Ahora, que tenemos el archivo JSON, solo necesitamos comenzar a crear los artefactos necesarios para ejecutar una función de Azure. Necesitaremos instalar el paquete npm para las Azure Functions. Para hacer eso necesitamos ejecutar el siguiente comando:
npm i -g azure-functions-core-tools@3 --unsafe-perm true
Es importante tener el “@3” porque de esa manera hacemos referencia a la versión que tiene esta nueva lógica de Custom Handler para poder ejecutarla. Crearemos una nueva carpeta llamada flogo-func y ejecutaremos el siguiente comando dentro de esa carpeta:
func init --docker
Ahora deberíamos seleccionar node como el entorno de ejecución a usar y javascript como el lenguaje. Eso podría ser algo extraño porque no vamos a usar ni node, ni dotnet ni python ni powershell. Pero seleccionaremos eso para mantenerlo simple ya que solo intentamos enfocarnos en el enfoque de Docker para hacerlo. Después de eso solo necesitamos crear una nueva función, y para hacer eso necesitamos escribir el siguiente comando:
func new
En la interfaz basada en CLI que nos muestra las Azure Function Core Tools, solo necesitamos seleccionar HTTP trigger y proporcionar un nombre.
Aplicaciones Flogo ejecutándose como Funciones de Azure
En nuestro caso, usaremos hello-world como el nombre para mantenerlo similar a lo que definimos como parte de nuestra aplicación Flogo. Terminaremos con la siguiente estructura de carpetas:
Aplicaciones Flogo ejecutándose como Funciones de Azure
Ahora necesitamos abrir la carpeta que se ha creado y necesitamos hacer varias cosas:
  • Primero que todo, necesitamos eliminar el archivo index.js porque no necesitamos ese archivo ya que esta no será una función de node JS.
  • Necesitamos copiar el HelloWorld.json (nuestra aplicación Flogo) a la carpeta raíz de la función.
  • Necesitamos cambiar el archivo host.json al siguiente contenido:
{
  "version": "2.0",
  "httpWorker": {
     "description": {
            "arguments": ["-app"],
            "defaultExecutablePath": "engine-windows-amd64.exe",
            "defaultWorkerPath": "HelloWorld.json"
      }
   }
}
Ahora, necesitamos generar el engine-windows-amd64.exe y para poder hacer eso necesitamos ir al FLOGO_HOME en nuestra máquina e ir a la carpeta FLOGO_HOME/flogo/<VERSION>/bin y lanzar el siguiente comando:
./builder-windows-amd64.exe build
Y deberías obtener el engine-windows-amd64.exe como salida como puedes ver en la imagen a continuación:
Aplicaciones Flogo ejecutándose como Funciones de Azure
Ahora, solo necesitas copiar ese archivo dentro de la carpeta de tu función, y deberías tener la siguiente estructura de carpetas como puedes ver aquí:
Aplicaciones Flogo ejecutándose como Funciones de Azure
Y una vez que tengas eso, solo necesitas ejecutar tu función para poder probarla localmente:
func start
Después de ejecutar ese comando deberías ver una salida similar a la que se muestra a continuación:
Aplicaciones Flogo ejecutándose como Funciones de Azure
¡Solo me gustaría resaltar el tiempo de inicio para nuestra aplicación Flogo alrededor de 15 milisegundos! Ahora, solo necesitas probarlo usando cualquier navegador y solo ir a la siguiente URL:
http://localhost:7071/api/hello-world
Aplicaciones Flogo ejecutándose como Funciones de Azure
Este ha sido solo el primer paso en nuestro viaje, pero fueron los pasos necesarios para poder ejecutar nuestra aplicación Flogo como parte de tu entorno serverless alojado por la plataforma Microsoft Azure!

Para una visión completa del ecosistema TIBCO, consulta nuestra Guía de la plataforma de integración TIBCO.