Sto provando ad architettare (analisi) un'applicazione che abbiamo sul mio lavoro in alcuni microservizi. Prima di iniziare a scendere nella tana del coniglio, volevo chiedere: quando è una buona idea creare un'altra funzione + modello invece di creare un microservizio?
La creazione di un microservizio richiede più lavoro che poche altre funzioni. Soprattutto se ciò comporta qualche duplicazione di dati. Ho visto questa domanda / risposta davvero eccezionale: Come gestisci i concetti condivisi in un'architettura di microservizi?
Mi ha aiutato molto ad iniziare a disegnare la mia macroapplicazione. Ma non riesco ancora a risolverlo; ad esempio, ho più risorse che hanno 1) tipi diversi e 2) attributi diversi per i tipi. Questa è una relazione molti-a-molti.
Esempio
# ResourceType_Attribute table
| ID | type_id | attribute_id |
|----|---------|--------------|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
E avremmo una tabella per tipo e attributo nello stesso microservizio. Ma ora voglio creare un calcolatore di costi della risorsa (una funzione) o un servizio di fatturazione (un altro microservizio). È possibile creare un nuovo microservizio senza grandi oneri?
Se creo un calcolatore di costi, dovrei creare una nuova tabella all'interno del gestore risorse:
# Cost calculator table
| ID | type_id | attribute_id | unit_cost |
|----|---------|--------------|-----------|
| 1 | 1 | 1 | 10|
| 2 | 2 | 1 | 1|
| 3 | 2 | 2 | 4|
Presumibilmente ora che abbiamo una risorsa di type_id 2 che ha un valore di 10 per attribute_id 1 e valore di 10 per attribute_id 2. Questo rende il calcolo dei costi: 10 * $ 10 + 10 * $ 4 = $ 140.
Avere una funzione model + all'interno del gestore delle risorse per gestire questo problema semplifica le modifiche nella colonna unit_cost. Dal momento che so cosa è in attribute_id e in type_id.
D'altra parte, se ho un microservizio completamente nuovo per questa tabella, non saprò quali prezzi sto aggiornando senza consultare l'attributo e le tabelle dei tipi. Avrò solo i loro id e dovrò andare all'altro database per verificare cosa sta succedendo dove.
Comprendo il concetto di questo? In caso contrario, per favore aiutami a chiarire questo problema. Grazie mille!