Sto leggendo molto sui microservizi, ma una cosa mi è ancora un po 'oscura.
Diciamo che nella mia organizzazione ho 2 abilità:
- Estrai nomi di strade da uno o più blocchi di testo
- Dato un contesto di un sito web, comprendi quali pagine in esso conterranno molto probabilmente nomi di strade (a.k.a "pagina importante") in base a un'euristica a livello aziendale
Ora, al mio requisito aziendale viene assegnato un sito Web, restituisco un elenco di indirizzi estratti e per ciascun indirizzo, indipendentemente dal fatto che provenga da una "pagina importante" o meno.
L'abilità 1 è puramente tecnica, mentre l'abilità 2 è in qualche modo intermedia tra tecnico e commerciale.
Pensando all'architettura di questa soluzione (e di altri), non sono sicuro di quale abilità si tratti di se stessa e di come gestire le dipendenze.
Opzione 1 - Servizi separati, nessun gateway
IclientichedesideranoaverelestradeestrattedaunsitoWebesapereselastradaprovienedauna"pagina importante" o meno dovranno effettuare 2 richieste. I clienti che desiderano estrarre solo strade dal testo eseguiranno 1 richiesta.
Pro:
- I servizi non hanno bisogno di conoscersi
Contro:
- Alcuni client devono eseguire 2 chiamate di rete ogni volta
- Le modifiche ai servizi causano modifiche a tutti i client
Opzione 2 - Separare i servizi con un gateway
Pro:
- Iclienteseguonosempresolo1chiamata
- Lemodificheaiservizinoncauserannomodificheaiclient(ilclient2puòessererisoltoinstradandoleancheattraversoilgateway)
Contro:
- Illivellogatewaydiventaillivello"caos", poiché ogni nuovo requisito o cliente aziendale causerà un nuovo endpoint
- Più chiamate di rete in totale rispetto ad altre soluzioni
Opzione 3: un servizio tecnico, un servizio composito
Pro:
- I client eseguono sempre solo 1 chiamata
Contro:
- Il servizio composito dipende totalmente dal servizio stradale
So che non voglio adottare alcun approccio estremo - non voglio limitare i microservizi a un solo endpoint, ma dall'altra parte non voglio avere microservizi con 100 responsabilità.
Dove dovrei disegnare la linea?
Cose importanti da considerare:
- il client attende la risposta (sincrona)
- l'abilità 2 potrebbe ottenere ulteriori euristiche e alcuni altri requisiti in futuro, mentre l'abilità 1 rimarrà la stessa. Questa è la ragione principale per cui non penso che unire le due abilità in un servizio sarà buono (le 2 abilità sono possedute e pianificate da squadre diverse).
- capacità 2 può essere utilizzata da sola in futuro, cambia la decisione?
Desideroso di sentire le tue opinioni!