Linux

Linux 上的批處理

  • November 13, 2017

在業務中的另一個流程完成後,我們目前正在為一些繁重的工作 (ETL) 設置伺服器,目前我們正在通過預定的 cron 作業或遠端執行(通過 ssh)啟動作業。本週早些時候,我們遇到了一個問題,即係統上並行執行的作業過多,這導致所有作業在爭奪 CPU 時間時速度緩慢。

我一直在尋找一個批處理調度器,一個我們可以將作業插入執行隊列的系統,系統會一個一個地處理它們。任何人都可以建議一個程序/系統來做到這一點嗎?由於該項目的鞋帶性質,低成本/ FOSS 將受到讚賞。

我會設置某種排隊服務。一個關於“準備使用”的快速Google顯示:

根據您的需要,您可以簡單地

  • 創建一個使用者送出作業的包裝器,

  • 包裝器將作業寫入套接字/文件/任何東西

  • 創建一個消費者,逐個執行作業,等待它完成

  • 然後由 cron 定期呼叫消費者(每 5 分鐘左右)

    • 當然要創建一些鎖定機制,以便一次只執行 n 個作業(其中 n=>1)
  • 如果沒有更多的工作什麼都不做

  • 如果有更多的工作抓住下一個並等待它完成

實際上還有更多,您可能有實現優先級隊列的要求,這會帶來諸如飢餓作業或類似問題之類的問題,但是讓某些東西快速啟動並執行並不是那麼糟糕。

如果 LDP 按照womble的建議,我會接受。由更大的社區維護這樣一個系統當然比為其他人已經解決的問題創建自己的錯誤更好:)

此外,排隊服務具有將資源與實際數字運算解耦的優勢。通過通過某些網路連接使作業可用,您可以簡單地將硬體置於(可能的)擴展問題上,並具有幾乎無限的可擴展性。

引用自:https://serverfault.com/questions/24654