【发布时间】:2018-09-26 16:20:10
【问题描述】:
我喜欢微服务的方法。比单体应用更容易(或更容易)部署、管理、开发等等。微服务模式说每个微服务一个数据库实例,在大多数情况下这无关紧要,但在某些情况下确实如此。我用一个例子来解释我的问题。
我有一个网络服务,用户可以在其中上传,例如图像和其他用户可以对其进行评论和评分,并且有一个查看计数器。现在我将实现 4 个服务。
- 上传图片服务
- 用户将其图片上传到网站
- 图片有一些元信息,如描述、标题、标签、上传日期
- 评论服务
- 如果用户向图像添加评论,则此服务会处理请求并在数据库中创建一个条目,其中包含属性 content、videoId、userId 和 date
- 查看柜台服务
- 始终如果用户查看/单击该图像,则会创建一个新的服务请求,并在数据库中存储一个带有用户 ID 和视频 ID 的新条目
每个服务都有自己的数据库,所有服务完全相互独立。服务之间的通信仅通过 REST API。数据库是 ElasticSearch。
问题来了。我将创建第四个服务“图像搜索服务”。这是一项非常常见的任务,例如 youtube 中的搜索功能。 为了获得最佳搜索结果,我需要前 3 项服务中的每个属性/信息。搜索当然取决于标签、描述和上传日期,但喜欢/不喜欢也有影响,视图和 cmets 也有影响。例如,具有高观看次数的图像将排名较高。
但是当我将所有这些信息存储在单独的数据库中时,我不能在一个查询中考虑它,但我认为这对于全文搜索是必要的。
是否有人可能有一些经验或一些想法来解决这个问题,或者是否有最佳实践?我使用了一些关于事件溯源的方法,但这不是解决这个特殊问题的正确方法。
当然,我可以为每个服务创建三个请求,然后自己创建一个算法并合并结果,但我认为 elasticsearch 是这项工作的合适人选。
【问题讨论】:
标签: elasticsearch architecture microservices