Powiedzmy, że mamy mikroserwis A i B. B ma własną bazę danych. Jednak B musi być skalowane w poziomie, a zatem mamy 3 wystąpienia B. Co dzieje się z bazą danych? Czy skaluje się odpowiednio, czy pozostaje tą samą (scentralizowaną) bazą danych dla instancji 3 B, czy staje się rozproszoną bazą danych, co się dzieje?Microservices: instancje bazy danych i mikroserwisów
Odpowiedz
używanie jednej bazy danych przez różne instancje serwisowe jest ok w przypadku korzystania z partycjonowania danych.
Odpowiedź jest oparta na tym, jaki rodzaj danych należy udostępnić z 3 instancji B. Niektóre sytuacje:
B jest tylko odczyt danych bez napisać coś, DB można użyć metody replikacji i trzy B instancja tylko odczyt danych z innej instancji DB i DB powtarzano.
Instancja B może odczytywać i zapisywać dane bez przerywania innej instancji B, co oznacza, że każda instancja B może mieć wyznaczone dane, i nie ma udostępniania danych między instancjami, baza danych została zmieniona na trzy bazy danych o tym samym schemacie, ale zupełnie inne dane ;
Instancje B powinny udostępniać większość danych, a każde wystąpienie może spowodować zapisanie danych z powrotem do bazy danych. Tak więc instancja B powinna używać jednego DB i jakiegoś DB blokady, aby uniknąć konfliktu między instancjami.
W drugiej jakiejś innej sytuacji, nie będzie wiele innych podejść do rozwiązania problemu, takie jak przy użyciu DB pamięć jak REDiS, obsługa kolejek jak na przykład RabbitMQ B.
Jak wyjaśnił Chris Richardson w pattern database per service,
wystąpień tego samego usługi powinny dzielić tej samej bazy danych
3 instancje B jest nadal 1 usługa logiczne. Potrzebujesz tylko jednej bazy danych. –
@TomRedfern Dzięki za odpowiedź;) Czy byłeś kiedyś w sytuacji, w której musisz skalować bazę danych? Jeśli tak, to jak sobie z tym poradzić? – nobitta
możliwy duplikat adresu http://stackoverflow.com/questions/33399988 – KGhatak