拥有单独的搜索微服务还是将其集成到具有要搜索的数据的微服务中?

问题描述 投票:0回答:3

我目前正在学习微服务并从事一个项目,我得到了以下问题:

假设我有以下服务:物品服务。

项目服务将用于在 mongodb 数据库中创建不同的项目。我还想在我的应用程序中拥有搜索功能,我会使用 Meilisearch 来实现它,因为它还支持地理位置搜索,而且总体来说非常简洁。

我不知道我应该遵循以下哪种方法:

  1. 将所有这些集成到我的项目服务中 2.1)为搜索功能提供单独的服务,但在这种情况下,搜索服务应以某种方式与项目服务的数据库进行交互。搜索服务是否应该直接调用正在使用的数据库项服务? (基本上一个数据库上有2个服务,但一个只能读,一个只能写) 2.2)为搜索功能提供单独的服务,并且还有一个不同的数据库(我需要以某种方式使两个数据库中的信息保持同步,而且我不知道这是否可以,因为我有重复的数据)

我很感激对此的建议,因为我对微服务非常陌生。 谢谢!

我还没有尝试过任何东西,我基本上不知道该遵循哪种方法

java web-services web architecture microservices
3个回答
0
投票

如此处所述https://stackoverflow.com/a/56775778/19917972所有过滤都应通过查询数据库来完成。现在,对于您可以缓存的搜索选项,让我们说出您将提供搜索的实体的名称。然后单击按钮,发出查询并获取它。这完全取决于您需要它的效率以及您正在寻找什么。但最好的是缓存和数据库查询的结合


0
投票

搜索通常是跨多个数据库/服务的交叉问题。实现有效的搜索引擎通常需要后端加载并将多个实体组合到单个扁平视图中以进行高速搜索。众所周知,数据库在这方面非常糟糕,并且没有针对搜索进行优化。大多数数据库都有一些修补层,确实有助于创建倒排索引之类的东西,但它们通常无法替代真正的独立搜索引擎,但绝对具有不必拥有单独的数据存储和数据存储的便利性。处理对其他数据存储的流式更改。

无论如何,请查看您的数据库,查看可用的搜索引擎,探索您的云/托管提供商可用的内容。可能会有一种产品是您进入门槛最低的产品,您应该从它开始,它会非常有效地为您提供您想要的东西。

此外,如果它完全适合单个“项目”服务,我会感到惊讶。一旦您想要搜索用户订单历史记录中的项目,或者某种其他类型的跨实体问题,您就会需要一个统一的搜索索引。


0
投票

您的担忧是“何时使用 CQRS(命令查询责任分离)模式”的另一种说法。

我将在此处添加 stackoverflow 线程,但您可以自己做更多研究。从我的角度来看,如果这只是一些学习项目,那么你不会期望高流量,因此你不需要担心可扩展性。因此,选择最简单的选项,即在当前微服务内进行搜索。如果你想学习 CQRS,那么显然就去学吧。

关于2.1,通常避免从微服务范围之外访问其数据库。因此,请避免创建可以从外部项目微服务访问项目数据库的服务。这使得事情在大规模、许多团队等方面变得非常复杂。想想在现实世界的例子中,不同的团队可能会处理每个微服务,这会变得多么混乱......

© www.soinside.com 2019 - 2024. All rights reserved.