Jesteśmy w trakcie migracji aplikacji monolitycznej do architektury mikrousług. Ze względu na niektóre wymogi regulacyjne musimy przechowywać dane klienta z różnych krajów w osobnych (specyficznych dla danego kraju) bazach danych. Tj. Db dla klientów z USA, db dla klientów z Wielkiej Brytanii ...
Następujące projekty, które rozważamy, są następujące:
Opcja 1: Aplikacja dla wielu dzierżawców z obsługą hibernacji dla wielu dzierżawców, którą można skalować do N liczby razy w zależności od zapotrzebowania (pomyśl o kubernetach). Pojedyncze wystąpienie tej aplikacji będzie mogło połączyć się ze wszystkimi bazami danych.
Opcja 2: Wdróż 1 instancję mikrousług na bazę danych kraju. Z bramą API przed nimi, kierującą ruchem
Gdybyś miał zaprojektować tego typu system, jakie byłyby twoje wybory?
źródło
Odpowiedzi:
Myślę, że opcja 2 nie jest zła, ale może nie być potrzebna. Mikrousługi umożliwiają zaspokojenie potrzeb wielu aplikacji.
Dużym czynnikiem tutaj jest to, czy istnieje jakaś różnica między tymi dwoma schematami i czy kiedykolwiek będzie w przyszłości.
Zazwyczaj myślę, że używanie interfejsów do repozytoriów jest niepotrzebne; jednak w tym przypadku może być to warte wysiłku. Fabryki repozytoriów będą dla Ciebie ważne.
Mój problem z opcją 1 polega na tym, że jest ona zbyt specyficzna. Powinieneś być w stanie przejść od konfiguracji, którą opisałeś, do dwóch oddzielnych instancji, z których każda wskazuje na swoją własną bazę danych. Aplikacja NIE powinna troszczyć się o to, skąd pochodzi jej dane.
Chociaż schemat nie różni się dla dwóch różnych baz danych, możesz mieć jedno repozytorium z łatwością sobie z nimi radzić, bez różnicy między aplikacją:
Jeśli schematy DB kiedykolwiek staną się rozbieżne między USA a Wielką Brytanią, wówczas podzielisz tę funkcjonalność na dwa całkowicie różne repozytoria. Byłoby to łatwe, ponieważ wszystko, co musisz zrobić, to zmienić fabrykę.
źródło
Wybrałbym drugą opcję, która daje mniejsze tarcie w rozwoju i wdrażaniu.
Umożliwi to lepszą skalowalność i dostępność oraz lepsze opcje wdrażania bez przestojów, ponieważ aplikacja została rozpowszechniona w 1 (lub co najmniej jednym) wystąpieniu na region w przeciwieństwie do co najmniej jednego dla całego świata.
Gdy zmieniają się wymagania, możesz mieć więcej logiki biznesowej specyficznej dla regionu, a być może również zmiany danych, spróbuję podzielić kod i jego dane na region, unikając dzielenia logiki biznesowej specyficznej dla regionu (możesz w końcu dzielić trochę podstawowego kodu).
Ma sens?
źródło