El ambiente Blue-Green (despliegue azul-verde) es una estrategia de software que utiliza dos entornos de producción idénticos. Uno está activo manejando el tráfico (Blue) y el otro está inactivo probando la nueva versión (Green). 
Permite actualizar aplicaciones sin tiempo de inactividad y volver a la versión anterior de forma instantánea.


¿Cómo funciona?
El objetivo de esta técnica, fundamental en la cultura DevOps, es eliminar los cortes de servicio y minimizar los riesgos cuando se lanza una actualización. El proceso consta de cuatro fases clave:
  • El estado inicial: Tienes dos entornos de producción idénticos, a menudo denominados Blue (versión actual) y Green (la nueva versión). El entorno Blue maneja todo el tráfico de los usuarios reales.
  • Despliegue y pruebas: El código nuevo o actualizado se instala y prueba exhaustivamente en el entorno Green, garantizando que todo funcione correctamente antes de exponerlo al público general.
  • El cambio de tráfico (Switchover): Una vez verificado el entorno Green, un enrutador o balanceador de carga redirige todo el tráfico del entorno Blue al entorno Green. Ahora, Green es el entorno activo y Blue queda inactivo.
  • Reversión rápida (Rollback): Si se detecta un error crítico tras el cambio de tráfico, puedes redirigir inmediatamente a los usuarios al entorno Blue, restaurando la versión anterior sin afectar la experiencia del cliente.
Ventajas principales
  • Cero tiempo de inactividad (Downtime): Los usuarios no sufren interrupciones en el servicio, ya que la transición es instantánea.
  • Mitigación de riesgos: Los fallos en la nueva versión se detectan antes de que el público general se vea afectado.
  • Reversión instantánea: Volver a la versión estable anterior toma segundos, lo que reduce el estrés durante los lanzamientos.
¿Dónde se implementa?
Esta estrategia se puede aplicar de forma automatizada a través de herramientas de integración continua (CI/CD) y proveedores de nube:
  • Balanceadores de carga: Servicios como AWS Application Load Balancer permiten cambiar las reglas de enrutamiento para redirigir el tráfico del grupo Blue al Green de forma instantánea.
  • DNS: El sistema de nombres de dominio de Amazon Route 53 permite actualizar los registros para dirigir gradualmente a los usuarios del entorno activo al nuevo.
  • Contenedores y microservicios: En plataformas como Microsoft Azure Container Apps puedes configurar divisiones de tráfico para pruebas de versiones con un solo clic.
La arquitectura multi-tenant (o multiinquilino) es un modelo de software donde una única instancia de una aplicación y su infraestructura sirven a múltiples clientes o "inquilinos". Aunque todos comparten el mismo código y recursos, los datos y configuraciones de cada cliente permanecen completamente aislados y seguros.


Es la base de las soluciones SaaS (Software as a Service), permitiendo escalabilidad, costos compartidos y fácil mantenimiento.

Modelos de Bases de Datos más comunes
Existen tres enfoques principales para gestionar los datos en esta arquitectura, dependiendo del nivel de aislamiento y los costos:
  1. Base de datos compartida, esquema compartido: Todos los clientes comparten la misma base de datos y las mismas tablas. Se utiliza una columna (como \(TenantID\)) para filtrar y separar la información de cada uno.
    Ventaja: Es muy económica y fácil de escalar y mantener.
    Desventaja: El aislamiento de datos depende estrictamente de la lógica de programación.
  2. Base de datos compartida, esquemas separados: Todos los clientes usan el mismo servidor de base de datos, pero cada uno tiene su propio "esquema" o espacio de nombres independiente.
    Ventaja: Ofrece un mejor aislamiento de datos y facilita el cumplimiento de normativas de privacidad.
  3. Base de datos dedicada (Silo): Cada cliente tiene su propia base de datos física o instancia completamente independiente.
    Ventaja: Máxima seguridad, aislamiento total y fácil personalización por cliente.
    Desventaja: Es más costosa y compleja de actualizar.

Ventajas principales
  • Eficiencia de recursos: Al compartir servidores e infraestructura, los costos operativos se reducen significativamente.
  • Mantenimiento centralizado: Las actualizaciones de software o parches de seguridad se aplican una sola vez y se reflejan en todos los clientes.
  • Escalabilidad: Permite incorporar nuevos clientes rápidamente sin tener que desplegar aplicaciones desde cero.

¿Cuándo se utiliza?

Es el estándar de oro para los modelos SaaS (Software como Servicio) como plataformas de comercio electrónico (ej. Shopify), sistemas de gestión de proyectos (ej. Jira) o herramientas CRM, donde cada empresa necesita su propio entorno pero la lógica de negocio es genérica para todos
Konga es una herramienta de administración de código abierto que actúa como una interfaz gráfica (GUI) para gestionar el API Gateway de Kong. Su funcionamiento principal es proporcionar un panel de control centralizado y fácil de usar para administrar APIs, microservicios, complementos, consumidores y nodos de Kong, eliminando la necesidad de usar comandos como curl o herramientas como Postman. A través de Konga, los usuarios pueden monitorizar el estado en tiempo real, configurar upstream (servicios que Kong proxy), gestionar la seguridad y balancear la carga, todo desde una interfaz web.


¿Qué es Konga?
  • Interfaz de usuario para Kong: Konga es una aplicación que ofrece una interfaz gráfica de usuario (GUI) intuitiva para interactuar con la API de administración de Kong Gateway.
  • Gestión centralizada de APIs: Permite administrar Kong, que es una plataforma de código abierto para la gestión de APIs y microservicios.
  • Función de proxy: Kong (y por extensión, Konga) funciona como un proxy que dirige las peticiones a los servicios de backend, añadiendo funcionalidades como seguridad, logs y limitación de peticiones.

¿Cómo funciona?
  • Conexión a Kong: Konga se conecta a la API de administración de Kong para obtener la información y permitir su gestión. Esto se hace creando una conexión dentro de la aplicación y activándola.
  • Visualización y monitoreo: Proporciona monitoreo en tiempo real del estado de los nodos de Kong, información detallada de los mismos y un entorno multiusuario.
  • Administración de recursos: Permite gestionar elementos clave del ecosistema Kong, como:APIs: Crear y configurar servicios que el gateway debe exponer.
  • Plugins: Añadir y configurar complementos para extender la funcionalidad del gateway (ej. seguridad).
  • Consumidores: Administrar los clientes que utilizan las APIs.
  • Credenciales: Gestionar la autenticación de los consumidores.
  • Gestión avanzada de upstream y targets: Permite configurar grupos de servicios (Upstreams) y sus destinos individuales (Targets). Esto incluye la configuración de health checks (comprobaciones de salud) y balanceo de carga para distribuir el tráfico entre los Targets disponibles.

Un clúster es un grupo de servidores que funcionan juntos como un único sistema para procesar cargas de trabajo y mejorar la disponibilidad y escalabilidad. La integración con API funciona a través de la API del clúster, que es la interfaz para interactuar con él, permitiendo definir el estado deseado y que el clúster administre automáticamente los nodos y aplicaciones que lo componen para alcanzar ese estado.


¿Qué es un clúster?
  • Grupo de servidores: Un clúster es un conjunto de nodos o computadoras conectados que trabajan de forma cohesionada como un solo sistema.
  • Objetivo: Su propósito principal es gestionar y distribuir cargas de trabajo, logrando alta disponibilidad y escalabilidad.
  • Alta disponibilidad: Si un nodo falla, otro puede asumir su carga de trabajo, un proceso conocido como conmutación por error o failover.
  • Ejemplo de uso: En un clúster de Kubernetes, los nodos (máquinas físicas o virtuales) ejecutan aplicaciones en contenedores. El clúster se encarga de orquestar estos contenedores a escala.
¿Cómo funciona con integración de API?
  • API como interfaz: La API (Interfaz de Programación de Aplicaciones) del clúster es la forma en que los usuarios y otros sistemas interactúan con él.
  • Estado deseado: Un usuario o sistema define el estado deseado del clúster (ej. qué aplicaciones deben ejecutarse, cuántos recursos necesitan) a través de la API.
  • Gestión automática: El clúster, a través de su sistema de control, monitorea constantemente el estado real y trabaja para que coincida con el estado deseado definido por el usuario.
  • Herramienta declarativa: Es un sistema declarativo porque se le dice al clúster qué hacer (el estado deseado), y este se encarga de los detalles de cómo lograrlo automáticamente.
  • Ejemplo con Kubernetes: Se puede usar la herramienta de línea de comandos kubectl o la API directamente para enviar peticiones. Por ejemplo, se puede usar la API para solicitar el estado actual de los nodos o para desplegar una nueva aplicación. Las peticiones se dirigen a la API de Kubernetes, que luego las procesa y actualiza el clúster para que cumpla con la petición.


¿Cuál se debe elegir?
El sistema de mensajería adecuado depende de la arquitectura a utilizar y el uso requerido, es decir, cada proyecto es diferente al igual que sus necesidades y no hay un broker de mensajería definitivo.


Primero definamos rápidamente que es cada uno.

Apache Kafka:
Es una plataforma de streaming de eventos de código abierto que se utiliza para publicar, almacenar y procesar flujos de datos en tiempo real de forma escalable y confiable. Funciona como un sistema de mensajería distribuido en el que se pueden publicar mensajes (eventos) y suscribirse a ellos para procesarlos a medida que ocurren, con la capacidad de almacenar de manera duradera los flujos de datos.

Apache RabbitMQ:
Es un broker de mensajería de código abierto y de nivel empresarial que facilita la comunicación entre aplicaciones y sistemas distribuidos, actuando como un intermediario para enviar y recibir mensajes de manera fiable. Su funcionamiento se basa en un sistema de "intercambios" que enrutan mensajes a "colas" basándose en reglas, similar a una oficina de correos para datos.

Ahora les compartó una comparación eficaz de ambas:

Kafka:
  • Oleoducto de datos de alta velocidad
  • Maneja transmisiones de eventos continuos
  • Un rendimiento muy alto para aplicaciones en tiempo real
  • Conserva datos para repetición y análisis
  • Ideal para publicar/suscribir patrones

RabbitMQ :
  • El centro de mensajes confiable
  • Garantía de entrega de mensajes
  • Perfecto para colas de tareas y procesamiento de trabajadores
  • Soporta enrutamiento flexible para flujos de trabajo complejos
  • Adecuado para comunicación punto a punto

En resumen:
Kafka: Lo mejor para eventos a gran escala en streaming y análisis.
RabbitMQ: Lo mejor para entrega confiable, procesamiento de tareas y flujos de trabajo complejos.
La Normalización:
Es un proceso de diseño de bases de datos relacionales que aplica un conjunto de reglas para organizar los datos y reducir la redundancia. 
Su objetivo principal es evitar la duplicación de información, prevenir anomalías de inserción, actualización y eliminación, y garantizar la integridad de los datos mediante la creación de tablas más pequeñas y la definición de relaciones entre ellas. Se logra aplicando diferentes formas normales (como la Primera, Segunda y Tercera Forma Normal), que son etapas secuenciales para refinar la estructura de la base de datos.


Objetivos clave de la normalización
  • Reducir la redundancia de datos: Se evita almacenar la misma información en múltiples lugares, lo que simplifica las actualizaciones y el mantenimiento.
  • Prevenir anomalías: Se minimizan errores al insertar nuevos datos, actualizar registros existentes o eliminar información, ya que los datos relacionados se encuentran en un solo lugar.
  • Garantizar la integridad de los datos: Asegura la consistencia y exactitud de la información al relacionarla a través de claves.
Proceso y formas normales
La normalización se realiza a través de un proceso iterativo, aplicando reglas de forma secuencial. Las formas normales más comunes son: 
  1. Primera Forma Normal (1NF): Asegura que cada columna contenga valores atómicos (indivisibles) y que no haya grupos de columnas repetidos en una misma tabla.
  2. Segunda Forma Normal (2NF): Requiere que la tabla esté en 1NF y que todos los atributos no-clave dependan completamente de la clave primaria.
  3. Tercera Forma Normal (3NF): Requiere que la tabla esté en 2NF y que los atributos no-clave no dependan de forma transitiva de la clave primaria (es decir, un atributo no debe depender de otro atributo que no sea clave).
  4. Cuarta Forma Normal (4NF): La normalización a la cuarta forma normal (4FN) se enfoca en eliminar las dependencias multivalor no triviales, asegurando que cada tabla contenga una sola relación independiente entre sus atributos. Para lograr esto, si una tabla tiene múltiples relaciones independientes (como habilidades y lenguajes de un empleado), se divide la tabla en tablas separadas, manteniendo la integridad de los datos y reduciendo la redundancia.
¿Qué es una dependencia multivalor?
Una dependencia multivalor ocurre cuando una clave tiene valores múltiples para atributos que no están relacionados entre sí, pero que dependen de la misma clave.

Ejemplo: 
Una tabla de Empleado con las columnas ID_Empleado, Habilidad y Idioma. Un empleado puede tener múltiples habilidades y múltiples idiomas, pero las habilidades y los idiomas no están interrelacionados (por ejemplo, el hecho de que un empleado hable francés no afecta a su habilidad de programar en Python).

¿Cómo normalizar a 4FN?
  • Verificar la 3FN: Asegúrate de que la base de datos ya cumpla con la tercera forma normal (3FN).
  • Identificar dependencias multivalor: Busca tablas que representen más de una relación independiente. En el ejemplo anterior, la tabla Empleado tiene dos relaciones independientes: una entre empleado y habilidad, y otra entre empleado e idioma.
  • Crear tablas separadas: Si se detecta una dependencia multivalor, se deben crear tablas nuevas para cada relación independiente.La tabla original Empleado con ID_Empleado y Habilidad.
  • Una nueva tabla Empleado_Idioma con ID_Empleado e Idioma.
  • Nota: Esto solo aplica si no hay una interdependencia entre las columnas. Si una habilidad solo puede realizarse en un idioma específico, la relación no es independiente y la tabla original no violaría la 4FN.
  • Garantizar que cada tabla tenga una sola relación: El objetivo es que cada tabla represente un único tipo de relación independiente.
Beneficios de la 4FN
  • Elimina la redundancia: Evita repetir datos innecesariamente.
  • Previene anomalías: Reduce los problemas de inserción, actualización y eliminación de datos.
  • Mejora la integridad de los datos: Al tener menos redundancia, la probabilidad de inconsistencias disminuye.
Hola,
Sabian que en Postman existen funciones para diferentes temas, hoy les hablare de la función: $guid

En Postman, la función $guid se utiliza para generar automáticamente un identificador único universal (UUID). Para usarlo, simplemente escribe {{$guid}} en cualquier campo de la solicitud (URL, cuerpo, encabezados) para que Postman genere un nuevo UUID cada vez que se ejecute la solicitud.
Grafana es una plataforma de análisis y visualización de código abierto que permite a los usuarios monitorear y analizar métricas de diversas fuentes de datos a través de paneles interactivos y personalizables. Funciona conectándose a diferentes fuentes de datos (como bases de datos, servicios en la nube y sistemas de monitoreo), extrayendo información y transformándola en gráficos, paneles y alertas para facilitar la comprensión de tendencias y el rendimiento de aplicaciones e infraestructuras en tiempo real.


Cómo funciona:
  1. Conexión a fuentes de datos: Grafana se conecta a sus fuentes de datos existentes, como bases de datos de series temporales (ej: Prometheus, InfluxDB), servicios en la nube (ej: Azure, DynamoDB) o sistemas de registro (ej: Loki).
  2. Consulta y procesamiento de datos: Una vez conectado, Grafana puede consultar los datos. Utiliza plugins para interactuar con estas fuentes, y ofrece herramientas de transformación para manipular y combinar datos directamente en la plataforma.
  3. Visualización en paneles: Los datos se transforman en visualizaciones como histogramas, gráficos, mapas geográficos, etc. y se organizan en "paneles de control" interactivos y dinámicos.
  4. Generación de alertas: Se pueden configurar alertas para ser notificadas cuando una métrica supere un umbral definido. Las notificaciones pueden enviarse por correo electrónico, Slack u otros servicios.
  5. Análisis y colaboración: Los usuarios pueden explorar los datos para identificar tendencias, solucionar problemas o tomar decisiones informadas. Los paneles se pueden compartir fácilmente con otros miembros del equipo a través de enlaces o instantáneas.
Como buscar el log de un servicio en Grafana con loki?
Ingresar a Grafana -> Home -> Explore -> loki, en "Label filters" en el primer filtro se debe seleccionar la opción: 'namespace' y ahí colocar el namespace del servicio a buscar; luego agregar otro filtro y seleccionar la opción: 'app' y ahí colocar el nombre del servicio a buscar. Posteriormente, presionar el botón de buscar y listo.

Como buscar el log por rango de fecha y tiempo en un servicio?
Buscar la opción: 'Local browser time' la del icono del reloj, en la opción de: "Absolute time rage" en From (Fecha y hora de inicio) y To (Fecha y hora de finalización), luego presionar el botón: Apply time range y listo, el sistema buscar en el log del servicio en ese rango de fecha y hora.

Puedo exportar un log de un POD en Grafana?
Sí, puedes exportar logs de un POD en Grafana, pero para eso necesitas usar una integración con un sistema de gestión de logs como Loki. Grafana en sí mismo no maneja los logs, sino que los visualiza desde fuentes de datos como Loki, que está diseñado para almacenar y consultar logs.

Como hacerlo?
Despues de buscar el log del servicio, oprimir el botón: 'Query inspector' -> 'Data' y luego seleccionar, si se descarga en CSV o el txt: listo.