基于微服务的架构中的关键字搜索

Keyword Search in microservices based architecture

我需要一些关于如何实施搜索以在微服务拥有的关系数据库中搜索关键字的建议。 我有一些带有自己的关系数据库的微服务。这些微服务很可能部署在 docker 容器中。 使用像 Apache SOLR 这样的搜索引擎最好的方法是什么,以便可以为每个微服务的数据库建立索引,我们可以实现关键字搜索

提前致谢

这似乎是一个体系结构问题,虽然它有道理,但根据您的系统要求,这个问题也有点开放性。我想到的几件事是:

  1. 使用 Apache SOLR 中的 DataImportHandler
  2. 使用像 Kafka 或 Kinesis 这样的消息队列,并让独立服务从中消费以传播到它们的数据存储,在这种情况下,Apache SOLR 支持的搜索服务和 MySQL 支持的另一个服务。

就个人而言,我自己从未使用过 DataImportHandler,但我最初的想法是它将 Apache SOLR 耦合到 MySQL。设置 DataImportHandler 需要 Apache SOLR 知道 MySQL 架构、访问凭据等。因此,我建议第二个选项转向 shared-nothing建筑学。

我打算将 MySQL 支持的服务称为 "entity" 服务,因为它听起来像是用于保存某些特定类型对象的规范服务。实体服务和搜索服务将有自己特定的消费者,它们将来自 Kinesis 或 Kafka 的事件摄取到它们的数据存储中,搜索服务摄取到 Apache SOLR,实体服务摄取到 MySQL。

这有助于将服务从知道彼此存在中分离出来,并允许它们中的每一个相互独立地扩展。这将是数据冗余,但应该没问题,因为数据访问模式不同。

我想提的另一个注意事项是,它假定您为其保存的实体允许是异步的。请注意,此系统中的消息目前不需要将其保存在 MySQL 中,在本例中是实体服务。但是,您可以根据自己的喜好对其进行更改,以便消息保留在实体服务中,然后通过队列传播到搜索服务以进行索引。在它被索引后,您可以添加额外的端点来搜索 Apache SOLR。希望这能让您对其他一些架构如何发挥作用有所了解。如果您对您的系统和涉及的实体有更多的了解,您可能会得到更好的答案。