【发布时间】:2015-12-17 04:20:53
【问题描述】:
我打算将我开始构建的一个应用程序分解为微服务,该应用程序是一个带有图形数据库的单体应用程序。但我面临的困境是试图找到一个合适的解决方案来分割不同的服务,而不是失去图形数据库提供的好处。
我最初考虑的想法是将每个不同的实体拆分为它自己的微服务,使用文档存储将数据保存在每个服务上。然后定义一个更高级别的服务来管理这些关系。
例如,对于关系 (A)-->(B),将产生 3 个微服务,一个用于 A 类型的实体,另一个用于 B 类型的实体,以及第三个更高级别的图形数据库,存储A 和 B 类型的节点,仅包含 ID 和它们之间的关系。
问题 1:这种方法在耦合、容错或其他我现在想不到的方面有什么问题吗?
问题 2:当您将第三个实体扔进游戏时,例如 (A)-->(B)、(A)-->(C) 和 (C)-- >(B),在这种情况下,哪一个是最好的方法?
- 我是否坚持只使用一种更高级别的服务来维护所有关系的策略?
- 我是否会生成多个更高级别的服务来维护每种类型的关系?
问题3:对于同一类型的实体之间的关系,例如(Person)--isFriendOf-->(Person),牢记关注点分离的概念,将关系管理分离到不同的服务中是否合适?
非常欢迎任何意见、反馈和想法。
我一直在对这个主题进行一些研究,为了清楚起见,我将提出一个更具体的场景,这样讨论起来会更容易。 图模型是这样的:
这里的目标是实现歌曲播放列表推荐服务,尝试根据用户已经听过的歌曲以及其他歌曲中的流派和艺术家来找到给定用户尚未听过的歌曲被其他用户收听,然后被当前用户收听。
【问题讨论】:
标签: graph-databases microservices