Building Resilient Streaming Systems on GCP: Módulo 8

Serverless Messaging with Cloud Pub/Sub

Manage Data Pipelines with Cloud Data Fusion and Cloud Composer

Existen dos maneras diferentes en que el flujo de trabajo puede ejecutarse, la primera es programándola para ciertas horas y días específicos, y la segunda forma se basa en desencadenadores donde se ejecutan siempre que existan nuevos archivos de datos.

Existen dos patrones generales para los flujos ETL, PUSH (controlado por eventos) y PULL

Para realizar un manejo con PUSH se puede usar Cloud Functions para crear un flujo de trabajo controlado por eventos, además la activación de los mismos se realiza dentro de un bucket de GCS, generalmente la tecnología PUSH es buena cuando se pretende distribuir transacciones en un proceso definido.

En caso de que el flujo de trabajo deje de funcionar se procede a investigar las DAGs, en estas se puede supervisar cuando se ejecutaron las canalizaciones y el estado de las misma de éxito o fracaso. Una herramienta para diagnosticar errores en el flujo de trabajo son los registros generales de GCP, esto dado que Airflow lanza otros servicios GCP a través de tareas de esta forma se puede hacer una búsqueda filtrada y encontrar los errores.

Building Resilient Streaming Systems on GCP

El streaming nos permite obtener información en tiempo real en algún tablero o visualizador, todos estos datos se los ingiere a través de Pub/Sub y se los envía por Dataflow que puede interpretar y analizar los datos, si los datos llegan tarde en un caso de emergencia estos dejan de ser valiosos, por lo tanto la canalización deber tener la menor latencia posible, se puede aplicar un modelo de transmisión en paralelo para que ningún dato espere su turno y aumentar el tiempo de latencia, la velocidad dependerá de que tan ocupado se encuentre el servidor para ciertas horas. Un claro ejemplo de tener datos en tiempo real es poder evaluar los tweets negativos y positivos de algún producto comercial, también es aplicado para evitar fraudes, eventos, juegos, comercio de acciones, etc.

Image for post
Image for post

Las principales características de interés son Volumen, Velocidad, y Variedad de datos, donde el volumen nunca deja de crecer rápidamente, la velocidad también puede ser muy variable dependiendo de la fecha actual, en caso de llevar un flujo constante durante el año los números alrededor del mundo se disparan cuando llega el viernes negro por tal motivo también se recomienda diseñar un sistema que soporte esta carga. La variedad de datos consiste en tener datos estructurados y no estructurados (voz, imágenes).

Cloud Pub/Sub, nos permitirá manejar volúmenes variables de datos, Cloud Dataflow nos ayudará en el procesamiento de datos sin demoras indebidas, y BigQuery, para los datos variables.

Serverless Messaging with Cloud Pub/Sub

Cloud Pub/Sub proporciona un sistema de distribución y entrega de datos totalmente administrado, para diferentes propósitos, popularmente sirve para acoplar diferentes partes de un sistema, también puede conectarse con aplicaciones dentro de Google Cloud y otras nubes de información externas. Con Cloud Pub/Sub no es necesario que las aplicaciones no estén en línea y disponibles siempre como comunicarse entre sí, simplificando así el diseño de nuestro sistema. Una aclaración es que Pub/Sub no es un software, es un servicio, es decir no es necesario instalar algo. Las bibliotecas están disponibles en C-, GO, Java, Node.js, Python y rubí en cualquier idioma.

Image for post
Image for post

Un ejemplo del uso de Pub/Sub es actualmente en Google donde para lograr distribuir todas la información de la red alrededor del mundo se realizan varias copias para que sean accesibles con una mínima latencia por el usuario, esto conllevaría a usar varios rastreadores y alterar los índices y que sean diferentes para cada usuario, para ello se usa Pub/Sub para distribuir a medida que el rastreador sale este se agarra a cada web de todo el mundo y finalmente es recogido por todas las copias locales del índice de búsqueda para ser indexadas. En promedio Google indexa tres veces al día a través de Pub/Sub. También es compatible con HIPAA que ofrece cifrado de extremo a extremo, los mensajes se almacenan en múltiples ubicaciones para mayor durabilidad y disponibilidad. Usted controla las cualidades de su solución Cloud Pub/Sub para tener un equilibrio entre escala, baja latencia y alto rendimiento.

El funcionamiento de Pub/Sub se basa en dos estructuras de datos, el tema y la suscripción, donde el cliente es el que crea el tema llamado editor y el cliente que crea la suscripción es llamado suscriptor, esto permite a un usuario externo poder crear un nuevo enlace de evento el cual se conectara directamente con el tema a través de un mensaje directo, este a su vez se dirigirá al directorio de la compañía a través de la suscripción del cliente que acaba de ingresar, Cloud Pub/Sub no está limitado a un suscriptor, puede tener varios suscriptores como subscriptores, existen casos donde se requiere que un ser humano active el acceso, existen varios trabajadores pero hay casos donde ninguno está disponible es donde Cloud Pub/Sub pone el mensaje a disposición de todos ellos y basta con que una persona busque el mensaje.

Image for post
Image for post

También se puede distribuir los mensajes, patrones de publicación y suscripción, de esta forma se puede organizar la distribución y mantenerlo de una forma ordenada, y puede operar de forma paralela con el procesamiento. Se puede tener múltiples suscriptores que usen los mismos datos y todos los datos son enviados a diferentes suscriptores. Tiene dos modelos de entrega Push y Pull, en modelo de Pull los clientes estarán llamando periódicamente para mensajes y Pub/Sub solo entregará los mensajes desde la última llamada, este tendrá que reconocer el mensaje como un paso, se implementa a menudo en sistemas de cola de trabajo por hacer, por lo que es interesante no conocer el mensaje antes de tenerlo en su totalidad, los mensajes se almacenan máximo siete días. En el modelo Push utiliza un punto de conexión HTTP, donde se registra como suscriptor de esta forma Pub/Sub le llamara con el último mensaje para ello debe responder con ‘status 200 ok’, indica que se realizó con éxito la entrega.

La forma en que funcionan los reconocimientos es garantizar que cada mensaje se entregue al menos una vez, pero lo que sucede si tienes dos suscriptores puede ser que uno si reconozca y el otro no, Pub/Sub seguirá tratando de entregar el mensaje hasta siete días, también se puede establecer una fecha límite para la confirmación, además si usted conoce el tiempo promedio en procesar el mensaje puede definir un tiempo mayor para garantizar que no intenta volver a entregar el mensaje.

Image for post
Image for post

Se puede escribir una aplicación que controle los datos replicados y fuera de orden, ahorrando de esa manera la cantidad de procesamiento que esto conlleva, en general los mensajes se entregan en orden, pero no es posible confiar en eso con Pub/Sub dado porque es un servicio global y a su escalabilidad, se tiene una malla donde un mensaje toma una u otra ruta más lenta lo cual no garantice que lleguen en orden los mensajes.

El problema de mensajes duplicados también es tratable mediante Dataflow y BigQuery que puede desduplicarlos, el flujo de datos no se podrá ordenar en el sentido de proporcionar un orden secuencial exacto de cuando se duplicaron, sin embargo, se podrá identificar los datos tardíos.

Pub/Sub también proporciona soporte para el gran volumen de datos, su solución un buffer que pueda distribuir de la mejor manera los datos cuando estos tengan un volumen excesivo y lleguen casi al limite

Autores:

  • Steve Acosta
  • Matías Idrobo
  • Williams Ortiz
  • Paúl Ramírez

Conoce más: bootcampai.org/di

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store