Mejora tu estrategia de implementación con Canarying en Kubernetes

Ahorra tiempo y dinero en tu plataforma de aplicaciones implementando aplicaciones de manera diferente en Kubernetes.

Foto por Jason Leung en Unsplash

Venimos de una época en la que implementamos una aplicación utilizando un proceso aparente y lineal. La forma tradicional es más o menos así:

  • Esperar hasta un fin de semana o algún momento en que la carga sea baja y el negocio pueda tolerar cierta indisponibilidad del servicio.
  • Programamos el cambio y avisamos a todos los equipos involucrados para que estén listos para gestionar el impacto.
  • Implementamos la nueva versión y tenemos a todos los equipos durante la prueba funcional que necesitan hacer para asegurarse de que funciona bien, y esperamos a que ocurra la carga real.
  • Monitoreamos durante las primeras horas para ver si ocurre algo malo, y en caso de que sí, establecemos un proceso de reversión.
  • Tan pronto como todo va bien, esperamos hasta el próximo lanzamiento en 3-4 meses.

Pero esto ya no es válido. El negocio exige que TI sea ágil, cambie rápidamente y no pueda permitirse hacer ese tipo de esfuerzo de recursos cada semana o, peor aún, cada día. ¿Crees que es posible reunir a todos los equipos cada noche para implementar los últimos cambios? No es factible en absoluto.

Entonces, la tecnología avanza para ayudarnos a resolver mejor ese problema, y aquí es donde Canarying vino a ayudarnos.

Introducción a los Despliegues Canary

Los despliegues canary (o simplemente Canarying, como prefieras) no son algo nuevo, y mucha gente ha estado hablando mucho sobre ello:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL0NhbmFyeVJlbGVhc2UuaHRtbCIsImltYWdlX2lkIjotMSwiaW1hZ2VfdXJsIjoiaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2xvZ28tc3EucG5nIiwidGl0bGUiOiJibGlraTogQ2FuYXJ5UmVsZWFzZSIsInN1bW1hcnkiOiJBIGNhbmFyeSByZWxlYXNlIG9jY3VycyB3aGVuIHlvdSByb2xsIG91dCBhIG5ldyB2ZXJzaW9uIG9mIHNvbWUgc29mdHdhcmUgdG8gYSBzbWFsbCBzdWJzZXQgb2YgeW91ciB1c2VyIGJhc2UgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgYmVmb3JlIHlvdSBtYWtlIGl0IGF2YWlsYWJsZSB0byBldmVyeW9uZS4iLCJ0ZW1wbGF0ZSI6InVzZV9kZWZhdWx0X2Zyb21fc2V0dGluZ3MifQ==»]

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9zcmUuZ29vZ2xlL3dvcmtib29rL2NhbmFyeWluZy1yZWxlYXNlcy8iLCJpbWFnZV9pZCI6LTEsImltYWdlX3VybCI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9GTGUwZ0ZXczN6OVpETGgtUjV0UG1YLWVFWTZHaDZfWDNYeGotZm9Bc2lyaUhnM1lYN29rR1doNEUwdFMzd2ViNWthR2t2ak5pYjl0dHdZVnc4dnJ5VjZsd2p5NHpQN2MxcE9ZPXMxMDQzIiwidGl0bGUiOiJHb29nbGUgLSBTaXRlIFJlbGlhYmlsaXR5IEVuZ2luZWVyaW5nIiwic3VtbWFyeSI6IlJlbGVhc2UgZW5naW5lZXJpbmcgaXMgYSB0ZXJtIHdlIHVzZSB0byBkZXNjcmliZSBhbGwgdGhlIHByb2Nlc3NlcyBhbmQgYXJ0aWZhY3RzIHJlbGF0ZWQgdG8gZ2V0dGluZyBjb2RlIGZyb20gYSByZXBvc2l0b3J5IGludG8gYSBydW5uaW5nIHByb2R1Y3Rpb24gc3lzdGVtLiBBdXRvbWF0aW5nIHJlbGVhc2VzIGNhbiBoZWxwIGF2b2lkIG1hbnkgb2YgdGhlIHRyYWRpdGlvbmFsIHBpdGZhbGxzIGFzc29jaWF0ZWQgd2l0aCByZWxlYXNlIGVuZ2luZWVyaW5nOiB0aGUgdG9pbCBvZiByZXBldGl0aXZlIGFuZCBtYW51YWwgdGFza+KApiIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

Ha estado aquí por algún tiempo, pero antes no era ni fácil ni práctico implementarlo. Básicamente se basa en implementar la nueva versión en producción, pero aún manteniendo el tráfico apuntando a la versión antigua de la aplicación y solo comienzas a desviar parte del tráfico a la nueva versión.

Representación gráfica de un lanzamiento canary en un entorno de Kubernetes

Basado en ese pequeño subconjunto de solicitudes, monitoreas cómo se desempeña la nueva versión en diferentes niveles, nivel funcional, nivel de rendimiento, etc. Una vez que te sientes cómodo con el rendimiento que está proporcionando, simplemente desvías todo el tráfico a la nueva versión y deprecias la versión antigua.

Eliminación de la versión antigua después de que todo el tráfico ha sido desviado a la nueva versión implementada.

Los beneficios que vienen con este enfoque son enormes:

  • No necesitas un gran entorno de pruebas como antes porque puedes hacer algunas de las pruebas con datos reales en producción sin afectar tu negocio y la disponibilidad de tus servicios.
  • Puedes reducir el tiempo de comercialización y aumentar la frecuencia de los despliegues porque puedes hacerlo con menos esfuerzo y personas involucradas.
  • Tu ventana de despliegue se ha extendido mucho ya que no necesitas esperar una ventana de tiempo específica, y debido a eso, puedes implementar nuevas funcionalidades con más frecuencia.

Implementando Despliegue Canary en Kubernetes

Para implementar Despliegue Canary en Kubernetes, necesitamos proporcionar más flexibilidad en cómo se enruta el tráfico entre nuestros componentes internos, que es una de las capacidades que se extienden al usar un Service Mesh.

Ya discutimos los beneficios de usar un Service Mesh como parte de tu entorno, pero si deseas volver a echar un vistazo, por favor consulta este artículo:

[visual-link-preview encoded=»eyJ0eXBlIjoiaW50ZXJuYWwiLCJwb3N0Ijo5NiwicG9zdF9sYWJlbCI6IlBvc3QgOTYgLSBUZWNobm9sb2d5IHdhcnM6IEFQSSBNYW5hZ2VtZW50IFNvbHV0aW9uIHZzIFNlcnZpY2UgTWVzaCIsInVybCI6IiIsImltYWdlX2lkIjoyNTUzLCJpbWFnZV91cmwiOiJodHRwOi8vYWxleGFuZHJlLXZhenF1ZXouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzAxL2ltZ182MWVkMTNmNDVmNDRhLmpwZyIsInRpdGxlIjoiVGVjaG5vbG9neSB3YXJzOiBBUEkgTWFuYWdlbWVudCBTb2x1dGlvbiB2cyBTZXJ2aWNlIE1lc2giLCJzdW1tYXJ5IjoiU2VydmljZSBNZXNoIHZzLiBBUEkgTWFuYWdlbWVudCBTb2x1dGlvbjogaXMgaXQgdGhlIHNhbWU/IEFyZSB0aGV5IGNvbXBhdGlibGU/IEFyZSB0aGV5wqByaXZhbHM/IFBob3RvIGJ5IEFsdmFybyBSZXllcyBvbsKgVW5zcGxhc2ggV2hlbiB3ZSB0YWxrIGFib3V0IGNvbW11bmljYXRpb24gaW4gYSBkaXN0cmlidXRlZCBjbG91ZC1uYXRpdmUgd29ybGQgYW5kIGVzcGVjaWFsbHkgd2hlbiB3ZSBhcmUgdGFsa2luZyBhYm91dCBjb250YWluZXItYmFzZWQgYXJjaGl0ZWN0dXJlcyBiYXNlZCBvbiBLdWJlcm5ldGVzIHBsYXRmb3JtIGxpa2UgQUtTLCBFS1MsIE9wZW5zaGlmdCwgYW5kIHNvIG9uLCB0d28gdGVjaG5vbG9naWVzIGdlbmVyYXRlIGEgbG90IFsmaGVsbGlwO10iLCJ0ZW1wbGF0ZSI6InVzZV9kZWZhdWx0X2Zyb21fc2V0dGluZ3MifQ==»]

Tenemos varios componentes tecnológicos que pueden proporcionar esas capacidades, pero así es como podrás crear las rutas de tráfico para implementar esto. Para ver cómo puedes echar un vistazo al siguiente artículo sobre una de las opciones predeterminadas que es Istio:

[visual-link-preview encoded=»eyJ0eXBlIjoiaW50ZXJuYWwiLCJwb3N0IjoxMjMsInBvc3RfbGFiZWwiOiJQb3N0IDEyMyAtIEludGVncmF0aW5nIElzdGlvIHdpdGggQldDRSBBcHBsaWNhdGlvbnMiLCJ1cmwiOiIiLCJpbWFnZV9pZCI6Mjc4NCwiaW1hZ2VfdXJsIjoiaHR0cDovL2FsZXhhbmRyZS12YXpxdWV6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8wMS9pbWdfNjFlZDE0NjdlMzYxZi5wbmciLCJ0aXRsZSI6IkludGVncmF0aW5nIElzdGlvIHdpdGggQldDRSBBcHBsaWNhdGlvbnMiLCJzdW1tYXJ5IjoiSW50cm9kdWN0aW9uIFNlcnZpY2VzIE1lc2ggaXMgb25lIHRoZSDigJxncmVhdGVzdCBuZXcgdGhpbmfigJ0gaW4gb3VyIFBhYVMgZW52aXJvbm1lbnRzLiBObyBtYXR0ZXIgaWYgeW914oCZcmUgd29ya2luZyB3aXRoIEs4UywgRG9ja2VyIFN3YXJtLCBwdXJlLWNsb3VkIHdpdGggRUtTIG9yIEFXUywgeW914oCZdmUgaGVhcmQgYW5kIHByb2JhYmx5IHRyaWVkIHRvIGtub3cgaG93IGNhbiBiZSB1c2VkIHRoaXMgbmV3IHRoaW5nIHRoYXQgaGFzIHNvIG1hbnkgYWR2YW50YWdlcyBiZWNhdXNlIGl0IHByb3ZpZGVzIGEgbG90IG9mIG9wdGlvbnMgaW4gaGFuZGxpbmcgWyZoZWxsaXA7XSIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

Pero poder enrutar el tráfico no es suficiente para implementar un enfoque completo de despliegue canary. También necesitamos poder monitorear y actuar en base a esas métricas para evitar la intervención manual. Para hacer esto, necesitamos incluir diferentes herramientas para proporcionar esas capacidades:

Prometheus es la opción de facto para monitorear cargas de trabajo implementadas en el entorno de Kubernetes, y aquí puedes obtener más información sobre cómo ambos proyectos trabajan juntos.

[visual-link-preview encoded=»eyJ0eXBlIjoiaW50ZXJuYWwiLCJwb3N0IjoxMDksInBvc3RfbGFiZWwiOiJQb3N0IDEwOSAtIEt1YmVybmV0ZXMgU2VydmljZSBEaXNjb3ZlcnkgZm9yIFByb21ldGhldXMiLCJ1cmwiOiIiLCJpbWFnZV9pZCI6MjYyNCwiaW1hZ2VfdXJsIjoiaHR0cDovL2FsZXhhbmRyZS12YXpxdWV6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8wMS8xMVJubElVVHB0UjBEMkpMUE1GeE9Qdy5wbmciLCJ0aXRsZSI6Ikt1YmVybmV0ZXMgU2VydmljZSBEaXNjb3ZlcnkgZm9yIFByb21ldGhldXMiLCJzdW1tYXJ5IjoiSW4gcHJldmlvdXMgcG9zdHMsIHdlIGRlc2NyaWJlZCBob3cgdG8gc2V0IHVwIFByb21ldGhldXMgdG8gd29yayB3aXRoIHlvdXIgVElCQ08gQnVzaW5lc3NXb3JrcyBDb250YWluZXIgRWRpdGlvbiBhcHBzLCBhbmQgeW91IGNhbiByZWFkIG1vcmUgYWJvdXQgaXQgaGVyZS4gSW4gdGhhdCBwb3N0LCB3ZSBkZXNjcmliZWQgdGhhdCB0aGVyZSB3ZXJlIHNldmVyYWwgd2F5cyB0byB1cGRhdGUgUHJvbWV0aGV1cyBhYm91dCB0aGUgc2VydmljZXMgdGhhdCByZWFkeSB0byBtb25pdG9yLiBBbmQgd2UgY2hvb3NlIHRoZSBtb3N0IHNpbXBsZSBhdCB0aGF0IFsmaGVsbGlwO10iLCJ0ZW1wbGF0ZSI6InVzZV9kZWZhdWx0X2Zyb21fc2V0dGluZ3MifQ==»]

Y para gestionar el proceso general, puedes tener una herramienta de Despliegue Continuo para poner algo de gobernanza alrededor de eso usando opciones como Spinnaker o usando alguna de las extensiones para las herramientas de Integración Continua como GitLab o GitHub:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9zcGlubmFrZXIuaW8vZG9jcy9ndWlkZXMvdXNlci9jYW5hcnkvIiwiaW1hZ2VfaWQiOi0xLCJpbWFnZV91cmwiOiJodHRwczovL3NwaW5uYWtlci5pby9pbWFnZXMvY2RmLWNvbG9yLnBuZyIsInRpdGxlIjoiVXNpbmcgU3Bpbm5ha2VyIGZvciBBdXRvbWF0ZWQgQ2FuYXJ5IEFuYWx5c2lzIiwic3VtbWFyeSI6IkF1dG9tYXRlZCBjYW5hcnkgYW5hbHlzaXMgbGV0cyB5b3UgcGFydGlhbGx5IHJvbGwgb3V0IGEgY2hhbmdlIHRoZW4gZXZhbHVhdGUgaXQgYWdhaW5zdCB0aGUgY3VycmVudCBkZXBsb3ltZW50IHRvIGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UuIiwidGVtcGxhdGUiOiJ1c2VfZGVmYXVsdF9mcm9tX3NldHRpbmdzIn0=»]

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvdXNlci9wcm9qZWN0L2NhbmFyeV9kZXBsb3ltZW50cy5odG1sIiwiaW1hZ2VfaWQiOjAsImltYWdlX3VybCI6IiIsInRpdGxlIjoiIiwic3VtbWFyeSI6IiIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

Resumen

En este artículo, cubrimos cómo podemos evolucionar un modelo de despliegue tradicional para mantener el ritmo de la innovación que los negocios requieren hoy y cómo las técnicas de despliegue canary pueden ayudarnos en ese viaje, y los componentes tecnológicos necesarios para configurar esta estrategia en tu propio entorno.

Promtail: El eslabón perdido entre registros y métricas para tu plataforma de monitoreo

Promtail es la solución cuando necesitas proporcionar métricas que solo están presentes en los rastros de registro del software que necesitas monitorear para proporcionar una plataforma de monitoreo consistente

Promtail: El Vínculo Perdido entre Registros y Métricas para tu Plataforma de Monitoreo.
Foto de SOULSANA en Unsplash

Es un entendimiento común que tres pilares en el mundo de la observabilidad nos ayudan a obtener una vista completa del estado de nuestras propias plataformas y sistemas: Registros, Trazas y Métricas.

Para proporcionar un resumen de las diferencias entre cada uno de ellos:

  • Las métricas son los contadores sobre el estado de los diferentes componentes desde una vista técnica y de negocio. Así que aquí podemos ver cosas como el consumo de CPU, el número de solicitudes, el uso de memoria o disco…
  • Los registros son los diferentes mensajes que cada una de las piezas de software en nuestra plataforma proporciona para entender su comportamiento actual y detectar algunas situaciones no esperadas.
  • La traza es la diferente información sobre el flujo de solicitudes de extremo a extremo a través de la plataforma con los servicios y sistemas que han sido parte de ese flujo y datos relacionados con esa solicitud concreta.

Tenemos soluciones que afirman abordar todos ellos, principalmente en el software empresarial con Dynatrace, AppDynamics y similares. Y por otro lado, intentamos ir con una solución específica para cada uno de ellos que podamos integrar fácilmente juntos y hemos discutido mucho sobre esas opciones en artículos anteriores.

Pero, algunas situaciones en ese software no funcionan siguiendo este camino porque vivimos en la era más heterogénea. Todos abrazamos, en algún nivel, el enfoque políglota en las nuevas plataformas. En algunos casos, podemos ver que el software está utilizando rastros de registro para proporcionar datos relacionados con métricas u otros asuntos, y aquí es cuando necesitamos confiar en piezas de software que nos ayuden a «arreglar» esa situación, y Promtail hace específicamente eso.

Promtail es principalmente un reenviador de registros similar a otros como fluentd o fluent-bit de CNCF o logstash del stack ELK. En este caso, esta es la solución de Grafana Labs, y como puedes imaginar, esto es parte del stack de Grafana con Loki para ser el «cerebro» que cubrimos en este artículo que te recomiendo que eches un vistazo si aún no lo has leído:

Promtail tiene dos formas principales de comportarse como parte de esta arquitectura, y la primera es muy similar a otras en este espacio, como comentamos antes. Nos ayuda a enviar nuestros rastros de registro desde nuestros contenedores a la ubicación central que principalmente será Loki y puede ser una diferente y proporcionar las opciones habituales para jugar y transformar esos rastros como podemos hacer en otras soluciones. Puedes ver todas las opciones en el enlace a continuación, pero como puedes imaginar, esto incluye transformación, filtrado, análisis, y así sucesivamente.

Pero lo que hace a promtail tan diferente es solo una de las acciones que puedes hacer, y esa acción es metrics. Metrics proporciona una forma específica de, basado en los datos que estamos leyendo de los registros, crear métricas de Prometheus que un servidor de Prometheus puede recolectar. Eso significa que puedes usar los rastros de registro que estás procesando que pueden ser algo como esto:

[2021–06–06 22:02.12] Nueva solicitud recibida para customer_id: 123
[2021–06–06 22:02.12] Nueva solicitud recibida para customer_id: 191
[2021–06–06 22:02.12] Nueva solicitud recibida para customer_id: 522

Con esta información aparte de enviar esas métricas a la ubicación central para crear una llamada de métrica, por ejemplo: `total_request_count` que será generada por el agente promtail y también expuesta por él y siendo capaz también de usar un enfoque de métricas incluso para sistemas o componentes que no proporcionan una forma estándar de hacer eso como una API de métricas formal.

Y la forma de hacer esto está muy bien integrada con la configuración. Esto se hace con una etapa adicional (así es como llamamos a las acciones que podemos hacer en Promtail) que se llama metrics.

El esquema de esa etapa de métrica es sencillo, y si estás familiarizado con Prometheus, verás lo directo que es desde una definición de métricas de Prometheus a este fragmento:

# Un mapa donde la clave es el nombre de la métrica y el valor es un tipo de
# métrica específico.
metrics:
  [<string>: [ <metric_counter> | <metric_gauge> | <metric_histogram> ] ...]

Así que comenzamos definiendo el tipo de métricas que nos gustaría definir, y tenemos las habituales: contador, gauge o histograma, y para cada uno de ellos, tenemos un conjunto de opciones para poder declarar nuestras métricas como puedes ver aquí para una Métrica de Contador

# El tipo de métrica. Debe ser Counter.
type: Counter

# Describe la métrica.

[description: <string>]

# Define un nombre de prefijo personalizado para la métrica. Si no está definido, el nombre predeterminado «promtail_custom_» será prefijado.

[prefix: <string>]

# Clave del mapa de datos extraídos para usar en la métrica, # por defecto al nombre de la métrica si no está presente.

[source: <string>]

# Los valores de las etiquetas en las métricas son dinámicos, lo que puede causar que las métricas exportadas se vuelvan obsoletas (por ejemplo, cuando un flujo deja de recibir registros). # Para prevenir el crecimiento ilimitado del endpoint /metrics, cualquier métrica que no haya sido actualizada dentro de este tiempo será eliminada. # Debe ser mayor o igual a ‘1s’, si no está definido el valor predeterminado es ‘5m’

[max_idle_duration: <string>]

config: # Si está presente y es verdadero, todas las líneas de registro serán contadas sin # intentar coincidir la fuente con el mapa extraído. # Es un error especificar `match_all: true` y también especificar un `value`

[match_all: <bool>]

# Si está presente y es verdadero, todos los bytes de la línea de registro serán contados. # Es un error especificar `count_entry_bytes: true` sin especificar `match_all: true` # Es un error especificar `count_entry_bytes: true` sin especificar `action: add`

[count_entry_bytes: <bool>]

# Filtra los datos de origen y solo cambia la métrica # si el valor objetivo coincide exactamente con la cadena proporcionada. # Si no está presente, todos los datos coincidirán.

[value: <string>]

# Debe ser «inc» o «add» (insensible a mayúsculas). Si # se elige inc, el valor de la métrica aumentará en 1 por cada # línea de registro recibida que pase el filtro. Si se elige add, # el valor extraído debe ser convertible a un flotante positivo # y su valor se sumará a la métrica. action: <string>

Y con eso, tendrás tu métrica creada y expuesta, solo esperando que un servidor de Prometheus la recolecte. Si te gustaría ver todas las opciones disponibles, toda esta documentación está disponible en la documentación de Grafana Labs que puedes consultar en el enlace:

Espero que encuentres esto interesante y una forma útil de mantener toda tu información de observabilidad gestionada correctamente usando la solución adecuada y proporcionar una solución para estas piezas de software que no siguen tu paradigma.

Portainer: Un software visionario y un viaje de evolución

Descubre el estado actual de las primeras interfaces gráficas para contenedores docker y cómo proporciona una solución para las plataformas de contenedores modernas

Foto de HyoSun Rosy Ko en Unsplash

Quiero comenzar este artículo con una historia que no estoy seguro de que todos ustedes, increíbles lectores, conozcan. Hubo un tiempo en que no había interfaces gráficas para monitorear tus contenedores. Fue hace mucho tiempo, entendiendo mucho tiempo como podemos hacerlo en el mundo de los contenedores. Tal vez esto fue en 2014-2015 cuando Kubernetes estaba en su etapa inicial, y también, Docker Swarm acababa de ser lanzado y parecía la solución más confiable.

Así que la mayoría de nosotros no teníamos una plataforma de contenedores como tal. Simplemente ejecutábamos nuestros contenedores desde nuestras propias laptops o pequeños servidores para empresas de vanguardia usando comandos de docker directamente y sin más ayuda que la herramienta CLI. Como puedes ver, las cosas han cambiado mucho desde entonces, y si te gustaría refrescar esa visión, puedes consultar el artículo compartido a continuación:

Y en ese momento, un proyecto de código abierto proporciona la solución más increíble porque no sabíamos que necesitábamos eso hasta que lo usamos, y esa opción era portainer. Portainer proporciona una interfaz web muy impresionante donde puedes ver todos los contenedores docker desplegados en tu host docker y desplegar como otra plataforma.

Portainer: Un Software Visionario y un Viaje de Evolución
Página web de portainer en 2017 de https://ostechnix.com/portainer-an-easiest-way-to-manage-docker/

Fue el primero y generó un impacto tremendo, incluso generó una serie de otros proyectos que fueron nombrados: el portainer de… como dodo el portainer de la infraestructura de Kubernetes en ese momento.

Pero tal vez te preguntes… ¿y cómo está portainer? ¿sigue siendo portainer una cosa? Sigue vivo y coleando, como puedes ver en su página de proyecto de GitHub: https://github.com/portainer/portainer, con el último lanzamiento a finales de mayo de 2021.

Ahora tienen una versión Business pero aún como Community Edition, que es la que voy a estar analizando aquí con más detalle en otro artículo. Aún así, me gustaría proporcionar algunos aspectos destacados iniciales:

  • El proceso de instalación sigue el mismo enfoque que los lanzamientos iniciales para ser otro componente de tu clúster. Las opciones para ser utilizadas en Docker, Docker Swarm o Kubernetes cubren todas las soluciones principales que todas las empresas utilizan.
  • Ahora proporciona una lista de plantillas de aplicaciones similar a la lista del Catálogo de Openshift, y también puedes crear las tuyas propias. Esto es muy útil para las empresas que suelen depender de estas plantillas para permitir a los desarrolladores usar un enfoque común de despliegue sin necesidad de hacer todo el trabajo.
Vista de Plantilla de Aplicación de Portainer 2.5.1
  • Las capacidades de Gestión de Equipos pueden definir usuarios con acceso a la plataforma y agrupar a esos usuarios como parte del equipo para una gestión de permisos más granular.
  • Soporte multi-registro: Por defecto, se integrará con Docker Hub, pero también puedes agregar tus propios registros y poder extraer imágenes directamente de esos directamente desde la GUI.

En resumen, esta es una gran evolución de la herramienta portainer mientras mantiene el mismo espíritu que todos los antiguos usuarios amaban en ese momento: Simplicidad y Enfoque en lo que un Administrador o Desarrollador necesita saber, pero también agregando más características y capacidades para mantener el ritmo de la evolución en la industria de plataformas de contenedores.

Apache NetBeans sigue siendo mi opción preferida para el desarrollo en Java

Descubre cuáles son las razones por las que, para mí, Apache NetBeans sigue siendo el mejor IDE de Java que puedes usar

Foto de Maximilian Weisbecker en Unsplash

Permíteme empezar desde el principio. Siempre he sido un Desarrollador Java desde mi tiempo en la Universidad. Aunque primero aprendí otro lenguaje de programación menos conocido (Modula-2), rápidamente pasé a Java para hacer todas las diferentes tareas y prácticamente cada tarea en mi camino como estudiante y luego como ingeniero de software.

Siempre estaba buscando el mejor IDE que pudiera encontrar para acelerar mis tareas de programación. La principal opción era Eclipse en la universidad, pero nunca fui fan de Eclipse, y eso se convirtió en un problema.

Si estás en la industria del Software Empresarial, habrás notado que prácticamente todas las herramientas basadas en Desarrolladores están basadas en Eclipse porque su licencia y la comunidad detrás lo hacen la mejor opción. Pero nunca pensé que Eclipse fuera un gran IDE, era demasiado flexible pero al mismo tiempo demasiado complejo.

Así que en ese momento es cuando descubrí NetBeans. Creo que la primera versión que probé fue en la rama 3.x, y Sun Microsystem lo desarrolló en ese momento. Era mucho mejor que Eclipse. De hecho, la cantidad de plugins disponibles no era comparable con Eclipse, pero las cosas que hacía, las hacía increíblemente bien.

Para mí, si necesito declarar por qué en ese momento NetBeans era mejor que Eclipse, probablemente las principales cosas serían estas:

  • Simplicidad en la Configuración de Ejecución: Aún creo que la mayoría de los IDE de Java hacen las cosas demasiado complejas solo para ejecutar el código. NetBeans simplemente ejecuta sin necesidad de crear una Configuración de Ejecución y configurarla (puedes hacerlo, pero no estás obligado a hacerlo)
  • Mejor Apariencia: Esto se basa más en una preferencia personal, pero prefiero la configuración predeterminada de NetBeans en comparación con Eclipse.

Así que por eso, NetBeans se convirtió en mi aplicación predeterminada para hacer mi Programación Java, pero Oracle llegó, y las cosas cambiaron un poco. Con la adquisición de Sun Microsystems por parte de Oracle, NetBeans se estancó como muchos otros proyectos de código abierto. Durante años no hubo muchas actualizaciones y progreso.

No es que hayan dejado de lado el producto, pero Oracle tenía un IDE diferente en ese momento, JDeveloper, que era la opción principal. Esto es fácil de entender. Continué siendo leal a NetBeans incluso cuando teníamos otro gran competidor: IntelliJ IDEA.

Esta es la opción elegante, la que la mayoría de los desarrolladores usan hoy en día para la programación en Java, y puedo entender por qué. He intentado varias veces en mi idea tratar de sentir las mismas sensaciones que otros tuvieron, y pude leer los diferentes artículos, y reconozco algunas de las ventajas de la solución:

  • Mejor rendimiento: Está claro que el tiempo de respuesta del IDE es mejor con IntelliJ IDEA que con NetBeans porque no proviene de un viaje de casi 20 años, y pudo comenzar desde cero y usar enfoques modernos para la GUI.
  • Menos Recursos de Memoria: Seamos honestos: Todos los IDE consumen toneladas de memoria. Ninguno lo hace genial aquí (a menos que estés hablando de editores de texto con compilador de Java; esa es otra historia). NetBeans de hecho requiere más recursos para funcionar correctamente.

Así que, hice el cambio y comencé a usar la solución de JetBrains, pero nunca me convenció, porque para mí sigue siendo demasiado complejo. Muchas cosas elegantes, pero menos enfoque en las que necesito. O, simplemente porque estaba demasiado acostumbrado a cómo NetBeans hace las cosas, no pude hacer el cambio mental que se requiere para adoptar una nueva herramienta.

Y entonces… cuando todo parecía perdido, algo increíble sucedió: NetBeans fue donado a la Fundación Apache y se convirtió en Apache NetBeans. Parece una nueva vida para la herramienta proporcionando cosas simples como el Modo Oscuro y manteniendo la solución actualizada con el progreso en el Desarrollo de Java.

Así que, hoy, Apache NetBeans sigue siendo mi IDE preferido, y no podría recomendar más el uso de esta increíble herramienta. Y estos son los puntos principales que me gustaría destacar aquí:

  • Mejor Gestión de Maven: Para mí, la forma y la simplicidad con la que puedes gestionar tu proyecto Maven con NetBeans está fuera de esta liga. Es simple y se enfoca en el rendimiento, agregando una nueva dependencia sin ir al archivo pom.xml, actualizando dependencias sobre la marcha.
  • Configuración de Ejecución: Nuevamente, esto sigue siendo un diferenciador. Cuando estoy codificando algo rápido debido a un nuevo tipo de utilidad, no me gusta perder tiempo creando configuraciones de ejecución o agregando un plugin maven exec a mi pom.xml para ejecutar el software que acabo de codificar. En su lugar, necesito hacer clic en Ejecutar, un botón verde, y dejar que la magia comience.
  • No hay necesidad de todo lo demás: Las cosas evolucionan demasiado rápido en el mundo de la programación Java, pero incluso hoy, nunca siento que me falte alguna capacidad o algo en mi IDE NetBeans que podría obtener si me muevo a una alternativa más moderna. Así que, no hay concesiones aquí a este nivel.

Así que, soy consciente de que probablemente mi elección se deba a que tengo una visión sesgada de esta situación. Después de todo, esta ha sido mi solución principal durante más de una década, y simplemente estoy acostumbrado a ella. Pero me considero una persona abierta, y si viera una diferencia clara, no tendría dudas en abandonar NetBeans como lo hice con muchas otras soluciones en el pasado (Evernote, OneNote, Apple Mail, Gmail, KDE Basket, Things, Wunderstling.. )

Así que, si tienes curiosidad por ver cómo ha progresado Apache NetBeans, por favor echa un vistazo a la última versión y dale una oportunidad. O, si sientes que no conectas con la herramienta actual, dale una oportunidad de nuevo. ¡¡¡Quizás tengas la misma visión sesgada que yo!!!

Por qué rechacé una oferta de una popular empresa tecnológica

No, no era una cuestión de salario. Se trataba de confianza

Reunión de trabajo
Foto de Christina @ wocintechchat.com en Unsplash.

Todos pasamos por varios procesos de reclutamiento cada año. Puede que no nos sintamos cómodos con nuestra empresa o rol actual. Tiendo a usarlos para ver qué hay disponible afuera y asegurarme de que no me estoy quedando obsoleto.

No suelo postularme a ofertas en línea en situaciones normales, pero cuando alguien se acerca a mí con una propuesta interesante, tiendo a escucharlos para ver qué tienen para ofrecer.

Así es como comencé mi último proceso de reclutamiento.

La razón principal para estar a bordo con el proceso fue que la empresa (no la nombraré aquí) y el rol eran lo que tenía en mi radar como mi próximo paso.


El Proceso

Comenzó con una charla básica con el reclutador para obtener una visión general del rol de la empresa (la empresa es bastante conocida por todos, así que fue rápido) y lo que esperaban. Acordamos los términos, y los números que compartió respecto al salario me convencieron de avanzar con los siguientes pasos para invertir algo de tiempo en esta oportunidad.

Debo admitir que no soy alguien que se prepara y estudia para entrevistas. Soy quien soy. Si mis conocimientos y habilidades son adecuados para la empresa, no quiero pretender ser otra persona o mostrar que soy más inteligente de lo que soy.

Comenzamos con un proceso virtual y algunas tareas virtuales — primero, un modelo de rol que me gustó porque fue inesperado. Tienes un buzón virtual, recibes correos electrónicos de tu jefe o colegas, y necesitas decidir cuál es la respuesta más adecuada.

Luego pasamos a un cuestionario técnico que fue como se esperaba. Cosas normales de bajo nivel para el rol que estaba tratando de obtener (Arquitecto de Soluciones Senior), pero eso estaba bien.

Así que, fuimos a la primera llamada con mi futuro Gerente de Contratación, y fue más basada en el rol que técnica. Quería saber sobre mi experiencia previa que había mostrado algunos aspectos que consideraba relevantes para el trabajo. Eso estuvo bien, y fue una discusión cómoda. Pero esta fue la primera entrevista, y comencé a detectar que algo no estaba bien. Todo se aclararía en la última parte del proceso.

Antes de eso, tuve otra tarea técnica que fue bastante fácil. Se centró en resolver un problema, proporcionando mejoras a mediano y largo plazo. Fue un gran ejercicio de una hora. Como dije, nada complicado pero aún así divertido.

La última parte del proceso consistió en una serie de entrevistas con diferentes perfiles en la empresa. Siguió el mismo enfoque que la anterior. La mayoría de ellas se centraron en preguntas de modelo de rol y otras se centraron en temas relacionados con tecnologías que usaría en mi trabajo o preguntas generales relacionadas con TI.


La Resolución

Aparte del proceso que consume mucho tiempo (al final, hice nueve entrevistas con RRHH), no tuve ningún problema con esas entrevistas. Estuvieron bien y todas me hicieron sentir muy cómodo, pero el proceso tomó el enfoque equivocado en varios aspectos:

  • Las preguntas técnicas no se centraron en las cosas correctas. He hecho muchas entrevistas en mi vida en ambos lados de la mesa, y en este caso, se sintió más como un examen de TI que como una entrevista. La mayoría de las preguntas eran de muy bajo nivel para un Arquitecto Senior y más similares a las cosas que ves cuando recién sales de la universidad. Nunca me gustó este enfoque de entrevistas como si fuera un examen que necesitas aprobar. Fue la primera advertencia.
  • Pero la segunda advertencia fue durante cada una de las entrevistas. Todas las entrevistas incluían cinco minutos para que yo hiciera preguntas sobre mi rol o la empresa. Si tuve siete entrevistas (no contaré las de RRHH), tuve cinco minutos en cada una de ellas. Tuve 35 minutos para hacer mis preguntas (que preparé de antemano), y ellos tuvieron 385 minutos para sus preguntas. Eso me dejó con el 9% del tiempo de la entrevista para decidir si esta era la empresa adecuada para mí.

Resumen

Finalmente, recibí la oferta y decidí rechazarla porque este no era el enfoque que esperaría cuando estás contratando a alguien adecuadamente. Puedo entender que las grandes empresas necesitan tener un proceso definido para asegurarse de que solo contratan a los mejores entre un gran grupo de candidatos. Aún así, creo que hay un aspecto que no están cubriendo.

Esto es una calle de dos vías: Como empresa, debería ser tan importante para mí seleccionar al candidato adecuado como lo es para ellos. Fallaron en ese sentido. No me sentí cómodo ni como si tuviera suficiente información. Aún peor, no creo que siquiera les importara si estaba teniendo alguna duda sobre la empresa.

No pretenderé que este artículo hará que las empresas reconsideren sus procesos. Solo quería mostrar mi proceso de pensamiento y por qué el trabajo adecuado y el salario adecuado en una empresa increíble no fueron suficientes. Si ni siquiera pude sentirme cómodo durante el proceso, esta empresa no sería una buena opción para mí a largo plazo.

Espero que hayas disfrutado este artículo. Por favor, siéntete libre de compartir tus opiniones y puntos de vista — especialmente si piensas que actué como un tonto.

Los 3 mejores trucos para usar Medium y mantenerte al día en la industria tecnológica

Medium puede ser uno de tus mejores aliados en esta tarea interminable de mantenerse al día con las actualizaciones en la industria tecnológica.

Todos los que estamos aquí usamos Medium. Estoy siendo un poco Capitán Obvio aquí porque si estás leyendo esto, estoy seguro de que ya estás usando Medium para el crecimiento profesional y para aprender cosas nuevas, pero me gustaría destacar cómo lo uso para mantenerme al día con la situación actual.

Sabes que las cosas cambian muy rápido. Por supuesto, esto está sucediendo en todas las industrias y negocios, pero es aún más urgente en la industria tecnológica.

Estamos viendo nuevas tecnologías cada semana o incluso cada día. Los frameworks cambian tan rápido como podemos imaginar, y tratar de mantener el ritmo de eso es bastante complejo para cualquiera de nosotros. Por lo tanto, debemos usar todas las herramientas a nuestra disposición para asegurarnos de hacer lo mejor en esta situación.

#1 Ajusta tus Recomendaciones Personalizadas

Una de las grandes cosas de Medium es que utiliza tus intereses y los artículos que has estado leyendo y cuánto tiempo pasaste leyéndolos para recomendarte nuevos artículos relevantes.

Así que, aquí las recomendaciones son claras: Usa Medium todo el tiempo. Intenta usar la capacidad de búsqueda para buscar en muchos artículos disponibles porque cuanto más lo uses, más precisas serán las recomendaciones para ti.

Tuve un tiempo, hace unas semanas, cuando estaba realmente interesado en Arquitecturas de Datos Modernas y Nativas de la Nube debido a algunas responsabilidades profesionales. Así que comencé a buscar esos artículos en Medium. Desde ese momento, las recomendaciones han sido bastante precisas sobre lo que estaba buscando y me ayudaron a mejorar mi conocimiento y encontrar artículos que no tenía idea de que estaban disponibles en Medium.

Además de eso, necesitas asegurarte de que tus intereses estén bien configurados. Por lo general, cuando configuramos una cuenta y nos preguntan sobre nuestros intereses, probablemente no lo pensamos mucho tiempo porque lo único que queremos es acceder al contenido de inmediato (¡culpable aquí!).

Por lo tanto, debes tomarte tu tiempo ahora para asegurarte de que los intereses que seleccionaste cuando te uniste sigan siendo los más relevantes para ti hoy. Si deseas verificar tus intereses actuales, necesitas ir a tu perfil y hacer clic en «Controla tus Recomendaciones», como puedes ver en la imagen a continuación:

Página de Controla tus Recomendaciones de mi perfil de Medium 

Además, verás los temas que te interesan ahora y un montón de sugerencias de nuevos temas basados en tu historial de lectura que creen que podrían interesarte. Por lo tanto, es importante visitar la página de vez en cuando para asegurarte de que sean precisos y verificar las recomendaciones que te están proporcionando.

#2: Función Leer Más Tarde 

Otra característica clave es guardar todos los artículos interesantes para continuar leyéndolos más tarde o mantenerlos como tu propia biblioteca. Este es el uso principal que le doy a ese concepto. Intento usar la función Leer Más Tarde para crear y gestionar mi propia «biblioteca basada en Medium».

Y la razón principal detrás de este enfoque es porque todos hemos sufrido esta situación cuando encontramos un gran artículo sobre un tema. Sin embargo, cambiamos a otra tarea, y más tarde, cuando necesitamos encontrar ese artículo nuevamente, no recordamos el título o el autor, y pasamos mucho tiempo tratando de localizarlo nuevamente.

#3: Capacidad de Búsqueda

Incluso cuando estamos acostumbrados a usar Google como nuestra principal opción de búsqueda para buscar cualquier cosa, creo que es importante usar las capacidades de búsqueda en el sitio de Medium por varias razones:

  • El contenido que tenemos disponible en Medium es enorme, y la mayoría de ellos es de gran calidad debido al proceso de curación.
  • Es importante que Medium te conozca mejor, y eso afinará todas las recomendaciones que ya hemos comentado.

Y todo esto sin preocuparte de que encontrarás muchos anuncios basados en tu historial de búsqueda 🙂

#4: Miembro de Medium 

Y he dejado para el final lo que creo que es la parte más importante: Convertirse en Miembro de Medium.

Medium es genial, no importa si eres miembro o no. Aún así, cuando no era miembro de Medium, era simplemente molesto encontrar el artículo que necesitaba, pero no podía leerlo porque ya había gastado los artículos «destacados» del mes, y necesitaba esperar un mes adicional. Así que sabemos que esto no es válido si quieres mantenerte actualizado en la industria tecnológica, así que por favor, hazte un favor y conviértete en miembro de Medium. Te sentirás más cómodo en la plataforma y comenzarás a vivir dentro de ella.

Terminología de API: Estamos Usando Mal el Término API y Me Está Volviendo Loco

Cuando el marketing se apropia de una palabra técnica, conduce a la locura y a un cambio completo de su significado.

Foto de Tengyart en Unsplash

API es el siguiente en la lista. Siempre es el mismo patrón con respecto a los términos técnicos cuando van más allá del foro realmente técnico normal y alcanzan un nivel más «mainstream» en la industria. Tan pronto como esto sucede, el término comienza a perder su significado y empieza a ser como una palabra comodín que puede significar cosas muy diferentes para personas muy diferentes. Si no me crees, acompáñame a este conjunto de ejemplos.

Puedes argumentar que los términos necesitan evolucionar y que la misma palabra puede significar cosas diferentes siempre que la industria continúe evolucionando, y eso es cierto. Por ejemplo, el término paquete que en el pasado se refería a la forma de empaquetar software para poder compartirlo, generalmente a través de correo o un servidor FTP como un paquete TAR, ha sido redefinido con la eclosión de los gestores de paquetes en los años 90 y después con la gestión de artefactos para manejar dependencias con enfoques como Maven, npm, etc.

Pero no estoy hablando de estos ejemplos. Estoy hablando de cuando un término se usa mucho porque es elegante y significa evolución o modernización, por lo que intentas usarlo tanto como sea posible, incluso para significar cosas diferentes. Y uno de estos términos es API.

API significa Interfaz de Programación de Aplicaciones, y como su nombre indica, es una interfaz. Desde el principio de los tiempos de la computación, se ha creado para referirse al contrato y cómo necesitas interactuar con un programa de aplicación específico. Sin embargo, el término se usaba principalmente para bibliotecas para definir su contrato para otras aplicaciones que necesitaban la capacidad.

Así que si quisiéramos mostrar esto en una forma gráfica, esto es a lo que se refiere la API:

Con la eclosión de los Servicios REST y las aplicaciones móviles, el término API se expandirá más allá de su uso normal y se convertirá en una palabra normal en el mundo de hoy porque todos los desarrolladores necesitan alguna API para trabajar. Comenzando desde las capacidades comunes como la Autenticación hasta que solo se necesitan capacidades concretas para realizar su trabajo.

La explosión de servicios que expusieron su propia API requirió una forma de proporcionar gestión central a las interfaces expuestas, especialmente cuando comenzamos a publicar algunas de estas capacidades al mundo exterior. Necesitábamos asegurarlas, identificar quién las estaba usando y a qué nivel, y una forma para que los desarrolladores encontraran la documentación necesaria para poder usar sus servicios. Y debido a eso, tenemos el auge de las soluciones de Gestión de API.

Y luego vinieron los microservicios a revolucionar cómo se realizan las aplicaciones, y eso supone que ahora tenemos más servicios, cada uno de ellos proporcionando su propia API a un nivel que prácticamente tenemos un servicio para una capacidad y debido a eso una API para una capacidad, algo como puedes ver en la imagen a continuación:

Y el uso de API se volvió tan popular que algunas personas comenzaron a usar el término para referirse a la interfaz y al servicio completo que implementa esta API, lo que lleva y está llevando a mucha confusión. Así que debido a eso, cuando hablamos ahora sobre Desarrollo de API, podemos hablar de cosas muy diferentes:

  • Podemos hablar sobre la definición y el modelo de la interfaz en sí misma y su gestión.
  • Podemos hablar sobre una implementación de servicio con una API expuesta para ser utilizada y gestionada adecuadamente.
  • Incluso podemos hablar sobre un servicio que utiliza varias APIs como parte de su implementación de capacidad.

Y el problema principal cuando usamos el mismo término para referirse a tantas cosas diferentes es que la palabra pierde todo su significado y con eso complica nuestra comprensión en cualquier conversación y eso lleva a muchos problemas que podríamos evitar simplemente usando las palabras adecuadas e intentando mantener todo el ruido y el marketing un poco fuera de las conversaciones técnicas.

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?

Vamos a ver si el protocolo gRPC, que está surgiendo como una de las fuertes alternativas frente al servicio REST tradicional, puede mostrar todos los beneficios que la gente está reclamando

Foto de Omar Flores en Unsplash

Si ya has estado en la industria tecnológica últimamente, sabes que gRPC se está convirtiendo en uno de los protocolos más populares para la integración entre componentes, principalmente microservicios, debido a sus beneficios en comparación con otras soluciones estándar como REST o SOAP.

Hay otras alternativas que también se están volviendo mucho más populares a diario, como GraphQL, pero el enfoque de hoy es en gRPC. Si deseas echar un vistazo a los beneficios de GraphQL, puedes ver el artículo que se muestra a continuación:

[visual-link-preview encoded=»eyJ0eXBlIjoiaW50ZXJuYWwiLCJwb3N0Ijo3MywicG9zdF9sYWJlbCI6IlBvc3QgNzMgLSBXaHkgU2hvdWxkIFlvdSBVc2UgR3JhcGhRTCBmb3IgeW91ciBBUElzPyIsInVybCI6IiIsImltYWdlX2lkIjoyNDQ5LCJpbWFnZV91cmwiOiJodHRwOi8vYWxleGFuZHJlLXZhenF1ZXouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzAxL2ltZ182MWVkMTNiNDAwOGMxLmpwZyIsInRpdGxlIjoiV2h5IFNob3VsZCBZb3UgVXNlIEdyYXBoUUwgZm9yIHlvdXIgQVBJcz8iLCJzdW1tYXJ5IjoiMyBiZW5lZml0cyBvZiB1c2luZyBHcmFwaFFMIGluIHlvdXIgQVBJIHRoYXQgeW91IHNob3VsZCB0YWtlIGludG8gY29uc2lkZXJhdGlvbi4gUGhvdG8gYnkgTWlrYSBCYXVtZWlzdGVyIG9uwqBVbnNwbGFzaCBXZSBhbGwga25vdyB0aGF0IEFQSXMgYXJlIHRoZSBuZXcgc3RhbmRhcmQgd2hlbiB3ZSBkZXZlbG9wIGFueSBwaWVjZSBvZiBzb2Z0d2FyZS4gQWxsIHRoZSBsYXRlc3QgcGFyYWRpZ20gYXBwcm9hY2hlcyBhcmUgYmFzZWQgb24gYSBkaXN0cmlidXRlZCBhbW91bnQgb2YgY29tcG9uZW50cyBjcmVhdGVkIHdpdGggYSBjb2xsYWJvcmF0aXZlIGFwcHJvYWNoIGluIG1pbmQgWyZoZWxsaXA7XSIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

Entonces, ¿cuáles son los principales beneficios que generalmente se exponen respecto al uso de gRPC y por qué empresas como Netflix o Uber lo están utilizando?

  • Mensajes ligeros
  • Alto rendimiento
  • Soporte para patrón de transmisión

Parece una buena alternativa de una versión renovada de la llamada a procedimiento remoto tradicional que se ha estado utilizando en los años 90, pero probémoslo en algunos casos de uso real para intentar medir los beneficios que todos están reclamando, especialmente en cuanto al rendimiento y la ligereza de los mensajes, así que decidí definir un escenario muy sencillo de un patrón de solicitud/respuesta entre dos aplicaciones y probarlas con una llamada REST normal y una llamada gRPC.

Definición de Escenario de Prueba Simple

Pila Tecnológica

Vamos a usar TIBCO Flogo para crear la aplicación y utilizar un entorno visual sin código para simplificar la generación de la aplicación. Si deseas ver más en detalle sobre esta tecnología, por favor revisa el post a continuación:

[visual-link-preview encoded=»eyJ0eXBlIjoiaW50ZXJuYWwiLCJwb3N0IjoxMjIsInBvc3RfbGFiZWwiOiJQb3N0IDEyMiAtIFRJQkNPIEZsb2dvIEludHJvZHVjdGlvbiIsInVybCI6IiIsImltYWdlX2lkIjoyNzcyLCJpbWFnZV91cmwiOiJodHRwOi8vYWxleGFuZHJlLXZhenF1ZXouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzAxLzFWUzBwMG9MOTNPR1N6YjhHMUtLekNRLnBuZyIsInRpdGxlIjoiVElCQ08gRmxvZ28gSW50cm9kdWN0aW9uIiwic3VtbWFyeSI6IkZsb2dvIGlzIHRoZSBuZXh0IG5ldyB0aGluZyBpbiB0aGUgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgaW4gYSBjbG91ZC1uYXRpdmUgd2F5LiBTaW5jZSBpdHMgZm91bmRhdGlvbiBoYXMgYmVlbiBkZXNpZ25lZCB0byBjb3ZlciBhbGwgdGhlIG5ldyBjaGFsbGVuZ2VzIHRoYXQgd2UgbmVlZCB0byBmYWNlIHdoZW4gZGVhbGluZyB3aXRoIG5ldyBjbG91ZC1uYXRpdmUgZGV2ZWxvcG1lbnQuIFNvLCBwbGVhc2UsIGlmIHlvdSBvciB5b3VyIGVudGVycHJpc2UgaXMgc3RhcnRpbmcgaXRzIG1vdmVtZW50IHRvIHRoZSBjbG91ZCBpdOKAmXMgdGhlIG1vbWVudCB0byBbJmhlbGxpcDtdIiwidGVtcGxhdGUiOiJ1c2VfZGVmYXVsdF9mcm9tX3NldHRpbmdzIn0=»]

Entonces, vamos a crear dos aplicaciones: La primera se activará en intervalos programados cada 100 ms y llamará usando gRPC a la segunda aplicación que simplemente devolverá los datos a la aplicación de llamada codificados de manera fija para evitar que cualquier otro sistema de terceros pueda impactar en la medición del rendimiento.

En cuanto a los datos que vamos a transmitir, será un enfoque simple de Hola Mundo. La primera aplicación enviará un nombre a la segunda aplicación que devolverá el “Hola, nombre, Esta es mi aplicación gRPC (o REST)” para poder imprimirlo en la consola.

Enfoque REST

A continuación se muestran las aplicaciones para el caso de prueba utilizando la tecnología TIBCO Flogo para definirlo:

Aplicaciones Flogo para el caso REST 

Como puedes ver, es simple e intuitivo. Tenemos la primera aplicación activada por un Trigger y con una actividad de Invocación REST y luego un Mensaje de Registro para imprimir lo que se ha recibido. La segunda aplicación es aún más simple, solo expone la API REST y devuelve los datos codificados de manera fija.

Enfoque gRPC

El enfoque gRPC será un poco más difícil porque necesitamos crear la definición protobuf para el cliente y servidor gRPC. Así que comenzaremos con una definición simple del servicio Hello como puedes ver en la imagen a continuación:

Definición de Protobuf para el Escenario de Prueba gRPC

Y basado en eso, podemos generar las diferentes aplicaciones tanto del cliente como del servidor de esta prueba simple:

Aplicaciones gRPC en TIBCO Flogo

Como puedes ver, las aplicaciones son muy similares a las de REST, solo cambiando un protocolo por el otro, y eso es una de las cosas increíbles de TIBCO Flogo, podemos tener una implementación simple sin conocer los detalles de los protocolos más nuevos pero obteniendo todas las ventajas que proporcionan.

Resultados de la Prueba

Después de 100 ejecuciones del servicio REST, estas son las métricas que pudimos obtener usando el exportador de Prometheus que proporciona la herramienta:

Métricas de Prometheus para la Ejecución del Escenario REST

Así que tenemos alrededor de 4 ms para el flujo del cliente y 0.16 ms para el servicio REST en sí, por lo que ya son números bajos. ¿Realmente crees que una versión gRPC podría mejorarlo? Vamos a verlo. Aquí están las mismas métricas para 100 invocaciones del segundo flujo usando gRPC:

Métricas de Prometheus para la Ejecución del Escenario gRPC

Como puedes ver, la mejora es impresionante incluso para un servicio simple que se ejecuta en localhost. El servicio gRPC tuvo métricas de 0.035 ms frente a los 0.159 que tenía la versión REST, una mejora del 77.98% frente a la API REST, esto es simplemente increíble… pero ¿qué pasa con el cliente? Pasó de 4.066 ms a 0.89 ms, lo que significa otra mejora del 78.1%.

Representación Gráfica de Ambas Ejecuciones de Escenario

Entonces, la lógica debería ser si esto se puede hacer con un servicio simple donde los datos intercambiados son prácticamente nada, ¿qué puede hacer cuando la carga útil es grande? las opciones son simplemente inimaginables…

Resumen

Probamos las cosas buenas que hemos escuchado en línea sobre el método gRPC que la mayoría de las tecnologías de vanguardia están utilizando hoy en día y hemos quedado impresionados solo con un escenario simple comparándolo con el rendimiento de una interfaz REST. Seguro que gRPC tiene sus contras como cualquier otra opción, pero en términos de rendimiento y optimización de mensajes, los datos hablan por sí mismos, es simplemente asombroso. ¡Mantente atento a nuevas pruebas sobre los beneficios de gRPC y también algunos de sus contras para intentar ver si podría ser una gran opción para tu próximo desarrollo!

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!

Los creadores de contenido están educando a los desarrolladores junior en plataformas sociales que probablemente idealizan su visión incluso cuando no son los mejores de su clase.

Foto de ELLA DON en Unsplash

Estamos viviendo un momento de máxima exposición a la creación de contenido con temas de desarrollo de software. La última noticia sobre este tema es la creación de una sección específica sobre Canales de Desarrollo de Software en la popular plataforma de streaming Twitch:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9nYW1ld29ybGRvYnNlcnZlci5jb20vMjAyMS8wOS8wMy90d2l0Y2gtaW50cm9kdWNlcy1uZXctc29mdHdhcmUtZ2FtZS1kZXZlbG9wbWVudC1nYW1pbmctY2F0ZWdvcnktYm9vc3RpbmctZ2FtZWRldi1jb250ZW50LWRpc2NvdmVyYWJpbGl0eSIsImltYWdlX2lkIjotMSwiaW1hZ2VfdXJsIjoiaHR0cHM6Ly9nYW1ld29ybGRvYnNlcnZlci5jb20vd3AtY29udGVudC9wcmV2aWV3cy9wb3N0L3R3aXRjaC1pbnRyb2R1Y2VzLW5ldy1zb2Z0d2FyZS1nYW1lLWRldmVsb3BtZW50LWdhbWluZy1jYXRlZ29yeS1ib29zdGluZy1nYW1lZGV2LWNvbnRlbnQtZGlzY292ZXJhYmlsaXR5LnBuZyIsInRpdGxlIjoiVHdpdGNoIGludHJvZHVjZXMgbmV3IOKAnFNvZnR3YXJlICYgR2FtZSBEZXZlbG9wbWVudOKAnSBzdHJlYW1pbmcgY2F0ZWdvcnksIGJvb3N0aW5nIGdhbWVkZXYgY29udGVudCBkaXNjb3ZlcmFiaWxpdHkgfCBHYW1lIFdvcmxkIE9ic2VydmVyIiwic3VtbWFyeSI6IlR3aXRjaCBhbm5vdW5jZWQgdGhhdCBpdOKAmXMgaW50cm9kdWNpbmcgbmV3IFNvZnR3YXJlICYgR2FtZSBEZXZlbG9wbWVudCBzdHJlYW1pbmcgY2F0ZWdvcnkgdG8gaW1wcm92ZSB0aGUgZGlzY292ZXJhYmlsaXR5IG9mIGNvbnRlbnQgZm9yIGRldnMuIiwidGVtcGxhdGUiOiJ1c2VfZGVmYXVsdF9mcm9tX3NldHRpbmdzIn0=»]

Y eso es solo una etapa adicional en la tendencia que estamos viendo en los últimos años donde el contenido creado y las personas que invierten su tiempo en compartir su conocimiento en internet están explotando.

El pie de foto del Desarrollo de Software y Juegos de Twitch.tv

Prácticamente puedes encontrar un Canal en Vivo que te enseñará o compartirá contigo mucho conocimiento y experiencia sobre todos los temas relacionados con el desarrollo de software. No importa qué tema estés buscando, lo tendrás allí. Por ejemplo, hoy más temprano fui. Encontré los siguientes canales en vivo: Creando un MMO desde cero, Desarrollo de Maya, Programación en Java, Programación en GoLang, Programación de CMS usando Django y Python, y mucho más.

Esto es algo grandioso. Vivimos en una era donde tenemos contenido de gran calidad a nuestra disposición, especialmente en nuestra industria, que nos ayudará a mejorar nuestras habilidades y base de conocimientos. Todos estos creadores de contenido son los principales contribuyentes a eso. Y esos están aumentando la popularidad de los mejores creadores de contenido alcanzando niveles sobresalientes.

Pero esa situación también está creando la circunstancia de que los desarrolladores junior o simplemente personas que comienzan una nueva habilidad comiencen a pensar que las personas que muestran su visión o experiencia sobre un tema son los mejores desarrolladores en esa área, y eso está muy lejos de la verdad. Así que se está inclinando hacia una situación peligrosa.

Para ser claro: Los Creadores de Contenido no suelen ser Grandes Desarrolladores. Normalmente son desarrolladores regulares con habilidades de comunicación impresionantes. Y eso es más importante con una voluntad de compartir lo que saben con su audiencia. Incluso que están ganando dinero con esto, para ser justos, tienen una determinación inequívoca de desempeñar un papel social de compartir el conocimiento con el mundo, y eso es muy importante.

Esto no es solo intentar avergonzar a los creadores de contenido por su calidad; esto está sucediendo en todas las industrias. El mejor conocimiento compartido no suele ser el mejor de su práctica. Puedes pensar en cualquier tema: Matemáticas, Física, pero también Deportes. ¿Son los mejores narradores de Fútbol los mejores jugadores? No, seguro.

Pero por esta razón, es importante tener en cuenta esto cuando asistimos a esos canales o vemos esos videos que no son los verdaderos expertos, por lo que siempre debes verificar sus declaraciones para asegurarte de que estén alineadas con las mejores prácticas y procesos.

Si te gustaría ver lo que los verdaderos buenos desarrolladores están haciendo, es mucho más fácil encontrarlo cerca de donde reside el código. Usando plataformas como GitHub o SourceForge, los proyectos con más estrellas que proporcionan valor y leyendo sus conversaciones o analizando sus commits, te proporcionaremos una visión mucho más clara de lo que los verdaderos desarrolladores de alto nivel están haciendo.

Proyectos de GitHub que proporcionan una fuente increíble de conocimiento y buenas prácticas

Otra opción es suscribirse a la lista de correo de esos proyectos donde puedes ver la discusión real de los desarrolladores, los puntos principales que están haciendo y el razonamiento detrás de esas decisiones.

Una lista de correo te ayudará a entender cuál es el razonamiento detrás de algunas decisiones importantes de software

Este es un conocimiento mucho más importante que lo que puedes ver en una sesión en vivo de alguien programando en una plataforma de streaming, pero esto también es parte del proceso porque necesitarás tener la base para estar listo para entender a qué se refiere la discusión y para ese nivel de introducción la forma en que este increíble creador de contenido está compartiendo el conocimiento es la mejor manera para que cualquiera lo entienda y lo asimile.

AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes

Los AccessModes de Kubernetes proporcionan mucha flexibilidad sobre cómo los diferentes pods pueden acceder a los volúmenes compartidos

Foto de Daniel Páscoa en Unsplash

Todas las empresas se están moviendo hacia una transformación, cambiando las cargas de trabajo actuales en servidores de aplicaciones que se ejecutan en máquinas virtuales en un centro de datos hacia una arquitectura nativa de la nube donde las aplicaciones se han descompuesto en diferentes servicios que se ejecutan como componentes aislados utilizando contenedores y gestionados por una plataforma basada en Kubernetes.

Comenzamos con los casos de uso y cargas de trabajo más fáciles, moviendo nuestros servicios en línea, principalmente API REST que funcionan en modo de balanceo de carga, pero los problemas comenzaron cuando movimos otras cargas de trabajo para seguir el mismo camino de transformación.

La plataforma Kubernetes no estaba lista en ese momento. La mayoría de sus mejoras se han realizado para admitir más casos de uso. ¿Significa eso que la API REST es mucho más nativa de la nube que una aplicación que requiere una solución de almacenamiento de archivos? ¡Absolutamente no!

Estábamos confundiendo diferentes cosas. Los patrones nativos de la nube son válidos independientemente de esas decisiones. Sin embargo, es cierto que en el camino hacia la nube e incluso antes, hubo algunos patrones que intentamos reemplazar, especialmente los basados en archivos. Pero esto no es por el uso del archivo en sí. Era más sobre el enfoque por lotes que estaba estrechamente relacionado con el uso de archivos que intentamos reemplazar por varias razones, como las siguientes:

  • El enfoque en línea reduce el tiempo de acción: las actualizaciones y notificaciones llegan más rápido al objetivo, por lo que los componentes están actualizados.
  • Las soluciones basadas en archivos reducen la escalabilidad de la solución: generas una dependencia con un componente central que tiene una solución de escalabilidad más compleja.

Pero este camino se está facilitando, y la última actualización en ese viaje fueron los Access Modes introducidos por Kubernetes. El Access Mode define cómo los diferentes pods interactuarán con un volumen persistente específico. Los modos de acceso son los que se muestran a continuación.

  • ReadWriteOnce — el volumen puede montarse como lectura-escritura por un solo nodo
Representación Gráfica de ReadWriteOnce AccessMode
  • ReadOnlyMany — el volumen puede montarse como solo lectura por muchos nodos.
Representación Gráfica de ReadOnlyMany AccessMode
  • ReadWriteMany — el volumen puede montarse como lectura-escritura por muchos nodos
Representación Gráfica de ReadWriteMany AccessMode
  • ReadWriteOncePod — el volumen puede montarse como lectura-escritura por un solo Pod. Esto solo es compatible con volúmenes CSI y Kubernetes versión 1.22+.
Representación Gráfica de ReadWriteOncePod AccessMode

Puedes definir el modo de acceso como una de las propiedades de tus PVs y PVCs, como se muestra en el ejemplo a continuación:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
 name: single-writer-only
spec:
 accessModes:
 - ReadWriteOncePod # Permitir solo a un único pod acceder a single-writer-only.
 resources:
 requests:
 storage: 1Gi

Todo esto nos ayudará en nuestro camino para que todos nuestros diferentes tipos de cargas de trabajo logren todos los beneficios de la transformación digital y nos permita, como arquitectos o desarrolladores, elegir el patrón correcto para nuestro caso de uso sin estar restringidos en absoluto.