java - Apache Solr 处理数十万个请求

标签 java solr lucene performance-testing solrcloud

我们在本地环境中有一个小型搜索应用程序。对于后台服务,我们使用 Apache Solr 6.6.2 进行数据索引和存储。前端采用 PHP 和 Apache2 网络服务器。

我们有一台 48 核和 96 GB RAM 的服务器,安装了这些服务。索引中的文档预计大小约为 2 亿,每个文档最多可以有 20 个字段。大多数字段都被索引和存储。

预计同时发生的请求可能会达到数十万个。那么 Apache Solr 处理它的最佳配置是什么?我们启动了具有 20 GB RAM 的 Solr 并进行了压力测试,但在接近 100 个用户时它开始降低性能。哪里有问题?这个问题的最佳方法是什么。

我们也在SolrCloud模式下测试了Solr,但性能并没有提高太多。我们原以为如果出现内存问题,就会出现 OOM 异常,但并没有发生这样的事情。我们刚刚根据我们的要求更改了架构,并通过命令行更改了内存。所有其他设置均为默认设置。

以下是我们已经查阅过的一些引用资料

  1. https://wiki.apache.org/solr/SolrPerformanceProblems
  2. https://blog.cloudera.com/blog/2017/06/apache-solr-memory-tuning-for-production/

最佳答案

每个集合中有 2 亿条记录,并且有 200 个集合。我们有 5 台服务器,每台服务器有 8 个核心和 64 GB 内存。

我建议您将服务器分成多个服务器

在每台服务器上复制数据,以便将请求分为多个服务器。服务器数量越多,您的响应速度就越快。

注意: 只需了解复制因子:2F+1 公式,如果您有 5 台服务器,则至少应该有 3 个副本。我建议您仅使用 5 个副本(每个服务器 1 个副本)

关于java - Apache Solr 处理数十万个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54121847/

相关文章:

java - org.w3c.dom.Node.setNodeValue() 不编码某些特殊字符

java - 在 Java 中的 JPanel 上显示方法的输出

solr - 是否有 SolrJ 查询构建器?

java - Lucene 索引中的文档和字段实例重用

lucene - 如何标准化Lucene分数?

elasticsearch - BM25 是否使用查询协调器?

java - 使用JAVA API在远程服务器上执行shell脚本

java - 如何添加将 View 扩展到 Main Activity 的自定义类?

java - 如何在Java代码中从Solr中进行选择?

full-text-search - Solr查询唯一整数字段