Scalabilità dei monoliti rispetto ai microservizi di ridimensionamento

8

Uno degli argomenti più comuni per l'utilizzo dei microservizi è la migliore scalabilità. Ma mi chiedo se questo argomento sia veramente valido.

Diciamo che avevamo un'applicazione che consisteva di 10 microservizi con 9 di loro aventi ciascuna due istanze (per ridondanza) e una di esse con 4 istanze per gestire il carico (scalabilità). L'argomento pro-microservice è quindi che puoi scalare questo miroservice in modo indipendente dagli altri servizi.

Tuttavia, diciamo che tutti i 10 microservizi erano moduli in un singolo monolite e che diverse istanze di questo monolite (ad esempio 22 come la somma di sopra) di questo monolite erano state implementate. Il sistema dovrebbe essere in grado di gestire il carico per una parte critica, perché ci sono abbastanza casi per farlo. Se le istanze contengono la logica del programma non necessaria, l'unico lato negativo sarebbe che il binario e la quantità di RAM necessaria sarebbero leggermente più grandi. Ma poi di nuovo, la differenza non dovrebbe essere troppo grande nella maggior parte dei casi - almeno non rispetto al resto dello stack (si pensi a Spring Boot). L'aspetto positivo di un monito ridimensionato sarebbe un sistema più semplice senza (la maggior parte) le fallacie di un sistema distribuito.

Mi manca qualcosa?

    
posta deamon 08.06.2017 - 15:26
fonte

3 risposte

14

Il punto dei microservizi non è ridurre il carico del processore. Infatti, a causa del sovraccarico della comunicazione e della ripetizione di funzioni che erano un codice di utilità globale, di solito aumenta il carico del processore in qualche modo.

Il punto di abolire un monolite è molto di più per essere in grado di mantenere, distribuire ed eseguire un complesso sistema di funzionalità a tutti . Una volta che il tuo sistema raggiunge una certa dimensione, compilando, testando, distribuendo, ecc., Un monolite diventa troppo costoso per essere fattibile pur mantenendo un tempo di attività decente. Con i microservizi, puoi aggiornare, riavviare o ripristinare un sistema frammentario.

Non commettere errori, non scriviamo microservizi perché è intrinsecamente una soluzione migliore per accoppiare le cose liberamente su interfacce remote. In effetti, la perdita di un tipo strong e la verifica della coerenza che un monolite potrebbe fornire è spesso un grosso inconveniente. Lo facciamo perché dobbiamo perché la complessità ha avuto la meglio su di noi e stiamo sfruttando al meglio una situazione non ottimale.

    
risposta data 08.06.2017 - 15:55
fonte
3

Sei per lo più corretto. Se disponi di servizi rapidi che vengono caricati allo stesso modo, potresti anche installarli tutti su tutte le caselle. Non è "bello" avere una scatola per servizio, ma fa risparmiare denaro.

Tuttavia. non appena si verifica uno squilibrio, ad esempio il servizio 5 prende il 100% della CPU per 2 minuti, si desidera spostare tale servizio nella propria casella in modo che non blocchi tutti gli altri servizi se viene eseguito.

Se le chiamate al servizio 5 scadono a causa del caricamento, solo alcune funzioni della tua app falliranno invece di tutte.

Ora potresti fare la stessa cosa con un monolite ben modulare. Installa tutti i servizi, ma indirizza solo il traffico del servizio 5 verso uno di essi. Mentre non instradare il servizio 5 traffico verso le altre caselle.

Ma di solito i monoliti per loro stessa natura non sono una raccolta di servizi che possono essere installati sulla stessa scatola. Ci saranno chiamate in memoria tra i moduli che causeranno il fallimento dell'app.

    
risposta data 08.06.2017 - 18:34
fonte
1

Il punto dei micro servizi sono 1) separazione delle preoccupazioni e 2) distribuzione del carico. In sostanza, questo ci libera per rendere il miglior servizio di black boxing possibile con tecnologie specifiche per questo compito. I nostri servizi possono essere poliglotti - scritti in diversi linguaggi di programmazione su diversi stack. Diverse squadre possono lavorare su ciascun servizio senza conoscere come gli altri lavorano oltre il contratto della loro api. Questo, nel complesso, consente una base di codice molto più semplice per ogni servizio, che è più facile da eseguire il debug, comprendere e ottimizzare le prestazioni.

    
risposta data 08.06.2017 - 15:43
fonte

Leggi altre domande sui tag