Normalnie każdy mikroserwis powinien mieć fizycznie wydzieloną bazę danych, ale załóżmy że jesteśmy 'nowocześni' i chcemy mieć Google Clouda...
Nie do końca moim zdaniem. Każdy micro service powinien mieć swoje dane na wyłączność. Czy użyjesz do tego osobnych maszyn, osobnych baz danych, schematów itd. - dla mnie ok. Jak chcesz mieć jedną instancję serwera, to dobrym pomysłem jest podział na osobne bazy danych w jego ramach. W razie czego łatwiej przenieść na inną maszynę
Rozumiem, że 'po staremu' każdy mikroserwis wewnątrz będzie miał 'logikę' odpowiedzialną za connection do bazy i obsługę tabelek, jsonów itp.
Część serwisów może korzystać wyłącznie z API innych serwisów.
Ale czy musimy mieć instancje Cloud SQL, Cloud Datastore per każdy mikroserwis (i środowisko - Dev, stage...). Czy może wystarczy jedna współdzielona instacja Cloud SQL/Datastore per środowisko (tj. stage, prod) i każdy mikroserwis 'wali' do prywatnego schematu na bazie...
Środowiska powinny być moim zdaniem izolowane w 100%:
- Połączenia pomiędzy środowiskami obniżają bezpieczeństwo (dodatkowe wektory ataku)
- Łatwo o pomyłkę
chciałam napisać select a napisałam delete i on nie zapytał
, albo "wyłączę ten serwer, będzie taniej".
- Infrastruktura obecnie to również część deploymentu (Infastructure as a Code).
Zwiększanie liczby serwerów baz zwiększa ci izolację serwisów, ale sprawia, że monitoring, serwisowanie, replikacje itd. robią się bardziej upierdliwe. Oczywiście dochodzą do tego koszty.