Quando creare più microservizi piuttosto che funzioni interne

5

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!

    
posta tupan 19.11.2018 - 22:23
fonte

2 risposte

4

I limiti dei microservizi sono in genere limiti del dominio.

Quindi, se disponi di due metodi, entrambi avrebbero concettualmente accesso alla stessa struttura di dati di back-end, ma ognuno servirebbe un dominio aziendale diverso, quindi rientrano in diversi microservizi.

Ad esempio, potresti avere un metodo di rilevamento delle presenze e un altro metodo utilizzato per calcolare i salari in base alla presenza. Il primo è utilizzato principalmente a fini di controllo, per garantire che teniamo traccia di chi era in ufficio quando, mentre l'altro è utilizzato per calcolare l'orario di lavoro di un dipendente.

Nonostante il fatto che entrambi avrebbero accesso agli stessi dati (time in and time out), si passerebbe al microservizio di controllo, mentre l'altro rientrerebbe nel microservizio del libro paga.

Riferimento: Costruzione di microservizi, progettazione di sistemi a grana fine di Sam Newman

    
risposta data 19.11.2018 - 22:50
fonte
4

I microservizi fanno parte della soluzione ai problemi di scalabilità. Pensa ai microservizi come dipendenti che possono elaborare diversi compiti. Quindi, se hai più calcoli di budget da eseguire, puoi semplicemente aggiungere più dipendenti e dare manuali predefiniti per svolgere compiti specifici.

L'implementazione dei microservizi ha un costo e vantaggi. La decisione spetta a te, considerando questo vantaggio / costo. Naturalmente, i benefici non sono applicabili a tutti i casi. Non risolverete i vostri problemi emotivi delegando le azioni a più dipendenti.

Il costo è che l'implementazione è complessa: devi essere sicuro che i dipendenti possano lavorare in modo indipendente e coordinato. Quindi, sarà necessario sviluppare più manuali e mettere più dipendenti per svolgere tale compito. Ma se ci riesci, ad esempio, sarai in grado di eseguire più vendite. In sostanza, si aggiungono più code a un processo di vendita: più desk accettano comandi dai client, più desk accettano box dai packager, più desk accettano box e li consegnano.

Nel tuo caso specifico, non vedo chiaramente come l'architettura dei microservizi possa essere d'aiuto. I problemi che indirizzi sono programmatici, non architettonici. Se si desidera creare un "gestore risorse", come lo si chiama, pensare al manuale (o ai manuali) da scrivere per ciascun dipendente aggiuntivo per eseguire tale attività. Se è possibile creare una procedura in grado di gestire il processo senza influire sull'integrità del database e senza dipendenti tra dipendenti che utilizzano lo stesso manuale, si è pronti. Ad esempio, è possibile aggiungere un (micro) servizio con nuovi dipendenti che eseguono calcoli atomici (ognuno calcola un articolo) e un altro di dipendenti che somma solo valori. Personalmente non lo farei, dal momento che i dipendenti della seconda linea di banchi creeranno dipendenze dai risultati della prima riga (ad esempio una somma non può essere eseguita fino a ricevere tutti i calcoli, quindi se un dipendente della calcolatrice ha un problema, un gruppo di persone stai aspettando intorno a un tavolo delle somme finché non arriva, e se non lo fa, tutti i processi in sospeso richiederanno di essere gestiti).

Come detto, penso che non hai bisogno di microservizi per affrontare questo problema, ma non posso esserne sicuro, dal momento che non conosco i problemi esatti qui. Se imparassi, personalmente codificherei entrambi, per provare le differenze.

    
risposta data 22.11.2018 - 05:25
fonte

Leggi altre domande sui tag