es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál debería ser la clave principal de proyección en el lado de la consulta: CQRS, Event Sourcing, Microservicios?

Tengo una cosa que me confunde.
Tengo 2 microservicios.
Uno crea comandos y otro consume comandos y produce eventos (los eventos se almacenan en Event Store).

En mi ejemplo, los agregados tienen un Guid como ID de entidad, y el Guid se crea cuando se crea el agregado.

Lo que me confunde es, ¿debería esa clave (generada en el lado de escritura) transferirse a través del Evento al lado de consulta (microservicio que creó el comando)?
O tal vez el lado de consulta (proyección) debería tener un ID separado en la base de datos de lectura.
¿O tal vez debería generar alguna clave compartida?

¿Cuál es la mejor solución aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No hay una respuesta única para esta pregunta, ya que la mejor solución dependerá de los requisitos y restricciones específicas de tu sistema. Sin embargo, aquí hay algunas posibles enfoques que puedes considerar:

    1. Transferir el ID de la entidad a través de eventos: Una opción es incluir el ID de entidad generado en los eventos que produce el microservicio de escritura. Esto puede tener la ventaja de simplificar el diseño, ya que no es necesario generar claves o IDs adicionales. Sin embargo, también significa que el microservicio de consulta deberá procesar los eventos para recuperar los IDs de entidad, lo cual podría ser más complejo o menos eficiente que simplemente consultar una base de datos.
    2. Usar un ID separado en la base de datos de lectura: Otra opción es generar un ID separado en el microservicio de lectura y almacenar este ID junto con los datos de la entidad en la base de datos de lectura. Esto puede facilitar y hacer más eficiente la consulta e indexación de la base de datos de lectura, ya que el ID se puede utilizar como clave principal o índice. Sin embargo, también significa que hay dos IDs separados para cada entidad, lo cual podría resultar confuso o propenso a errores.

    3. Generar una clave compartida: Una tercera opción es generar una clave compartida que sea utilizada por ambos microservicios, tanto el de escritura como el de lectura, y incluir esta clave tanto en los comandos como en los eventos. Esto podría ser un UUID u otro identificador globalmente único. Este enfoque puede simplificar el diseño y evitar la necesidad de procesar eventos o mantener IDs separados, pero también introduce una complejidad adicional en la generación y gestión de la clave compartida.

    En última instancia, el mejor enfoque dependerá de los requisitos y restricciones específicas de tu sistema, como el rendimiento, la escalabilidad, la consistencia y la facilidad de uso. Puede ser útil considerar los compromisos entre estos factores al decidir una solución.

Comments are closed.