【问题标题】:With Microservices, different services has similar entities to be stored in database, how to deal with it?使用微服务,不同的服务有相似的实体要存储在数据库中,如何处理呢?
【发布时间】:2016-07-28 21:54:42
【问题描述】:
我试图了解什么是微服务。
据我所知,它只是可以相互调用或由客户端调用的独立自包含服务。
假设我有 ProductService 和 UserService。如果我们的系统允许人们对产品和用户发表评论,我们应该将两个系统的 cmets 存储在一个 cmets 表中,还是应该每个系统都有单独的 cmets 表?
每个服务应该使用自己的数据库还是将它们存储在一个地方?
【问题讨论】:
标签:
architecture
microservices
【解决方案1】:
据我所知,它只是独立的独立服务
可以相互调用,也可以由客户端调用
你懂的!这是一个相当不错的定义:
-
分离 - 分别设计、构建、部署和管理
-
自包含 - 完全自主
-
可以相互调用 - 通过众所周知的协议进行通信,同步或异步。
-
或由客户端 - 每个服务都公开其自己的可组合 UI 组件
如果我们的系统允许人们对产品和用户发表评论,
我们是否应该将两个系统的 cmets 存储在 cmets 表中
只有当您有单独的评论服务时,您才会这样做。根据您自己的定义,服务应该是自包含的。这意味着没有共享依赖项,例如数据模型或数据库表。
每个服务应该使用自己的数据库还是将它们存储在一个地方?
再次引用您的定义,服务应该是分离的(或至少是可分离的),只要它们不使用相同的数据库实例,它们可以共享一个服务器实例。
【解决方案2】:
听起来您正在考虑根据实体拆分服务,这并不是一个好主意。
在您提供的示例中,您可以使用任何一种方法,也可以将它们与两者分开存储,或者复制。这取决于您尝试做什么、如何访问该信息以及您的服务如何相互交互。快速的解决方案,如果不了解完整的上下文可能会给您未来带来麻烦,所以最好现在花一些时间避免它。
解释什么是微服务以及如何构建它们可能需要一两本书,所以我鼓励您从 Microservices by Sam Newmann 开始。
我之前推荐过这本书,它是一个很好的主题介绍。它在第一章回答了你的问题。