[英]How does elasticsearch handle the priority of different tasks?
假设 elasticsearch 服务器在很短的时间内收到 100 个任务。 有些任务很短,有些任务很耗时,有些任务是删除任务,有些是插入和搜索查询。 elasticsearch如何决定先运行哪个,并发执行多少个任务。
elasticsearch 端是否有任务执行策略,或者它只是处理 FIFO 队列中的所有任务并允许同时运行一些固定数量的任务?
我希望 ES 有一些任务顺序优化功能。 否则,我们必须手动检查任务的状态,设置一些超时并进行一些重试,这有些不方便。
很好的问题,由于没有足够的关于任务执行优先级的文档,我们可以查看 Elasticsearch 的源代码来了解它是如何工作的。
首先,Elasticsearch在他们的官方文档中明确解释了他们维护不同的线程池来执行不同类型的任务。
使用上面的文档,以下事情很清楚:
现在开始调度/优先级/优化任务的执行,这在文档中没有很好地解释,我查看了 Elasticsearch 源代码并找到了Priority java class它在 Elasticsearch 代码的多个地方使用,定义任务的优先级,请参考使用LOW
优先级的FrozenCacheService 代码,因为更新此缓存的优先级不是太高,另一方面, slowclusterStateProcessing使用最高优先级,称为 Elasticsearch 中的IMMEDIATE
。
您还可以看到这个 Priority 枚举也用在PrioritizedEsThreadPoolExecutor中,它再次用于创建在我的帖子开头解释的不同线程池。
简而言之,Elasticsearch 确实有根据任务类型对任务进行排序,以优化任务的执行。
编辑:与优先搜索查询相关的问题https://github.com/elastic/elasticsearch/issues/37867以及该方向的一些工作https://github.com/elastic/elasticsearch/pull/57936
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.