Es posible utilizar una base de datos compartida para varios microservicios. Puede encontrar los patrones para la gestión de datos de microservicios en este enlace: http://microservices.io/patterns/data/database-per-service.html . Por cierto, es un blog muy útil para la arquitectura de microservicios.
En su caso, prefiere utilizar la base de datos por patrón de servicio. Esto hace que los microservicios sean más autónomos. En esta situación, debe duplicar algunos de sus datos entre varios microservicios. Puede compartir los datos con llamadas a API entre microservicios o puede compartirlos con mensajería asincrónica. Depende de su infraestructura y la frecuencia de cambio de los datos. Si no cambia con frecuencia, debe duplicar los datos con eventos asíncronos.
En su ejemplo, el servicio de entrega puede duplicar las ubicaciones de entrega y la información del producto. El servicio de productos gestiona los productos y las ubicaciones. Luego, los datos requeridos se copian en la base de datos del servicio de entrega con mensajes asíncronos (por ejemplo, puede usar rabbit mq o apache kafka). El servicio de entrega no cambia los datos del producto y la ubicación, pero usa los datos cuando está haciendo su trabajo. Si la parte de los datos del producto que utiliza el servicio de entrega cambia con frecuencia, la duplicación de datos con mensajería asíncrona será muy costosa. En este caso, debe realizar llamadas api entre el producto y el servicio de entrega. El servicio de entrega solicita al servicio de productos que verifique si un producto se puede entregar en una ubicación específica o no. El servicio de entrega solicita el servicio de Productos con un identificador (nombre, identificación, etc.) de un producto y ubicación. Estos identificadores se pueden tomar del usuario final o se comparten entre microservicios. Debido a que las bases de datos de los microservicios son diferentes aquí, no podemos definir claves externas entre los datos de estos microservicios.
Las llamadas de API pueden ser más fáciles de implementar, pero el costo de la red es mayor en esta opción. Además, sus servicios son menos autónomos cuando realiza llamadas a la API. Porque, en su ejemplo, cuando el servicio del producto está inactivo, el servicio de entrega no puede hacer su trabajo. Si duplica los datos con mensajería asincrónica, los datos necesarios para realizar la entrega se encuentran en la base de datos del microservicio de entrega. Cuando el servicio del Producto no esté funcionando, podrá realizar la entrega.