LatamQChallenge: Lógica y Arquitectura

Termino de analizar las funcionalidades y defino las reglas del negocio.

hace 3 años   •   3 min de lectura

Por Andrés Tuñón
una aplicación utilizando websocket como solución

Esta es una continuación del post anterior:

LatamQChallenge: Alcance y Funcionalidades
Defino y ajusto algunas relaciones y funcionalidades con su alcance

Ahora sí un diagrama de arquitectura más aceptable:

Diagrama de Arquitectura
Diagrama de Arquitectura

Lógica

A continuación muestro los servicios, lógica y los componentes que estarán involucrados:

  • List Streamer: Seed
    Los streamers estarán registrados previamente con su descripción, colores y otros; no es necesario un CRUD para esta entidad, solo el GET para listar

  • is Streamer Online: Web Socket / Pub Sub
    Es un servicio registrado en Twitch para saber cuando inicia stream alguno de los streamers, luego emito el evento

  • Streamer vs Streamer: Web Socket / Polling / Redis
    Este servicio tiene 2 puntos claves:

    1. Siempre se actualiza los matches en la base de datos
    2. Al haber un cambio se avisa a la aplicación emitiendo un evento
  • Get Clips: Web Socket / Twitch API / Redis
    Es una llamada simple a uno de los servicios de Twitch, lo haré a través de un evento para seguir el patrón (opcional la verdad)

  • Ranking: Web Socket / Polling / Redis
    Este servicio tiene 4 puntos claves:

    1. Siempre se actualiza los Riot accounts en la base de datos
    2. Se genera el ranking
    3. Se guarda en Redis el último orden
    4. En caso de haber un cambio, se envia el evento
  • List Votes (Pick'em): Web Socket / ORM / Database
    Recibe los votos y la gráfica cambia en tiempo real

  • Vote (Pick'em): Serverless Function / ORM / Database
    Se envia el voto al haber decidido y hay una fecha límite para realizarlo, se comprueba la fecha en el controlador

  • Login Twitch: Serverless Function / ORM / Database
    Inicio de sesión con NextAuth y todos sus servicios

  • (Viewer) Request: Serverless Function / ORM / Database
    Se envia la solicitud, hay múltiples requisitos (reglas de negocio) y comprobación contra el juego

  • (Streamer) List Requests: Serverless Function / ORM / Database
    Se listan las solicitudes de los viewers y debe aceptar n cantidad de ellos para permitirles participar

  • (Streamer) Approve Requests: Serverless Functions / ORM / Database
    Es una simple llamada para cambiar el estado de "approved" de los viewers

  • First Vote: Seed asc order
    Es la votación default que les saldrá a todos, seguro será alfabético y estará cargado previamente

Seguro hace falta uno que otro servicio, pero la mayoría de la lógica es esta.

Cambios

Estos son los últimos cambios para las relaciones a partir de como va avanzando.

Relaciones
Relaciones

Además ya el esquema va avanzando:

Vista previa del esquema de Prisma
Vista previa del esquema de Prisma

Referencias

Análisis que leí acerca de la inclusión de un servidor websocket en una infraestructura basada en microservicios (click en la imagen):

https://betterprogramming.pub/building-a-websocket-server-in-a-microservice-architecture-50c6c6432e2b
https://betterprogramming.pub/building-a-websocket-server-in-a-microservice-architecture-50c6c6432e2b

Websocket en NextJS

Implementing WebSocket communication in Next.js - LogRocket Blog
Learn how to integrate Socket.io into Next.js to start a WebSocket connection to share information between the client and server in real-time.

Investigación a futuro

Me preocupa un poco como el servidor websocket soportará tantas conexiones; ya que cada persona entrando al sitio seria una nueva conexión.

Corre la voz

Sigue leyendo