Definizione dei confini dei microservizi e gestione delle dipendenze

1

Sto leggendo molto sui microservizi, ma una cosa mi è ancora un po 'oscura.

Diciamo che nella mia organizzazione ho 2 abilità:

  1. Estrai nomi di strade da uno o più blocchi di testo
  2. 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!

    
posta RonLut 31.07.2018 - 16:28
fonte

2 risposte

0

Penso a questo problema in primo luogo in termini di superficie API supportable. Hai davvero bisogno di esporre il servizio di estrazione di nomi di strade a chiamanti esterni che non sono sotto il tuo controllo? Puoi, ovviamente, ma hai bisogno? E se non ne hai bisogno, questo deve essere un intero processo distinto, con le considerazioni operative extra, o può essere una libreria?

In secondo luogo, il servizio di pagine importanti è probabilmente un front-end su un processo batch / processo. Ci vuole tempo per eseguire la scansione di un sito e produrre un report, e bisogna essere consapevoli dei termini del servizio, ecc. Quindi la superficie dell'API è diversa: invia una richiesta per estrarre pagine importanti, ottenere aggiornamenti in corso, annullare, ottenere il report , ecc. Potrebbero esserci molte biblioteche o altri servizi consumati da questo servizio, di cui la via di estrazione è solo una.

Quindi vedo questo come un client che affronta il servizio aggregato con una superficie batch / lavoro che consuma diverse funzioni / servizi interni / di libreria, la cui implementazione dipende da fattori operativi.

    
risposta data 31.07.2018 - 17:41
fonte
0

While thinking about the architecture of this solution (and others), I'm not sure about what ability stands for itself and how to deal with the dependencies.

Non penso che troverai una risposta oggettiva a questo. Sta già cadendo nel territorio dell'opinione pubblica. Gli Stati membri non sono una legge codificata. Non credo che nessuno qui in realtà possa rispondere, questo problema perché non c'è abbastanza contesto

Sembra che le tue opzioni siano buone, quindi ¯ \ _ (ツ) _ / ¯ vai con quello che ti rende più constrongvole

    
risposta data 31.07.2018 - 16:53
fonte

Leggi altre domande sui tag