Sto considerando di spostare un'API REST monolitica su un'architettura di microservice, e mi sto confondendo un po 'sull'archiviazione dei dati. A mio avviso, alcuni dei vantaggi dei microservizi sarebbero:
- Scalabile orizzontalmente: posso eseguire più copie ridondanti di un microservizio per far fronte al carico e / o al server che va giù.
- Abbastanza sciolto - Posso cambiare le implementazioni interne dei microservizi senza dover cambiare gli altri, e posso distribuirli e modificarli in modo indipendente, ecc ...
Il mio problema è con l'archiviazione dei dati. Per come la vedo ci sono diverse opzioni:
- Un singolo servizio di Database condiviso da tutti i microservizi - questo sembrerebbe eliminare completamente qualsiasi beneficio derivante dall'accoppiamento libero.
- Un'istanza di database installata localmente su ciascun microservizio: non riesco a vedere un modo per ridimensionarlo orizzontalmente, quindi non penso che sarebbe un'opzione.
- Ogni microservizio dispone del proprio servizio di database - questo sembra il più promettente, in quanto conserva i vantaggi dell'accoppiamento libero e del ridimensionamento orizzontale (utilizzando copie ridondanti del database e / o sharding su più)
Per me, la terza opzione sembra essere l'unica opzione, ma mi sembra incredibilmente pesante e una soluzione molto ipersensibile. Se sto capendo bene, quindi per una semplice applicazione con 4-5 microservizi dovrei eseguire 16-20 server - due istanze di microservizio effettive per microservizio (in caso di errore del server, e per la distribuzione senza tempi di fermo), e due istanze del servizio database per microservizio (in caso di errore del server ecc.).
Questo, francamente, sembra un po 'ridicolo. 16-20 server per eseguire una semplice API, tenendo presente che un progetto realistico avrà probabilmente più di 4-5 servizi? C'è qualche concetto fondamentale che mi manca che spiegherà questo?
Alcune cose che possono esserti d'aiuto durante la risposta:
- Sono l'unico sviluppatore di questo progetto e lo sarà per il prossimo futuro.
- Sto utilizzando Node.js e MongoDB, ma sarei interessato alle risposte indipendenti dalla lingua: una risposta potrebbe anche essere che sto usando le tecnologie sbagliate!