【问题标题】:Using Solr or ElasticSearch as API best practices使用 Solr 或 ElasticSearch 作为 API 最佳实践
【发布时间】:2012-10-12 05:10:16
【问题描述】:

我正在考虑将 Solr 或 ElasticSearch 用于一些客户端 JavaScript 应用程序。在一种情况下,我可以直接调用 API。

我对这个概念很陌生,首先想到的事情之一是如何避免与安全相关的问题,例如人们针对 API 发出删除命令?将搜索 API 隐藏在层后面是否合适,例如与客户端交互的小型 PHP 或 Sinatra API?

谢谢!

【问题讨论】:

    标签: javascript api solr elasticsearch


    【解决方案1】:

    将搜索 API 隐藏在层后面是否合适,例如与客户端交互的小型 PHP 或 Sinatra API?

    如果您关心安全性,答案无疑是 -
    NodeJS 非常适合这类事情:授权客户端请求,将查询发送到 elasticsearch/solr,然后将其发送回客户端(在返回的路上有或没有数据处理)。如果您有很多连接(nodejs 非常适合),则 PHP 不太适合。


    在 elasticsearch 的博客上查看 this article 的第二部分。有一个很好的代理说明,还有一个简单的Ruby code for the proxy

    相关引述:

    这一切都可以通过利用 elasticsearch 公开 HTTP API 的事实来实现。通过在其前面放置一个代理,我们可以将身份验证和授权例程隔离到单独的组件中,从而有效地分解堆栈中的职责并提高各个部分的可测试性。

    【讨论】:

    • 我怎么能忽略 nodejs :)
    • 是的。 NodeJS 正是针对这种情况的。速度、并发性和简单性。您也可以将它作为一个单独的进程运行在与您的主站点不同的 CPU 上 - 这将为您提供一个非常精简且易于维护的服务器。
    【解决方案2】:

    您可以添加一个充当代理的层,但最好的方法是使用复制(两个或更多实例 - http://wiki.apache.org/solr/SolrReplication

    这样,您始终拥有一个有效、强大且通常是私有的主索引,您可以在其上添加、删除和做任何您想做的事情,以及一个从属索引,它只是主索引的副本,它只是提供查询 API。

    【讨论】:

    • 有一个主从搜索是标准做法吗?我知道 Solr 索引大量数据可能会出现大量性能问题,我的理解是 ES 的优势之一。
    • 我认为这是一个标准,但也许我错了。我只与 Solr 合作过,其中的文档不超过 800k - 我想尝试 ES,但在能够尝试之前就去了另一个工作。我们一直采用主从设计,既安全又好用。您可以索引并在主服务器中做任何您想做的事情,从服务器始终可供公众使用。然后当 master 好的时候,slave 复制(真的很快)。这种设计让你永远不会让你的公共索引忙而不准备被查询
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2020-01-15
    • 2017-11-16
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多