摘要
我们需要提高滤泡器的性能(吞吐量)。
最可能的方法是扩展到多台服务器。
问题
如何正确地进行扩展?
1)增加底层索引中的分片数量是否允许并行运行更多的滤泡请求?
2)如果ElasticSearch仅执行过滤操作,需要多少内存?
两个具有4GB RAM的服务器好还是一个具有16GB RAM的服务器好?
3)SSD是否有助于滤泡器的性能,还是增加RAM和/或节点数更好?
我们目前的情况
我们的工作索引中有200,000个查询(工作搜索警报)。
我们可以运行4个并行队列来调用滤泡器。 每个查询能够在约35秒内对50个作业进行过滤,因此我们可以过滤:4个队列*每批50个作业/ 35秒*每分钟60秒= 343 每分钟的工作
我们需要更多。
我们的工作索引有4个分片,并且我们正在使用.percolator位于该作业索引之上。
硬件:具有32个内核的2处理器服务器。 32GB RAM。 我们将8GB RAM分配给ElasticSearch。
当滤泡器正在工作时,我提到的4个滤泡队列会占用大约50%的CPU。
当我们尝试将并行滤泡队列数量从4增加到6时,CPU利用率跳至75%以上。 更糟糕的是,滤泡器开始出现NoShardAvailableActionException错误:
[2015-03-04 09:46:22,221][DEBUG][action.percolate] [Cletus Kasady] [jobs] [3]分片多过滤失败 org.elasticsearch.action.NoShardAvailableActionException:[jobs] [3] 空
该错误似乎表明我们应该增加分片数,并最终添加专用的ElasticSearch服务器(+稍后增加节点数)。