关于每个微服务一个 Elasticsearch 实例的架构问题



我喜欢微服务的方法。比单体架构更容易(或更容易(部署、管理、开发等。微服务模式表示每个微服务一个数据库实例,在大多数情况下这不是问题,但在某些情况下确实如此。我用一个例子来解释我的问题。

我有一个网络服务,用户可以上传例如图像,其他用户可以对其进行评论和评分,并且有一个视图计数器。现在我将实现 4 个服务。

  1. 上传影像服务
    • 用户将其图像上传到网站
    • 图像有一些元信息,如描述、标题、标签、上传日期
  2. 评论服务
    • 如果用户向图像添加注释,则此服务将处理请求并在数据库中创建一个条目,其中包含属性内容、videoId、userId 和日期
  3. 查看柜台服务
    • 始终,如果用户查看/单击该图像,将创建一个新的服务请求,并在数据库中存储一个具有用户 ID 和视频 ID 的新条目

每个服务都有自己的数据库,所有服务彼此完全独立。服务之间的通信仅通过 REST API。数据库是ElasticSearch。

问题来了。我将创建第四个服务"图像搜索服务"。这是一个非常常见的任务,就像YouTube中的搜索功能一样。 为了获得最佳搜索结果,我需要来自前 3 项服务的每个属性/信息。当然,搜索取决于标签,描述和上传日期,但喜欢/不喜欢也有影响以及观点和评论。例如,观看次数较多的图片排名会更高。

但是当我将所有这些信息存储在单独的数据库中时,我不能在一个查询中考虑它,但我认为这是全文搜索所必需的。

是否有人可能有一些经验或一些想法来解决这个问题,或者可能有最佳实践?我骑了一些关于事件溯源的东西,但这不是这个特殊问题的正确解决方案。

当然,我可以为每个服务创建三个请求,然后创建一个算法并自己合并结果,但我认为 elasticsearch 是这项工作的合适人选。

JHipster在mysql DB之上使用elasticsearch。也许这可能是一个解决方案。

最新更新