The FTGO application and the Database per service pattern
One of the key characteristics of the microservice architecture is that each service’s data is private, e.g. the Database per Service pattern.
As the pattern points out, you aren’t required to have a separate database server for each service. Instead, multiple services can share the same database server with a logical separation of their data.
I’ve recently enhanced my book’s example application (FTGO) to properly demonstrate this pattern. Each service has database credentials that only grant it access its own (logical) database on a shared MySQL server.
Here, for example, is the configuration for the
ftgo-order-service: build: ./ftgo-order-service environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql/ftgo_order_service SPRING_DATASOURCE_USERNAME: ftgo_order_service_user SPRING_DATASOURCE_PASSWORD: ftgo_order_service_password
ftgo_order_service_user/ftgo_order_service_password credentials only grant it access to the
CREATE USER 'ftgo_order_service_user'@'%' IDENTIFIED BY 'ftgo_order_service_password'; create database ftgo_order_service; GRANT ALL PRIVILEGES ON ftgo_order_service.* TO 'ftgo_order_service_user'@'%';
The other services (
Kitchen Service, and
Restaurant Service) have a similar configuration.
Order History Service, which implements a CQRS view, has its own DynamoDB tables.