Apache Solr处理数十万个请求

时间:2019-01-10 04:08:27

标签: 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/

1 个答案:

答案 0 :(得分:2)

如果计划每秒处理数十万个请求,则无论服务器多大,都将需要一台以上的服务器。即使仅用于HA / DR用途。因此,我建议您使用SolrCloud并在多台计算机和多个副本之间分片索引,从此开始。

除了魔鬼在细节之外

  1. 您希望查询执行的速度有多快(中位数和99%ile)。这将帮助您确定CPU和内存的需求。
  2. 您的查询有多复杂?
  3. 您是否正在使用过滤器? (需要更多的堆内存)
  4. 您的磁盘访问速度有多快?
  5. 您是否将实时添加数据(会影响autoCommit和soft commit的设置

但是首先,您需要摆脱“一个大盒子”的想法。