摘要
我们需要提高过滤器性能(吞吐量)。
最有可能的方法是扩展到多个服务器。
问题
如何正确扩展?
1)基础索引中增加的分片数量是否允许并行运行更多的渗透请求?
2)如果仅进行渗透,ElasticSearch服务器需要多少内存?
最好有2台服务器配备4GB RAM还是一台服务器配备16GB RAM?
3)SSD有意义地帮助过滤器的性能,还是增加RAM和/或节点数量更好?
我们目前的情况
我们的工作索引中有200,000个查询(求职提醒)。 我们能够运行4个并行队列来调用过滤器。 每个查询都能在大约35秒内完成50个作业的批量处理,因此我们可以渗透:
4个队列*每批50个作业/ 35秒* 60秒分钟= 343 每分钟工作次数
我们需要更多。
我们的职位索引有4个分片,我们正在使用.percolator坐在该职位索引之上。
硬件:2个处理器服务器,总共32个核心。 32GB RAM。 我们为ElasticSearch分配了8GB内存。
当过滤器工作时,我上面提到的4个渗透队列消耗了大约50%的CPU。
当我们尝试将并行渗透队列的数量从4增加到6时,CPU利用率跃升至75%以上。 更糟糕的是,过滤器因NoShardAvailableActionException开始失败:
[2015-03-04 09:46:22,221] [DEBUG] [action.percolate] [Cletus Kasady] [工作] [3]碎片多渗透失败 org.elasticsearch.action.NoShardAvailableActionException:[jobs] [3] 空
该错误似乎表明我们应该增加分片数量并最终添加专用的ElasticSearch服务器(+后来增加节点数)。
相关: How to Optimize elasticsearch percolator index Memory Performance
答案 0 :(得分:2)
<强>答案强>
如何正确扩展?
问: 1)基础索引中增加的分片数量是否允许并行运行更多的渗透请求?
A:否。分片仅在创建群集时非常有用。单个实例上的其他分片实际上可能会恶化性能。通常,分片数应该等于节点数以获得最佳性能。
问: 2)如果仅进行渗透,ElasticSearch服务器需要多少内存?
最好有2台服务器配备4GB RAM还是一台服务器配备16GB RAM?
A:过滤器指数完全驻留在内存中,所以答案很多。它完全取决于索引的大小。根据我的经验,20万次搜索需要50MB的索引。在内存中,此索引将占用大约500MB的堆内存。因此,如果您正在运行,那么4 GB RAM就足够了。在你的情况下,我会建议更多的节点。但是,随着索引大小的增加,您需要添加RAM。
问: 3)SSD有意义地帮助过滤器的性能,还是增加RAM和/或节点数量更好?
A:我对此表示怀疑。正如我之前所说,过滤器驻留在内存中,因此磁盘性能不会成为瓶颈。
编辑:不要对这些内存估算采取行动。查看主ES站点上的site plugins。我发现Big Desk对于观看用于扩展和规划目的的性能计数器特别有用。这可以为您提供有关估算具体要求的更多有价值的信息。
编辑以回应@DennisGorelik发表的评论:
我完全从观察中得到这些数字,但在反思时它们才有意义。