我可以继续我的第二种方法 - 根据域对象对数据库进行水平分区吗?
暂时是的,如果基于此,您可以扩展当前系统以满足您的需求。
现在让我们考虑一下为什么首先要迁移到 Microserices 作为一种开发风格。
- 小型组件 - 更易于管理
- 可独立部署 - 持续交付
- 多种语言
- 代码是围绕业务能力组织的
- 和 .....
迁移到微服务时,您不应该让多个服务直接从彼此的数据库中读取,这会使它们紧密耦合。
一个服务应该完全不知道另一个服务是如何设计其内部结构的。
现在,如果您想转向微服务并充分利用它,您应该像您所说的那样进行垂直分区,并且服务可以相互通信。
此外,在转向微服务的同时,您还会遇到很多其他问题。我尝试在此链接上编译如何开始使用微服务。
如何分离从同一个表中读取数据的服务:
现在让我们首先创建一个虚拟示例:我们有三个服务 Order 、 Shipping 、 Customer 都是三个不同的微服务。
以下是多个服务需要来自同一个表的数据的方式:
- 服务一需要从其他服务读取数据以进行验证等操作。
订单和运输服务可能需要来自客户服务的一些数据来完成他们的操作。
例如:在下订单时,会调用带有 customer id 的 Order Service API,现在 Order Service 可能需要验证其是否为有效客户。
一种方法 数据库级别暴露——不推荐——使用相同的客户表——将订单服务绑定到客户服务 Impl
另一种方法,调用另一个服务来获取数据
Variation - 1 呼叫客服检查客户是否存在并获取一些客户数据,如姓名,并将其保存在订单服务中
变化 - 2 在下订单时不验证,在 OrderPlaced 事件上与客户服务异步检查,并在需要时验证和更新订单状态
我建议根据您想要的一致性调用另一个服务来获取数据。
- 在某些用例中,您希望在来自多个服务的数据之间进行单个事务。
例如:删除客户。您可能希望客户的所有订单也应该被删除。
在这种情况下,您需要处理最终一致性,服务 1 将引发事件,然后服务 2 将做出相应反应。
现在,如果这回答了您的问题,那么请指定在哪种情况下多个服务需要调用另一个服务。
如果还没有解决,你可以发邮件给我 puneetjindal.11@gmail.com,会回复你的