여러 마이크로 서비스에 공유 데이터베이스를 사용할 수 있습니다. http://microservices.io/patterns/data/database-per-service.html 링크에서 마이크로 서비스의 데이터 관리 패턴을 찾을 수 있습니다 . 그건 그렇고, 마이크로 서비스 아키텍처에 매우 유용한 블로그입니다.
귀하의 경우 서비스 패턴별로 데이터베이스를 사용하는 것을 선호합니다. 이것은 마이크로 서비스를보다 자율적으로 만듭니다. 이 상황에서는 여러 마이크로 서비스간에 일부 데이터를 복제해야합니다. 마이크로 서비스간에 API 호출로 데이터를 공유하거나 비동기 메시징으로 공유 할 수 있습니다. 인프라 및 데이터 변경 빈도에 따라 다릅니다. 자주 변경되지 않는 경우 비동기 이벤트로 데이터를 복제해야합니다.
귀하의 예에서 배송 서비스는 배송 위치 및 제품 정보를 복제 할 수 있습니다. 제품 서비스는 제품과 위치를 관리합니다. 그런 다음 필요한 데이터가 비동기 메시지와 함께 Delivery Service의 데이터베이스에 복사됩니다 (예 : rabbit mq 또는 apache kafka를 사용할 수 있음). 배송 서비스는 상품 및 위치 데이터를 변경하지 않고 업무를 수행 할 때 데이터를 사용합니다. 택배 서비스에서 사용하는 제품 데이터의 일부가 자주 변경되는 경우 비동기 메시징으로 데이터를 복제하는 데 많은 비용이 듭니다. 이 경우 제품과 배송 서비스간에 API 호출을해야합니다. 배송 서비스는 제품이 특정 위치로 배송 가능한지 여부를 확인하기 위해 제품 서비스에 요청합니다. 배송 서비스는 제품 및 위치의 식별자 (이름, ID 등)로 제품 서비스를 요청합니다. 이러한 식별자는 최종 사용자로부터 가져 오거나 마이크로 서비스간에 공유됩니다. 여기에서는 마이크로 서비스의 데이터베이스가 다르기 때문에 이러한 마이크로 서비스의 데이터간에 외래 키를 정의 할 수 없습니다.
API 호출은 구현하기가 더 쉬울 수 있지만이 옵션에서는 네트워크 비용이 더 높습니다. 또한 API 호출을 할 때 서비스가 덜 자율적입니다. 귀하의 예에서 제품 서비스가 다운되면 배달 서비스가 작업을 수행 할 수 없기 때문입니다. 비동기 메시징으로 데이터를 복제하는 경우 배달에 필요한 데이터는 배달 마이크로 서비스의 데이터베이스에 있습니다. 제품 서비스가 작동하지 않을 때 배송 할 수 있습니다.