Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trabajar todo como servicio. #157

Open
JohnnDev opened this issue Oct 30, 2023 · 2 comments
Open

Trabajar todo como servicio. #157

JohnnDev opened this issue Oct 30, 2023 · 2 comments

Comments

@JohnnDev
Copy link

A esto me refiero que todo sea un servicio divido, es decir, un servicio para el usuario, para registrarte loguearte cosas asi, después otro servicio aparte que se encargue de la subida de lo datos, y otro servicio para hacer el analisis, cada servicio, deberia tener un servidor aparte, es como una api en microservicios, las comunicarias por rest, aparte podrian agregar un sistema para controlar las caidas de esos servidores, esto con el objetivo de descentralizar y sea un poco mas dificil de tumbarlo, es mas o menos una propuesta para seguridad, quisiera saber que piensan.

@ScorpionConMate
Copy link

Con el poco tiempo que hay, es practicamente imposible montar una estructura de microservicios
Es mas facil levantar el monolito que tener que levantar 10k de microservicios y sin saber cual es que esta abajo realmente

@mastepanoski
Copy link

Dejo algunas ideas, para lograr aprovechar herramientas disponibles para ahorrar implementar algunos servicios y para escalar:

En cuanto a la seguridad, se podría utilizar Keycloak para manejar la gestión y autorización de usuarios, o bien AWS Cognito en combinación con Cerbos.dev (https://cerbos.dev/ecosystem/cerbos-aws-cognito). De esta manera, se implementaría una solución ya existente sin necesidad de reinventar la rueda.

Para el procesamiento por lotes y tareas, se podría utilizar OptimalBits/Bull junto con Redis (https://github.com/OptimalBits/bull).

Además, se podría iniciar con un Microlito (https://www.paradigmadigital.com/techbiz/microservicios-vs-microlitos-vs-monolitos-ventajas-desventajas/), desarrollado en NestJS+Fastify (https://docs.nestjs.com/techniques/performance) o utilizando HapiJS con plugins (https://hapi.dev/, desarrollado por Walmart para gestionar el volumen de carga en un Black Friday).

En cuanto al autoescalado, si no se utiliza Kubernetes y la posibilidad de escalado horizontal, se podría utilizar PM2 con autoscaling (https://vexell.medium.com/autoscale-node-js-applications-with-pm2-and-pm2-autoscale-module-3129582dc72c). Sin embargo, hay que tener en cuenta que PM2 tiende a reiniciar el servicio si un proceso de NodeJS alcanza el límite de memoria asignado. Creando varias instancias del microlito que contiene todos los módulos sería una forma de gestionar la carga utilizando clustering con PM2, dentro del límite de escalado vertical del servidor (memoria, caché en disco y procesadores).

Finalmente, una arquitectura CQRS sería lo ideal, ya que permite manejar las altas escrituras por un lado y gestionar las lecturas (aunque sea con retraso) por otro.

Espero les sirva esta información para facilitar la implementación del backend y la infraestructura.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants