Estoy creando una aplicación web usando NodeJS. Implementé la aplicación en el servidor web de AWS beanstalk y desasocié algunas tareas pesadas. E implementé las tareas pesadas en diferentes trabajadores de AWS beanstalk. El servidor web principal está ejecutando el trabajador con SQS (cola de AWS).
El servidor web principal tiene una gran capa de base de datos para conectarse, obtener y guardar en la base de datos. Los trabajadores necesitan algunas acciones de base de datos, cada tipo de trabajador necesita acciones diferentes que ya se implementaron en la capa de base de datos del servidor web principal.
Así que estoy tratando de encontrar una manera de usar la capa de base de datos del servidor web sin duplicarla en cada tipo de trabajador (eso es lo que estoy haciendo ahora).
Lo que pensé es desacoplar la capa de base de datos de la aplicación principal e implementarla en un servidor web, pero parece un desperdicio porque no necesito escuchar solicitudes en la capa de base de datos todo el tiempo, necesito algunas acciones bajo demanda.
Adjunto una foto de como queda:
¿Hay alguna buena solución para eso?
Simplemente use la integración RDS nativa con su entorno Beanstalk: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html
¿Cuántas operaciones de guardar/cargar está haciendo de los trabajadores? ¿Cuántos trabajadores están corriendo al mismo tiempo? Creo que es difícil sugerir una solución única sin comprender cuántos trabajadores hay allí y cuántos datos se guardarán.
En general, puedo pensar en múltiples soluciones en realidad:
Puede abrir la API en el servidor web, por lo que una vez que el trabajador finalice, llamará al servidor web. Si tiene muchos trabajadores, no funcionará, por lo que es posible que necesite trabajadores intermedios (llamémoslo el "trabajador guardado"), por lo que los trabajadores actuales pondrán en cola el "trabajo guardado", luego el "trabajador guardado" llamará al API del servidor web, esto garantizará que el servidor web no se sobrecargue con operaciones de guardado.
Puede crear una instancia duplicada del servidor web (llamémoslo "servidor web del trabajador") que es para guardar los resultados de los trabajadores, por lo que los trabajadores enviarán el resultado a un nuevo SQS, en este "servidor web del trabajador" estará escuchando a las solicitudes de guardado en el SQS. Puede controlar en qué modo funcionará el servidor web configurando la variable de entorno, por ejemplo.
Tal vez pueda extraer la capa de base de datos en un paquete o biblioteca que se usa en el servidor web más los trabajadores también, pero debe tener cuidado de no abrir muchas conexiones en paralelo a la base de datos o realizar una gran cantidad de db operaciones al mismo tiempo.