Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación

Si estás familiarizado con el mundo de la Integración Empresarial, seguro que conoces Kafka, uno de los proyectos más famosos de la Fundación Apache en los últimos años, y también si estás en el mundo de la Integración conoces TIBCO Software, y algunos de nuestros productos insignia como TIBCO ActiveMatrix BusinessWorks para integración, TIBCO Cloud Integration como nuestro iPaaS, TIBCO AMX BPM, TIBCO BusinessEvents… y podría continuar esa lista una y otra vez.. 🙂

Pero, probablemente no sepas sobre TIBCO(R) Messaging — Apache Kafka Distribution. Esta es una de las partes de nuestra solución de mensajería global llamada TIBCO Messaging y está compuesta por varios componentes:

  • TIBCO Enterprise Message Service (también conocido como TIBCO EMS) es nuestro servidor compatible con JMS 2.0, uno de nuestros estándares de mensajería durante más de una década.
  • TIBCO FTL es nuestra solución de mensajería lista para la nube, utilizando un sistema de comunicación pub-sub directo, no centralizado y muy eficiente.
  • TIBCO(R) Messaging — Apache Kafka Distribution está diseñado para la distribución eficiente de datos y el procesamiento de flujos con la capacidad de conectar aplicaciones Kafka a otras aplicaciones de TIBCO Messaging impulsadas por TIBCO FTL(R), TIBCO eFTL(TM) o TIBCO Enterprise Message Service(TM).
  • TIBCO(R) Messaging — Eclipse Mosquitto Distribution incluye un broker MQTT ligero y una biblioteca C para el cliente MQTT en el paquete Core y un componente para conectar clientes MQTT a aplicaciones TIBCO FTL en el paquete Bridge.

Me gustaría hacer esta publicación completamente técnica, pero voy a dejar un poco de información sobre la versión del producto que podrías encontrar interesante, porque tenemos una Edición Comunitaria de toda esta solución de Mensajería que podrías usar tú mismo.

El software TIBCO Messaging está disponible en una edición comunitaria y una edición empresarial.

TIBCO Messaging — Community Edition es ideal para comenzar con TIBCO Messaging, para implementar proyectos de aplicaciones (incluidos esfuerzos de prueba de concepto) para pruebas, y para desplegar aplicaciones en un entorno de producción. Aunque la licencia comunitaria limita el número de procesos de producción, puedes actualizar fácilmente a la edición empresarial a medida que tu uso de TIBCO Messaging se expande. La edición comunitaria está disponible de forma gratuita, con las siguientes limitaciones y exclusiones:

● Los usuarios pueden ejecutar hasta 100 instancias de aplicaciones o 1000 instancias web/móviles en un entorno de producción.

● Los usuarios no tienen acceso al soporte de TIBCO, pero pueden usar TIBCO Community como recurso (http://community.tibco.com).

TIBCO Messaging — Enterprise Edition es ideal para todos los proyectos de desarrollo de aplicaciones, y para desplegar y gestionar aplicaciones en un entorno de producción empresarial. Incluye todas las características presentadas en este conjunto de documentación, así como acceso al soporte de TIBCO.

Puedes leer esa información aquí, pero, por favor, tómate tu tiempo también para leer nuestro anuncio oficial que puedes encontrar aquí.

Así que, este va a ser el primero de algunos posts sobre cómo integrar Kafka en el ecosistema habitual de TIBCO y diferentes tecnologías. Esta serie va a asumir que ya conoces Apache Kafka, y si no lo haces, por favor, echa un vistazo a la siguiente referencia antes de continuar:

Así que, ahora vamos a comenzar instalando esta distribución en nuestra máquina, en mi caso voy a usar un objetivo basado en UNIX, pero tienes este software disponible para MacOS X, Windows o cualquier sistema operativo que estés usando.

El proceso de instalación es bastante simple porque la distribución se basa en las distribuciones de Linux más habituales, por lo que te proporciona un paquete deb, un paquete rpm o incluso un paquete tar para que puedas usar lo que necesites para tu distribución actual. En mi caso, como estoy usando CentOS, he optado por el paquete rpm y todo va muy bien.

Y después de eso, he instalado en mi carpeta /opt/tibco una distribución de Kafka bastante usual, así que para iniciarla necesitamos iniciar primero el servidor zookeeper y luego el servidor kafka en sí. Y eso es todo. ¡¡Todo está funcionando!!

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Distribución de Apache Kafka en funcionamiento

Mmmm.. Pero, ¿cómo puedo estar seguro de ello? Kafka no proporciona una GUI para monitorear o supervisarlo, pero hay un montón de herramientas por ahí para hacerlo. En mi caso voy a usar Kafka Tool porque no necesita otros componentes como Kafka REST y demás, pero ten en cuenta que hay otras opciones con una interfaz de usuario más «bonita», pero esta va a hacer el trabajo perfectamente.

Así que, después de instalar Kafka Tool, solo proporcionamos los datos de dónde está escuchando zookeeper (si mantienes todo por defecto, va a estar escuchando en el 2181) y la versión de Kafka que estamos usando (en este caso es la 1.1), y ahora puedes estar seguro de que todo está en funcionamiento y trabajando como se espera:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Kafka Tool podría usarse para monitorear tus brokers de Kafka

Así que, ahora vamos a hacer solo una prueba rápida usando nuestro producto de integración insignia TIBCO AMX BusinessWorks que tiene un complemento de Kafka, para que puedas comunicarte con este nuevo servidor que acabamos de lanzar. Esto va a ser solo un Hola Mundo con la siguiente estructura:

  • El Proceso A va a enviar un ¡Hola! al Proceso B.
  • El Proceso B va a recibir ese mensaje y lo imprimirá en un registro.

Los procesos se van a desarrollar de la siguiente manera:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Proceso de Prueba del Remitente de Kafka
Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Proceso de Prueba del Receptor de Kafka

Y este es el resultado que obtenemos después de ejecutar ambos procesos:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Ejecución correcta usando TIBCO Business Studio

Y podemos ver que el tema de ejemplo que usamos para hacer la comunicación y la partición predeterminada se ha creado por defecto usando Kafka Tool:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
El tema se ha creado bajo demanda

Como puedes ver, es muy fácil y directo tener todo configurado de manera predeterminada. Después de eso, continuamos profundizando en este nuevo componente en el mundo de TIBCO.

¿Quieres ser un mejor administrador de sistemas? ¡Aprende a programar!

¿Quieres ser un mejor administrador de sistemas? ¡Aprende a programar!

Estamos viviendo tiempos en los que se escucha hablar de DevOps en todas partes, cómo se deben eliminar las barreras entre estos dos mundos como Desarrollo y Operaciones, pero todos estos discursos se basan en el punto de vista del desarrollador y del negocio, pero nunca desde el punto de vista del Administrador.

Venimos de una época en la que los equipos de operaciones estaban divididos en varios niveles de escalamiento donde cada nivel debía estar menos poblado y más capacitado que el anterior. Así que tenemos un primer nivel con personas con conocimientos básicos que trabajan 24×7 cubriendo cualquier tipo de incidente que pudiera ocurrir. En caso de que ocurra algo, intentan resolverlo con el conocimiento (generalmente más documento que conocimiento…) y en caso de que algo no funcione como se espera, lo derivan a un segundo nivel con más conocimiento sobre la plataforma donde probablemente sean un equipo de guardia para manejar eso y vamos a tener tantos niveles como se desee. ¿Cómo encaja todo esto con DevOps, CI & CD y demás…? Ok, bastante fácil…

El Nivel 1 hoy en día no existe: Las herramientas de monitoreo, CI & CD y demás, hacen innecesario este primer nivel, porque si puedes crear un documento con los pasos a seguir cuando algo sale mal, estás escribiendo código pero dentro de un Documento, así que nadie te detiene para entregar una herramienta automatizada para hacer eso. Entonces, en inglés sencillo, los operadores de primer nivel de ayer ahora son scripts. Pero todavía necesitamos nuestros equipos de operaciones, nuestro servicio 24×7 y demás… seguro, porque de vez en cuando (más a menudo de lo que nos gustaría) sucede algo fuera de lo normal y eso necesita ser gestionado.

Entonces, la automatización nunca va a reemplazar a L2 & L3, así que vas a necesitar personas capacitadas para manejar incidentes, tal vez podrías tener un equipo más pequeño a medida que automatizas más procesos, pero nunca puedes deshacerte de la parte del conocimiento, ese no es el punto. Aquí, podemos discutir si este equipo podría ser el equipo de desarrollo o un equipo mixto de ambos mundos, y eso podría ser correcto. Cualquier enfoque es válido con esto. Así que, hemos implementado todos nuestros nuevos y elegantes procesos de CI & CD, herramientas de monitoreo y las plataformas parecen estar funcionando sin ninguna ayuda y soporte hasta que algo realmente extraño sucede. Entonces, ¿qué hacer con esa gente? Por supuesto, enseñar las habilidades para ser valiosos como L2 & L3, así que tienen que ser mejores operadores / administradores de sistemas / cualquier palabra que más te guste. ¿Y cómo pueden hacer eso?

Como dije antes, estamos pasando de un mundo donde los equipos de Operaciones trabajan basados en procedimientos escritos y tienen su imaginación limitada para mirar más allá de su protocolo aprobado, pero eso ya no es la forma en que L2 & L3 trabaja. Cuando te enfrentas a un incidente, el procedimiento es bastante similar a cazar un error, o si escapamos del mundo de TI, es como resolver un crimen. ¿Cuáles son las similitudes entre resolver un crimen y gestionar una plataforma? Ok, enumerémoslas:

  1. – ¿Qué? — ¿Qué le pasó a mi sistema? Comienzas con las consecuencias del problema, probablemente un rastro de error en el registro, probablemente otro sistema llamándote porque tu sistema no está disponible… Ok, aquí lo tienes, este es tu cadáver.
  2. ¿Cuándo? — Cuando sabes que algo salió mal, comienzas a encontrar la causa raíz, y comienzas a buscar rastros de registros para encontrar el primero que generó el problema, incluso descartas los rastros de registros que son consecuencias del primero, y tratas de encontrar cuándo todo comenzó a fallar. Para hacer eso, necesitas buscar evidencias sobre el fallo y demás… Así que ahora, estás investigando, buscando evidencias, hablando con testigos (sí, tus rastros de registros son los testigos más confiables que vas a encontrar, rara vez mienten. Es como si estuvieran en el estrado frente a un juez)
  3. ….. ¿Y ahora? ¿Cómo & Por qué? — Y ese es el punto difícil, cómo & por qué, son los siguientes pasos como lo haces en una caza de errores, pero la principal diferencia aquí, es cuando el equipo de desarrollo está cazando un error, pueden correlacionar las evidencias que recopilan en el paso dos, con el código fuente que construyeron para saber cómo y por qué todo salió mal… Pero en tu caso, como administrador de sistemas probablemente te enfrentas a un sistema propietario o no tienes acceso al código o cómo enfrentarlo incluso si fuera de código abierto… y probablemente ni siquiera tienes acceso al código fuente del equipo de desarrollo… Entonces, ¿cómo resuelves esto?
  • Ok, probablemente la mayoría de ustedes están pensando algo como: Conocer el producto y tu plataforma. Ser un operador certificado del producto que estás gestionando, conocer todo el manual del producto, y demás… Y eso podría ser útil, porque eso significa que sabes mejor cómo funcionan las cosas a un nivel alto… pero… seamos claros: ¿Alguna vez encontraste en un curso de certificación, o examen o documentación o lo que sea, información de tan bajo nivel que podría ayudarte en el caso específico que estás enfrentando…? En caso de que la respuesta a mi pregunta sea sí, tal vez no estás enfrentando un error difícil, sino un error de configuración principal…
  • Entonces… ¿qué podemos hacer? Como dice el título: Aprende a programar. Pero probablemente estás pensando, ¿cómo puede estar relacionado saber programar con cazar un error cuando no tengo acceso al código ni siquiera para echar un vistazo? Y… ¿aprender a programar en qué lenguaje? ¿en los componentes que se gestionan en mi plataforma? ¿en java? ¿en Go? ¿En node.js? ¿En C++? ¿En x86? ¿Todos ellos? Ok… tienes razón, tal vez la pregunta no es simplemente aprender a programar, pero esa es la idea: Aprende a programar, aprende a diseñar, aprende a arquitectar soluciones… ¿Quieres saber por qué? Ok, veamos. En toda mi carrera he estado trabajando con muchos productos diferentes, diferentes enfoques, diferentes paradigmas, diferentes lenguajes base, todo diferente, pero todos comparten una cosa, que todos los sistemas hoy en día comparten: Están construidos por personas.

Sí, cada pieza de software, cada servidor, cada programa, cada página web, cada todo está construido por una persona, como tú y como yo…

Si piensas que todos los productos y piezas de software están hechos por genios, estás equivocado. ¿Eres consciente de cuántas piezas de software están disponibles? ¿Crees que existen tantos genios en todo el mundo? Por supuesto, son personas capacitadas y algunas de ellas son realmente brillantes, y es por eso que generalmente siguen el sentido común para arquitectar, diseñar y construir sus soluciones.

Y ese es el punto que podemos usar para resolver nuestro caso y resolver nuestro asesinato, porque con las evidencias que tenemos y las ideas de construir soluciones, tenemos que pensar: Ok, ¿cómo habría construido esto si yo fuera el encargado de esta pieza de software? Y vas a ver que tienes razón casi todo el tiempo…

Pero me falta otro punto importante que dejamos sin respuesta antes… ¿Aprender a programar en qué lenguaje? En el que tu plataforma está basada: Si estás gestionando una plataforma basada en OSGi, aprende mucho sobre desarrollo en java y desarrollo y arquitectura OSGI, vas a encontrar que todos los problemas son lo mismo… Una dependencia entre dos módulos OSGI, y una sentencia Import-package que debería estar allí… la otra en la que alguien carga los paquetes o alguna sentencia Export-Package que debería estar allí…

Lo mismo, si estás ejecutando una aplicación de escritorio .NET, aprende mucho sobre desarrollo .NET y serás lo suficientemente capacitado para no necesitar un documento para saber qué hacer, porque sabes cómo debería funcionar esto… y eso te llevará a por qué está sucediendo esto.

Y con todas esas preguntas respondidas, solo queda una cosa. Necesitas poner en marcha un plan para mitigar o resolver el problema, para que el problema nunca vuelva a suceder. Y con todo eso, presentamos nuestra orden de arresto al incidente.

Finalmente estás en la parte del juicio, cuando presentas tus evidencias, tu teoría sobre cómo y por qué sucedió esto (el motivo :P) y deberías poder convencer al jurado (el cliente) más allá de una duda razonable, y finalmente terminas con la sentencia que pediste para el error/fallo/incidente que es el plan de mitigación, y tu plataforma es un mundo mejor con un incidente menos caminando libre.

Lo que describimos aquí es cómo hacer un análisis post-mortem y probablemente para la mayoría de ustedes esto es algo diario que hacen, pero todo el tiempo en los clientes cuando trabajamos en colaboración con el equipo de operaciones, notamos que no siguen este enfoque, por lo que están atascados porque no tienen un documento que nos diga cómo hacer (paso a paso) en estas situaciones extrañas.

Así que, me gustaría terminar con un himno para resumir todo esto: Cuando te enfrentas a un incidente: «Mantén la calma, aplica el sentido común y comienza a leer los rastros de registros!!»

Microservicios en el mundo SOA y las integraciones empresariales

Microservicios en el mundo SOA y las integraciones empresariales

Microservicios

En los últimos dos años, todos están hablando de Microservicios y quieren aplicarlos en cualquier lugar.

Es la misma historia con los contenedores y docker (y antes lo fue con el Enfoque en la Nube e incluso antes con SOA, BPM, EDA…).

Cualquier cosa que tenga suficiente ruido de la comunidad, resulta en que todos los clientes (y «todo tipo» de clientes) intentan aplicar la «nueva moda» sin importar qué. Debido a eso, todos los Integradores de Sistemas intentan buscar un lugar donde encaje (o incluso si no encaja…) para aplicar esta «nueva cosa» porque es «lo que tenemos que hacer ahora». Es como el negocio de la moda. ¿Qué está de moda hoy? ¿Eso? Ok, hagámoslo.

No me malinterpreten, esta publicación no va a estar en contra de los microservicios porque me encanta el concepto y me encantan las ventajas que trae consigo y lo bueno que es ir hacia este tipo de modelo.

Pero, me gustaría hablar sobre algunos aspectos específicos que no estaban en la charla común y la experiencia con este tipo de tecnología. Este patrón, modelo o paradigma, es genial y es un éxito comprobado.

Puedes ver cualquier charla de Adrian Cockcroft sobre su experiencia en Netflix para estar seguro de que esto no es solo una palabra de moda (#NoSoloUnaPalabraDeModa) pero, ¿es capaz de usarse en todos los casos?

Cuando usualmente vemos una charla sobre microservicios, siempre es la misma historia: microservicios vs aplicación monolítica, especialmente aplicaciones web siguiendo algún tipo de patrón cliente-servidor o incluso un patrón MVC o algo similar. Y para ese tipo de aplicaciones es genial, simple y claro.

Pero, ¿qué pasa con las Aplicaciones Empresariales donde en las últimas décadas seguimos un Enfoque SOA: ¿Es aplicable aquí?

Por supuesto, hay muchas diferencias entre el Enfoque de Microservicios (el puro, el que Martin Fowler usó en su artículo) y el Paradigma SOA. No comparten los mismos principios, pero al final están más cerca que los concursantes habituales que ves en todas las charlas (aplicación web monolítica vs microservicios).

Los microservicios hablan de romper el monolito y eso es fácil para una aplicación web, pero ¿qué pasa con una Arquitectura SOA? En este caso, ni siquiera es posible seguir ese camino.

Si alguna vez has trabajado en Integración Empresarial, has visto algunos silos y es obligatorio no tocarlos y mantenerlos de esa manera. Es algo que no está abierto a discusión.

Existen diferentes razones para esa decisión: Podría ser porque son tan antiguos que nadie sabe sobre ellos, sobre cómo hacen lo que hacen, o podría ser porque son tan críticos que nadie va a seguir ese camino o solo porque no hay un caso de negocio para justificar reemplazar este tipo de silos.

Entonces, ¿qué pasa ahora? ¿Podemos seguir el camino de los Microservicios o deberíamos quedarnos con el enfoque SOA? Los microservicios no solo se tratan de romper los silos, pero es algo muy importante, así que no, no podemos seguir el camino de los Microservicios para Integraciones Empresariales, pero podemos reunir todas las otras ventajas que incluyen los Microservicios e intentar aplicarlas a nuestra capa de integración (ahora, no estaríamos hablando de Arquitectura SOA porque la mayoría de estas ventajas están en contra de algunos de los principios de SOA).

La Ola de Microservicios también se trata de Ágil y DevOps, de ser más rápido, de estar automatizado, de ser mejor, de reducir tu tiempo de comercialización. Se trata de la nube (no en el término de nube pública, sino en el término de no estar atado a tu infraestructura). Se trata de todas esas cosas también.

Entonces, los Microservicios se tratan de tantas cosas que podríamos aplicar incluso si no pudiéramos ir al 100% sobre esto. Hay varios nombres para este enfoque como Arquitectura Basada en Servicios, pero me gusta mucho más el enfoque de micro-servicios (con guion en el medio, hablando de servicios que son micro) porque creo que explica mejor el enfoque.

Así que, nos gustaría hacer servicios más pequeños para ser más flexibles, para poder aplicar todas estas cosas de DevOps, y allí podemos aplicar todas las otras cosas relacionadas con la Ola de Microservicios.

Y eso no es algo nuevo, eso no es algo que esté comenzando ahora o en los últimos años.

Es algo que he visto desde el principio en mi carrera (hace una década) cuando comencé a trabajar con TIBCO AMX BusinessWorks que te da la oportunidad de decidir tú mismo el alcance de tus servicios y dependiendo de las necesidades podrías crear «Aplicaciones Empresariales» o podrías optar por «Servicios Empresariales» o «Servicios Pequeños» que trabajaban juntos para hacer el trabajo.

Y ese camino ha sido seguido no solo por TIBCO sino por algunas otras compañías también, con la evolución del concepto ESB para adaptarse a la nueva era, que eran más como PaaS donde te permitían ejecutar tus servicios en un mundo «algo» containerizado.

Por ejemplo, la Plataforma TIBCO AMX (desde 2006) podías desarrollar tus servicios y aplicaciones usando varios tipos de lenguajes y opciones como el Editor Gráfico para Mediaciones o Java, C/C++, .NET, Spring y así sucesivamente usando el estándar SCA y ejecutándose en una plataforma elástica basada en OSGI donde puedes gestionarlos a todos de la misma manera (suena similar, ¿verdad? 🙂 )

¿Qué pasa con la reutilización? El paradigma SOA tiene estándares muy altos para asegurar la reutilización de los servicios y el registro y repositorio empresarial… y el microservicio está (al principio) en contra de la reutilización, deberías duplicar en lugar de reutilizar para poder ser autónomo y más libre. Pero, los últimos avances en Microservicios incluyen una capa de Orquestación, cosas como Conductor que están siguiendo el camino de la reutilización y la orquestación. Así que, podemos encontrar un lugar intermedio, cuando necesitas reutilizar si es posible pero no detener tu agilidad para asegurar el 100% de reutilización de las oportunidades disponibles. El tiempo de comercialización es el factor crítico aquí para todos ahora, y todos los «principios» tienen que adaptarse a eso.

¿Qué pasa con DevOps y la Nube? No hay problema, aquí podrías incluir las mismas técnicas para este caso como lo estabas haciendo anteriormente. Infraestructura como Código, Contenedores, Integración y Despliegue Continuo, etc.

¿Qué pasa con los estándares ágiles REST/JSON y demás? Tampoco hay problemas aquí.

En resumen, puedes adoptar e implementar la mayoría de los sabores y componentes del movimiento de Microservicios, pero también necesitas comprometerte con otros, y no vas a usar «Microservicios puros», vas a usar otra cosa, y eso no es malo. Siempre tienes que adaptar cualquier paradigma a tu caso de uso específico.