每个服务共享数据库
问题说明
微服务架构将应用程序构建为一组松散耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署。 基于微服务的应用程序中的数据库结构/架构应该是什么。
解决方案
我们可以使用在微服务之间共享的数据库。 每项服务都可以免费使用其他服务可访问的数据。 数据库将维护 ACID 事务。
![每个服务的共享数据库微服务设计模式](/microservices_design_patterns/images/shared_database_per_service_pattern.jpg)
在此模式中,每个服务都应使用底层数据库的事务管理,以便可以利用数据库的 ACID 属性。 考虑以下伪代码 −
BEGIN TRANSACTION … SELECT * FROM ORDERS WHERE CUSTOMER_ID = ? … SELECT CREDIT_LIMIT FROM CUSTOMERS WHERE CUSTOMER_ID = ? … INSERT INTO ORDERS ... WHERE ORDER_LIMIT < CREDIT_LIMIT … COMMIT TRANSACTION
这里的订单服务使用数据库事务来确保在订单过程中检查客户的信用额度。