【问题标题】:Keyword Search in microservices based architecture基于微服务的架构中的关键字搜索
【发布时间】:2015-10-18 05:51:38
【问题描述】:

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

提前致谢

【问题讨论】:

    标签: search solr microservices


    【解决方案1】:

    这似乎是一个架构问题,虽然它是有道理的,但这个问题也有点开放式,具体取决于您的系统需要什么。我脑海中浮现的几件事是:

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

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

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

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

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

    【讨论】:

    • 非常感谢@Will 大多数情况下会做 SOLR + DataImportHandler。此外,由于我的数据库模式是高度相关的,因此对整个事物进行非规范化是没有意义的。我宁愿让它在数据库层中仍然是关系的,并且仍然在应用层中解耦它。我知道这会花费我更多的远程通话费用,但我似乎没有找到任何其他解决方案。在这种情况下,数据库将是一个大数据库,因此 DataImportHandler 应该进行索引..
    • 没问题!很高兴我能帮上忙!只要它与业务领域和预先制定的投资相匹配,这绝对是一个很好的解决方案。虽然听起来您可能正在共享一个数据库,您可能会从中读取不同的服务。这实际上可能会通过模式导致您的服务之间的紧密耦合。如果您想扩大规模,这可能不是最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2021-09-04
    • 2020-05-06
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多