Atualmente, tenho dois microsserviços. Vamos chamá-los A
e B
.
O banco de dados no microsserviço A
possui a seguinte tabela:
A
|-- users
O banco de dados no microsserviço B
possui a seguinte tabela:
B
|-- trackers
Os requisitos declaram que users
e trackers
têm um relacionamento muitos para muitos.
Não sei como lidar adequadamente com isso em uma arquitetura de microsserviços.
Eu pude ver isso funcionando de uma de três maneiras:
- Uma
user_trackers
tabela é adicionada ao microsserviçoA
. Isso age de maneira semelhante a uma tabela de junção que contém "chaves estrangeiras" parausers
etrackers
. - Uma
owners
tabela é adicionada ao microsserviçoB
. Esta tabela age de maneira semelhante a uma tabela de junção polimórfica. Isso permitiria a qualquer serviço criar uma associação com um rastreador. Isso pode ser algo como isto:B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id
- Mantenha registros para
users
etrackers
em cada microsserviço. Mantenha-os sincronizados com algum tipo de sistema pubsub.
Originalmente, eu iria para a opção 2 porque gostava de preservar os limites da transação. Eu posso criar um rastreador e associá-lo a algo atomicamente. No entanto, parece fora do escopo do microsserviço B
. Por que o microsserviço se B
preocupa com o fato de A
querer criar uma associação?
Sinto que provavelmente há um bom padrão aqui do qual não estou ciente. Alguma das opções que eu expus faz sentido? Existe outra opção que pode fazer mais sentido?