Zastanawiam się nad przeniesieniem monolitycznego interfejsu API REST na architekturę mikrousług i mam trochę wątpliwości co do przechowywania danych. Moim zdaniem niektóre z zalet mikrousług byłyby następujące:
- Skalowalny w poziomie - mogę uruchomić wiele nadmiarowych kopii mikrousług, aby poradzić sobie z obciążeniem i / lub spadkiem serwera.
- Luźno powiązane - Mogę zmieniać wewnętrzne implementacje mikrousług bez konieczności zmiany innych, a także mogę samodzielnie je wdrażać i zmieniać itp.
Mój problem dotyczy przechowywania danych. Widzę, że istnieje kilka opcji:
- Pojedyncza usługa bazy danych współdzielona przez wszystkie mikrousługi - wydaje się, że całkowicie eliminuje to wszelkie korzyści wynikające z luźnego łączenia.
- Lokalnie zainstalowana instancja bazy danych na każdej mikrousługie - nie widzę sposobu na skalowanie tego w poziomie, więc nie sądzę, że byłaby to opcja.
- Każda mikrousługa ma własną usługę bazy danych - wydaje się to najbardziej obiecujące, ponieważ zachowuje zalety luźnego łączenia i skalowania w poziomie (przy użyciu nadmiarowych kopii bazy danych i / lub dzielenia na kilka)
Dla mnie trzecia opcja wydaje się być jedyną opcją, ale wydaje mi się niesamowicie ciężka i bardzo nadinżynieryjnym rozwiązaniem. Jeśli dobrze to rozumiem, to dla prostej aplikacji z 4-5 mikrousługami musiałbym uruchomić 16-20 serwerów - dwie rzeczywiste instancje mikrousług na mikrousługę (w przypadku awarii serwera i wdrożenia bez przestoju), oraz dwa wystąpienia usługi bazy danych na mikrousługę (w przypadku awarii serwera itp.).
To, szczerze mówiąc, wydaje się nieco niedorzeczne. 16-20 serwerów do obsługi prostego API, mając na uwadze, że realistyczny projekt prawdopodobnie będzie miał więcej niż 4-5 usług? Czy brakuje mi jakiegoś fundamentalnego pojęcia, które to wyjaśni?
Niektóre rzeczy, które mogą pomóc podczas odpowiadania:
- Jestem jedynym deweloperem tego projektu i będę w dającej się przewidzieć przyszłości.
- Korzystam z Node.js i MongoDB, ale interesują mnie odpowiedzi niezależne od języka - odpowiedź może być nawet taka, że używam niewłaściwych technologii!