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

时间:2018-09-02 20:04:50

标签: elasticsearch architecture microservices

我喜欢微服务的方法。比起整体而言,更容易(或更容易)部署,管理,开发等。微服务模式说每个微服务一个数据库实例,在大多数情况下不是问题,但在某些情况下是这样。我用一个例子解释我的问题。

我有一个网络服务,用户可以在其中上传例如图片和其他用户可以对其进行评论和评分,并设有观景台。现在,我将实施4个服务。

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

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

问题来了。我将创建第四个服务“图像搜索服务”。这是一个非常常见的任务,例如youtube中的搜索功能。 为了获得最佳搜索结果,我需要前面3个服务中的每个属性/信息。搜索当然取决于标签,描述和上载日期,但喜欢/不喜欢也会产生影响,并且视图和评论也是如此。例如,具有高观看次数的图像将排名较高。

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

有人可能有一些解决此问题的经验或想法,还是有最佳实践?我对事件来源一无所知,但这并不是解决这个特殊问题的正确解决方案。

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

1 个答案:

答案 0 :(得分:0)

JHipster在mysql数据库之上使用elasticsearch。也许这可以解决。

相关问题