【问题标题】:setting up Elasticsearch server for processing data from microservices设置 Elasticsearch 服务器以处理来自微服务的数据
【发布时间】:2016-04-15 01:18:24
【问题描述】:

我对 elasticsearch 及其扩展非常陌生,我有一个问题我什至不知道如何解决。

情况如下:

有多个带有 Rails 微服务应用程序的服务器。他们每个人都在获取自己的相当大的数据(更具体地说,聚合来自不同社交网络的帖子 - 因此所有数据库中的可索引搜索字段都是相同的)。

我需要找到一种解决方案,允许将数据保留在当前位置,并设置一个专门用于搜索多个数据库的弹性搜索服务器,而不需要相应的 Rails 应用程序打开这个搜索服务器。这可能意味着在其他每个服务器上设置 ES,在那里定义搜索模式,但在完全不同的服务器上进行多模型搜索。

这些操作的最终目标应该是将整个 ActiveRecord 对象/或所有相关属性发送到主应用程序。

甚至有可能实现吗?也许有人遇到过类似的问题?

我对如何开始使用它有点迷茫。

【问题讨论】:

    标签: ruby-on-rails elasticsearch architecture microservices


    【解决方案1】:

    这个问题有点宽泛,但我想我至少可以根据我的理解为您指明正确的方向。首先,让我根据我的理解陈述您的问题。

    您有多个由各自的微服务填充的数据库。每个数据库都包含您希望能够搜索的相似信息(即作者、正文、标题等)。您需要一个可以访问所有这些数据库中的数据并可以返回包含正确与搜索匹配的数据库和文档。

    在处理此类复杂情况时,Elasticsearch 非常强大。由于您的所有数据都具有相似的结构和字段,您可以只使用一个带有附加字段的索引来存储文档来自哪个数据库以及来自该数据库的文档 ID。这将允许您执行搜索,例如“将 William Shatner 在这 3 个社交网络上发布的每个帖子都给我。”

    您将需要几个额外的功能来完成这项工作。首先,您需要一种将数据从数据库获取到搜索索引的机制。在我的团队中,我们使用一个单独的 IndexingService,它知道如何读取事件流并将实时数据发送到 ES 索引。你只需要决定一个索引策略(即你多久用新条目更新一次索引?)。其次,您将需要客户端的一些逻辑来获取原始搜索结果并从数据库中检索相关条目。

    这只是解决问题的一种方法。如果您想要一种方法,允许您为每个社交网络维护不同的索引,但仍然有一个中心位置,您可以搜索所有我建议使用 Elasticsearch Tribe Nodes 的方法。基本上,它是一个提交搜索的地方,了解每个搜索集群以及如何与它们交互以返回统一的搜索结果。

    学习 elasticsearch 的最佳方法是启动并运行集群并开始试验!祝你好运!

    【讨论】:

    • 谢谢@chris-franklin,这正是问题所在。你提到的索引服务是一个单独的应用程序,它索引所有外部数据库然后执行搜索?
    • 我自己 我正在考虑创建一个搜索应用程序,该应用程序指向多个远程数据库,将它们全部索引,执行多模型搜索并通过 API 返回所有内容。这是一个糟糕的策略吗?我会研究一下部落节点,这似乎很有希望!
    • 我们的索引服务是我们架构中的另一个微服务。它处理将数据推送到 Elasticsearch 中。我们有一个单独的微服务来处理构建搜索查询,将它们提交给 ES,然后以我们的 UI 可以轻松使用的格式返回结果。您的需求将直接影响该架构的复杂程度。我们的需求意味着我们需要单独可扩展的服务来处理每个步骤。
    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 2020-08-02
    • 2021-12-29
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多