Apache Solr 处理数十万个请求

Apache Solr handle hundreds of thousands requests

我们有一个小型的本地搜索应用程序。对于后台服务,我们使用 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/

如果您计划每秒处理数十万个请求,您将需要不止一台服务器 - 无论它有多大。即使它只是为了 HA / DR 目的。所以我建议使用 SolrCloud 并将索引分片到多台机器上并使用多个副本,这样就可以开始了。

除此之外,细节决定成败

  1. 您希望查询执行多快(中位数和 99%ile)。这将帮助您调整大小 CPU 和内存需求。
  2. 您的查询有多复杂?
  3. 你在使用过滤器吗? (需要更多堆内存)
  4. 您的磁盘访问速度有多快?
  5. 您是否会实时添加数据(影响您对自动提交和软提交的设置

但首先你需要摆脱 "one big box" 思考。