Tengo un servicio web CRUD, y se me ha encomendado la tarea de tratar de encontrar una manera de garantizar que no perdamos datos cuando la base de datos no funcione. Todos sabemos que si la base de datos deja de funcionar, no podremos obtener "lecturas", pero para un subconjunto específico de las operaciones queremos asegurarnos de no perder datos.¿RabbitMQ, ZeroMQ, Service Broker o algo similar es una solución adecuada para crear un servicio web de base de datos de alta disponibilidad?
Me ha dado la impresión de que esto es algo que está cubierto por servicios como 0MQ, RabbitMQ o uno de los servicios de Microsoft MQ. Aunque después de unos días de lectura e investigación, ni siquiera estoy seguro de que los mensajes de los que estamos hablando en los servicios de MQ incluyan operaciones de bases de datos. Sin embargo, estoy 100% seguro de que puedo hacer cola en todos los hello worlds que pueda esperar.
Si puedo usar una cola de mensajes para agregar una capa de protección a la base de datos, me inclino hacia Rabbit (porque parece persistir por fallas) pero dado que el objetivo es un databse del servidor Microsoft SQL, quizás uno sus soluciones (como SQL Service Broker o MSMQ) son más apropiadas.
La verdadera pregunta fundamental de la que todavía no estoy seguro es si estoy jugando con la baraja adecuada (por así decirlo).
Con el deseo de un servicio web de alta disponibilidad, que continúa funcionando si la base de datos falla, ¿tiene sentido poner una instancia de Rabbit MQ "entre" el servicio web y la base de datos? ¿Quizás el enlace correcto en la cadena es que RabbitMQ envíe mensajes al servidor web?
¿O hay alguna otra solución para lograr esto? Hay una serie de ideas perdidas en este momento sobre cómo encontrar una manera de reiniciar los weblogs en caso de corte de la base de datos o algo así ... pero todavía estamos en las primeras etapas que (al menos yo) no tengo ni idea de lo que ' voy a hacer
¿La cola de mensajes es la solución correcta?
No hay problema - también considere que el uso de las colas aún no evitará toda la pérdida de datos; por ejemplo, las solicitudes del navegador del cliente pueden perderse si IIS está demasiado ocupado para enviarlas. –
Service Broker se puede usar fácilmente con EF o ADO.Net. Incluso funciona muy bien con async/await. –