Conexión de dos servidores de aplicaciones nodos a una base de datos monogo db

Este es un problema de diseño que enfrenta mi empresa. Estamos construyendo una plataforma de educación en línea, en este tenemos un caso de uso interesante.

Tenemos sitio de administración actualmente (un extremo frontal, un back-end, un servidor mongodb), aquí admin creará los cursos, el contenido, dividir a los estudiantes en lotes. tenemos mentores, todos los contenidos de TA, clases, gestión de lotes se hace de este lado.

Ahora tenemos otra aplicación de vanguardia estática hasta ahora, para estudiantes. Ahora tenemos que diseñar una interfaz separada para los estudiantes para acceder a este curso, asignación, contenido que fue creado por admin.

El requisito del negocio, el sitio del estudiante nunca debe bajar, debe estar disponible cada vez y quieren que los casos de estudiante y administración sean separados por razones de seguridad.

Aquí viene el problema de la arquitectura, ahora tenemos tres opciones

  1. Separar la parte delantera, al final, base de datos para administradores y estudiantes. . Aquí tenemos que buscar el contenido de la aplicación de administración, porque todo el contenido se sentará en la base de datos de administración. Si el servidor de aplicaciones de administración está desactivado, no podemos buscar los datos que harán que la aplicación de los estudiantes se acabe. La redundancia de datos existe aquí.

  2. Servidores de aplicación separados para estudiantes y administradores pero solo db. Mis ideas están en esta sólo porque aquí no necesitamos duplicar los datos. Pero aquí dependemos del servidor de aplicaciones de administración para buscar los datos porque todos los datos del curso se sentarán en administración solamente y los modelos se definen en el servidor de aplicaciones de administración solamente

  3. Todos los datos de estudiante y administración en un solo extremo frontal, final trasero, mongo db server. Aquí no hay redundancia, todo es monolito, pero aquí vienen los problemas de abstracción en tener un marco de seguridad y notificación separado como ese, porque como los requisitos varían, cómo podemos manejar eso. Tenemos sentido del código hinchable.

Estaba tirando de mi pelo sobre cómo resolver esto, así que por favor dame información sobre cómo acercarme a esto, es que hay algo que me faltaba, hay algo raro, por favor házmelo saber.

Estamos usando la pila MEAN

Podemos utilizar redis para gestionar los datos para mostrar a los estudiantes en lugar de llamar al sitio de administración cada vez para el contenido. Hay muchos intercambios y opciones, estoy en dilema a qué lado tengo que ir.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por bytebard


2 Respuestas:

  • Para abordar este problema de arquitectura en tu plataforma de educación en línea utilizando la pila MEAN y conectando dos servidores de aplicaciones Node.js a una base de datos MongoDB, puedes considerar las siguientes sugerencias:

    • Separar la parte delantera y trasera para administradores y estudiantes: En esta opción, debes tener en cuenta la redundancia de datos y la dependencia de la disponibilidad del servidor de aplicaciones de administración para acceder a los datos. Si el servidor de administración se cae, la aplicación de los estudiantes también se verá afectada.
    • Servidores de aplicación separados para estudiantes y administradores, con una sola base de datos: Esta opción es interesante ya que evita la duplicación de datos. Sin embargo, la dependencia del servidor de aplicaciones de administración para buscar y definir los modelos de datos puede generar una fuerte interconexión entre los sistemas.
    • Todos los datos en un único entorno monolítico: En esta opción no hay redundancia de datos, pero puede haber problemas de abstracción y desafíos en la gestión de la seguridad y las notificaciones, especialmente si los requisitos para estudiantes y administradores varían significativamente.

    Para abordar estas opciones, puedes considerar las siguientes estrategias:

    • Separación de responsabilidades: Asegúrate de que los servidores de aplicaciones de administración y de estudiantes tengan tareas y responsabilidades claramente definidas para evitar la interdependencia excesiva.
    • API RESTful: Puedes implementar una API RESTful que permita a los servidores de aplicaciones comunicarse entre sí y acceder a los datos de la base de datos de forma segura y eficiente. Esto puede ayudar a mantener la separación de los casos de uso de administración y de estudiantes.
    • Cache intermedia como Redis: Puedes usar un sistema de caché intermedio como Redis para almacenar y gestionar los datos que se muestran a los estudiantes, lo que reducirá la necesidad de buscar los datos en el servidor de administración cada vez que los estudiantes accedan a la plataforma.
    • Microservicios: Otra estrategia a considerar es la implementación de microservicios, donde cada funcionalidad importante se implementa como un servicio independiente. Esto puede permitir una mayor modularidad y escalabilidad en tu arquitectura.

    En resumen, es importante considerar las ventajas y desventajas de cada opción y elegir la que mejor se adapte a las necesidades y restricciones de tu plataforma. También es recomendable realizar pruebas y prototipos para evaluar el rendimiento, la escalabilidad y la mantenibilidad de la solución elegida. ¡Espero que esta información te sea útil para abordar tu dilema arquitectónico!

    Respondida el Dec 18, 2020 a las 07:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Análisis de las opciones:

    Opción 1:

    Ventajas: Separación clara de preocupaciones entre administradores y estudiantes. Mayor seguridad. Desventajas: Redundancia de datos. Dependencia de la aplicación de administración para recuperar datos.

    Opción 2:

    Ventajas: Sin redundancia de datos. Menos dependencia de la aplicación de administración. Desventajas: Todavía depende de la aplicación de administración para recuperar datos. Posible cuello de botella si la aplicación de administración está sobrecargada.

    Opción 3:

    Ventajas: Sin redundancia de datos. No depende de la aplicación de administración. Más fácil de implementar y mantener. Desventajas: Código monolítico con problemas de abstracción. Posibles problemas de seguridad si no se implementa correctamente.

    Recomendaciones:

    Para requisitos de alta disponibilidad y seguridad:

    Opción 1: Separar la base de datos para administradores y estudiantes. Utilice Redis (o una solución similar) para almacenar en caché los datos que necesitan los estudiantes. Opción 2: Servidores de aplicaciones separados para estudiantes y administradores, pero solo base de datos. Implemente un sistema asincrónico para recuperar datos de la aplicación de administración sin bloquear la aplicación de los estudiantes.

    Para requisitos de alta velocidad y simplicidad:

    Opción 3: Todos los datos en un solo servidor de aplicaciones, base de datos y front-end. Implemente medidas de seguridad sólidas para separar el acceso de administradores y estudiantes.

    Consideraciones adicionales:

    Redis: Redis puede almacenar en caché datos para mejorar el rendimiento, pero no garantiza la coherencia de los datos si la aplicación de administración se actualiza. Escalabilidad: Si la plataforma crece significativamente, es posible que deba considerar la posibilidad de escalar horizontalmente la aplicación de administración o utilizar una arquitectura orientada a servicios. Seguridad: Implemente medidas de seguridad sólidas, como la autenticación y autorización, para restringir el acceso a datos confidenciales. Pruebas: Realice pruebas exhaustivas para garantizar la disponibilidad, el rendimiento y la seguridad del sistema.

    Respondida el Dec 18, 2020 a las 08:07 - por Gemini

    Votos positivos: 0 | Votos negativos: 0