Możliwe jest użycie udostępnionej bazy danych dla wielu mikrousług. Wzorce zarządzania danymi mikrousług można znaleźć pod tym linkiem: http://microservices.io/patterns/data/database-per-service.html . Nawiasem mówiąc, jest to bardzo przydatny blog dotyczący architektury mikrousług.
W Twoim przypadku wolisz używać bazy danych na wzorzec usługi. Dzięki temu mikrousługi są bardziej autonomiczne. W takiej sytuacji należy zduplikować niektóre dane w wielu mikrousługach. Możesz udostępniać dane za pomocą wywołań interfejsu API między mikrousługami lub możesz udostępniać je za pomocą komunikatów asynchronicznych. To zależy od Twojej infrastruktury i częstotliwości zmian danych. Jeśli nie zmienia się często, należy zduplikować dane ze zdarzeniami asynchronicznymi.
W Twoim przykładzie usługa dostawy może powielać lokalizacje dostawy i informacje o produkcie. Serwis produktowy zarządza produktami i lokalizacjami. Następnie wymagane dane są kopiowane do bazy danych usługi Delivery z komunikatami asynchronicznymi (można na przykład użyć rabbit mq lub apache kafka). Usługa dostawy nie zmienia danych produktu i lokalizacji, ale wykorzystuje te dane podczas wykonywania swojej pracy. Jeśli część danych produktu, która jest używana przez usługę dostawy, często się zmienia, powielanie danych za pomocą wiadomości asynchronicznych będzie bardzo kosztowne. W takim przypadku należy wykonywać wywołania interfejsu API między usługą Product i Delivery. Usługa dostawy prosi obsługę produktu o sprawdzenie, czy produkt można dostarczyć do określonej lokalizacji, czy nie. Usługa dostawy prosi obsługę produktów o identyfikator (nazwa, identyfikator itp.) Produktu i lokalizacji. Te identyfikatory mogą być pobierane od użytkownika końcowego lub są współużytkowane przez mikrousługi. Ponieważ bazy danych mikrousług są tutaj różne, nie możemy definiować kluczy obcych między danymi tych mikrousług.
Wywołania API mogą być łatwiejsze do wdrożenia, ale w tej opcji koszt sieci jest wyższy. Twoje usługi są również mniej autonomiczne, gdy wykonujesz wywołania API. Ponieważ w twoim przykładzie, gdy usługa produktu nie działa, usługa dostawy nie może wykonać swojej pracy. W przypadku duplikowania danych za pomocą wiadomości asynchronicznych dane wymagane do dostarczenia znajdują się w bazie danych mikrousługi dostarczania. Gdy usługa produktu nie działa, będziesz mógł dokonać dostawy.