簡體   English   中英

elasticsearch如何處理不同任務的優先級?

[英]How does elasticsearch handle the priority of different tasks?

假設 elasticsearch 服務器在很短的時間內收到 100 個任務。 有些任務很短,有些任務很耗時,有些任務是刪除任務,有些是插入和搜索查詢。 elasticsearch如何決定先運行哪個,並發執行多少個任務。

elasticsearch 端是否有任務執行策略,或者它只是處理 FIFO 隊列中的所有任務並允許同時運行一些固定數量的任務?

我希望 ES 有一些任務順序優化功能。 否則,我們必須手動檢查任務的狀態,設置一些超時並進行一些重試,這有些不方便。

很好的問題,由於沒有足夠的關於任務執行優先級的文檔,我們可以查看 Elasticsearch 的源代碼來了解它是如何工作的。

首先,Elasticsearch在他們的官方文檔中明確解釋了他們維護不同的線程池來執行不同類型的任務。

使用上面的文檔,以下事情很清楚:

  1. 它們有不同的線程池和隊列(具有不同的容量)來執行不同類型的任務,如管理任務、搜索任務、索引任務等
  2. 不同的線程池使 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM