Atualmente, tenho dois microsserviços. Vamos chamá-los Ae B.
O banco de dados no microsserviço Apossui a seguinte tabela:
A
|-- users
O banco de dados no microsserviço Bpossui a seguinte tabela:
B
|-- trackers
Os requisitos declaram que userse trackerstê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_trackerstabela é adicionada ao microsserviçoA. Isso age de maneira semelhante a uma tabela de junção que contém "chaves estrangeiras" parausersetrackers. - Uma
ownerstabela é 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
usersetrackersem 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 Bpreocupa com o fato de Aquerer 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?