Estoy creando una arquitectura de microservicio con Core, rabbitMQ, patrón de estrangulador ... pero tengo que usar una base de datos SQL existente (requisito de transacción).

Al hacer una investigación, no encontré mucha información sobre cómo implementar la base de datos SQL, pero creo que es imposible realizar una operación transaccional en diferentes servicios al mismo tiempo.

1- ¿Todos los servicios deben tener acceso a una base de datos completa?

2- ¿Es una buena idea hacer un servicio exclusivo para realizar operaciones transaccionales?

3- ¿SQL con microservicios es quizás demasiado lento?

No sé si existe un estándar para esto.

Gracias.

0
Danielbahe 18 oct. 2017 a las 18:21

3 respuestas

La mejor respuesta

El objetivo de los microservicios consiste en tener servicios pequeños e independientes que estén desacoplados tanto como sea posible.

Compartir una base de datos común introduce un acoplamiento muy fuerte, y no se recomienda.

Si dos servicios necesitan los mismos datos, podría (a) tener una base de datos diferente para cada uno y replicar los datos, o (b) introducir un tercer servicio responsable del acceso a la base de datos.

Si está buscando una transacción distribuida a mayor escala a través de microservicios, debería buscar cosas como sagas. Por lo general, tendrá un coordinador ("administrador de procesos" en algunos documentos) que rastrea las diversas operaciones y puede compensar o cancelar las acciones que se han realizado si la transacción en su conjunto está destinada a fallar.

3- ¿SQL con microservicios es quizás demasiado lento?

¿Qué te hace pensar eso?

No hay nada sobre SQL que lo haga inadecuado para microservicios. Los microservicios pueden variar enormemente en términos de lo que hacen y lo que requieren. SQL será perfectamente adecuado para algunos microservicios, y posiblemente no sea tan adecuado para otros. Depende del servicio.

3
Gigi 18 oct. 2017 a las 19:59

Parece que necesita transacciones distribuidas en su sistema https://msdn.microsoft .com / es-es / biblioteca / windows / desktop / ms681205 (v = vs.85) .aspx

También hay un buen libro dedicado a microservicios. Incluye transacciones distribuidas y otros patrones utilizados en aplicaciones de bases de microservicios. http://shop.oreilly.com/product/0636920033158.do

1
Stanislav Mekhonoshin 18 oct. 2017 a las 19:33

1- ¿Todos los servicios deben tener acceso a una base de datos completa?

No. Un microservicio tiene su propio esquema relacionado con la raíz / servicio agregado que ofrece. Si un servicio necesita datos de otra entidad, invoca las API proporcionadas por otro micro servicio.

2- ¿Es una buena idea hacer un servicio exclusivo para realizar operaciones transaccionales?

No. Cada microservicio es un límite de transacción por derecho propio. Las transacciones distribuidas, particularmente usando 2PC, no funcionan particularmente bien.

3- ¿SQL con microservicios es quizás demasiado lento?

No tengo totalmente claro por qué haces esa declaración.

0
Alessandro Santini 19 oct. 2017 a las 20:48