架构模式: 共享数据库

架构模式: 共享数据库

上下文

让我们假设您正在使用微服务架构模式开发在线商店应用程序。大多数服务需要在某种数据库中保存数据。例如,订单服务存储有关订单的信息,而客户服务存储有关客户的信息。

问题

微服务应用程序中的数据库体系结构是什么?
 

要点

  • 服务必须松散耦合,以便可以独立开发,部署和扩展

  • 某些业务事务必须强制执行跨多个服务的不变量。例如,下订单用例必须验证新订单不会超过客户的信用额度。其他业务事务,必须更新多个服务所拥有的数据。

  • 某些业务事务需要查询由多个服务拥有的数据。例如,查看可用信用使用必须查询客户以查找creditLimit和Orders以计算未结订单的总金额。

  • 某些查询必须连接由多个服务拥有的数据。例如,查找特定区域中的客户及其最近的订单需要客户和订单之间的联接。

  • 有时必须复制和分割数据库才能扩展。请参阅比例立方体。

  • 不同的服务有不同的数据存储要求。对于某些服务,关系数据库是最佳选择。其他服务可能需要NoSQL数据库,例如MongoDB,它擅长存储复杂的非结构化数据,或Neo4J,用于高效存储和查询图形数据。

结论

使用由多个服务共享的(单个)数据库。每个服务使用本地ACID事务自由访问其他服务拥有的数据。

例子

OrderService和CustomerService可以自由访问彼此的表。例如,OrderService可以使用以下ACID交易,确保新订单不会违反客户的信用额度。

BEGIN TRANSACTION
…
SELECT ORDER_TOTAL
 FROM ORDERS WHERE CUSTOMER_ID = ?
…
SELECT CREDIT_LIMIT
FROM CUSTOMERS WHERE CUSTOMER_ID = ?
…
INSERT INTO ORDERS …
…
COMMIT TRANSACTION

即使同时交易试图为同一客户创建订单,数据库也将保证不会超过信用额度。

结果上下文

这种模式的好处是:

  • 开发人员使用熟悉且直接的ACID事务来强制数据一致性
  • 单个数据库操作起来更简单

这种模式的缺点是:

  • 开发时间耦合 - 例如,处理OrderService的开发人员需要与访问相同表的其他服务的开发人员协调模式更改。这种耦合和额外的协调将减缓发展。

  • 运行时耦合 - 因为所有服务都访问同一个数据库,所以它们可能会相互干扰。例如,如果长时间运行的CustomerService事务在ORDER表上保持锁定,则OrderService将被阻止。

  • 单个数据库可能无法满足所有服务的数据存储和访问要求。

关联模式

  • 每个服务数据库是一种替代方法

转载于:https://www.cnblogs.com/paxlyf/p/11289794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值