Dlaczego tego potrzebujemy?
Ogromną zaletą mikrousług - a przede wszystkim SOA - jest wysoki poziom abstrakcji elementów wewnętrznych - nie tylko implementacja, ale także stosowane technologie. Na przykład, jeśli system zostanie opracowany w formie pięciu mikrousług przez pięć zespołów, jeden zespół może zdecydować się na przejście na zupełnie inny stos technologiczny (na przykład ze stosu Microsoft do LAMP), nawet nie pytając innych zespołów o opinię.
Spójrz na Amazon AWS lub Twilio. Czy wiesz, czy ich usługi są implementowane w Javie czy Ruby? Czy używają Oracle, PostgreSQL, Cassandra lub MongoDB? Z ilu maszyn korzystają? Czy troszczysz się o to; innymi słowy, czy te wybory technologiczne wpływają na sposób korzystania z tych usług? ... A co ważniejsze, jeśli zostaną przeniesione do innej bazy danych, czy musiałbyś odpowiednio zmienić aplikację kliencką?
Co się stanie, jeśli dwie usługi korzystają z tej samej bazy danych? Oto niewielka część problemów, które mogą się pojawić:
Zespół opracowujący usługę 1 chce przejść z SQL Server 2012 do SQL Server 2016. Jednak zespół 2 polega na przestarzałej funkcji, która została usunięta w SQL Server 2016.
Usługa 1 to ogromny sukces. Hostowanie bazy danych na dwóch komputerach (master i failover) nie jest już opcją. Ale skalowanie klastra do wielu komputerów wymaga strategii takich jak sharding. Tymczasem zespół 2 jest zadowolony z obecnej skali i nie widzi powodu, aby przejść do czegokolwiek innego.
Usługa 1 powinna przejść na UTF-8 jako domyślne kodowanie. Usługa 2 jest jednak zadowolona, używając Code Page 1252 Windows Latin 1.
Usługa 1 decyduje się dodać użytkownika o określonej nazwie. Jednak ten użytkownik już istnieje, utworzony kilka miesięcy temu przez drugi zespół.
Usługa 1 wymaga wielu różnych funkcji. Usługa 2 jest wysoce krytycznym komponentem i musi utrzymywać funkcje bazy danych na minimalnym poziomie, aby zmniejszyć ryzyko ataków.
Usługa 1 wymaga 15 TB miejsca na dysku; szybkość nie jest ważna, więc zwykłe dyski twarde są idealnie w porządku. Usługa 2 wymaga maksymalnie 50 GB, ale musi uzyskać do niej jak najszybszy dostęp, co oznacza, że dane powinny być przechowywane na dysku SSD.
...
Każdy mały wybór wpływa na wszystkich. Każda decyzja musi być podejmowana wspólnie przez osoby z każdego zespołu. Należy pójść na kompromis. Porównaj to z pełną swobodą robienia wszystkiego, co chcesz w kontekście SOA.
jest zbyt [...] niemożliwy do zarządzania.
Więc robisz to źle. Przypuszczam, że wdrażasz ręcznie .
Nie tak należy to robić. Musisz zautomatyzować wdrażanie maszyn wirtualnych (lub kontenerów Docker), na których działa baza danych. Po ich zautomatyzowaniu wdrożenie dwóch lub dwudziestu serwerów lub dwóch tysięcy serwerów nie różni się bardzo.
Magiczną cechą izolowanych baz danych jest to, że są one wyjątkowo łatwe w zarządzaniu . Czy próbowałeś zarządzać ogromną bazą danych wykorzystywaną przez dziesiątki zespołów? To koszmar. Każdy zespół ma określone prośby, a jak tylko go dotkniesz, wpłynie to na kogoś. Po połączeniu bazy danych z aplikacją zakres staje się bardzo wąski, co oznacza, że jest o wiele mniej rzeczy do przemyślenia.
Jeśli ogromna baza danych wymaga wyspecjalizowanych administratorów systemu, bazy danych, które są używane tylko przez jeden zespół, mogą być zasadniczo zarządzane przez ten zespół (DevOps też o tym chodzi), uwalniając czas administratorów systemu.
to jest zbyt kosztowne
Określ koszt.
Koszty licencjonowania zależą od bazy danych. W erze przetwarzania w chmurze jestem pewien, że wszyscy główni gracze przeprojektowali swoje licencje, aby uwzględnić kontekst, w którym zamiast jednej ogromnej bazy danych istnieje wiele małych. Jeśli nie, możesz rozważyć przeniesienie do innej bazy danych. Nawiasem mówiąc, istnieje wiele otwartych źródeł.
Jeśli mówisz o mocy przetwarzania, zarówno maszyny wirtualne, jak i kontenery są przyjazne dla procesora i nie byłbym bardzo przekonany, że jedna ogromna baza danych zużywa mniej procesora niż wiele małych wykonujących tę samą pracę.
Jeśli problemem jest pamięć, maszyny wirtualne nie są dla Ciebie dobrym wyborem. Pojemniki są. Będziesz mógł rozciągać tyle, ile chcesz, wiedząc, że nie zużyją więcej pamięci RAM niż potrzeba. Chociaż całkowite zużycie pamięci będzie wyższe dla wielu małych baz danych w porównaniu do dużej pojedynczej bazy danych, przypuszczam, że różnica nie będzie zbyt ważna. YMMV.