2012-11-24 60 views
16

我需要一個可以通過Internet控制的作業隊列管理器。它應該能夠執行和停止進程,檢查它們的狀態(理想情況下,在進程退出時注意並執行一些代碼),響應命令並且還能夠向服務器報告。具有RPC接口的作業隊列管理器

背景:我有一個GWT應用程序,允許創建作業在雲實例(當前EC2)上執行。我想將一個「作業包」(一個進程的數據等等)推送到S3,啓動一個Linux EC2實例(或使用一個已經運行的實例),然後告訴該實例的作業管理器執行該作業(可能與其他工作平行)。然後它應該從S3中提取「作業數據包」,運行一個對該數據進行操作的進程,並用一些信息(例如退出代碼,stdout,stderr)向運行我的GWT應用程序的服務器部分的服務器報告。如果我必須寫例如stdour/err到進程中的文件並讀取該文件,那也沒關係。

我真的很想讓管理者「接近」它運行的進程,這意味着我想避免使用JDK中的Runtime.exec之類的東西。看來如果我使用Quartz,我必須這樣做。

我很好,兩個方向的調用是異步的。只要我可以在我的GWT服務器端輕鬆構建一個接口(例如通過SSL向Servlet發送HTTP請求將是很好而微不足道的),我就可以使用任何合理的技術進行調用。

作業管理器不需要有非常複雜的排隊系統。按順序或並行運行多個進程應該沒問題。確定一個進程在其生命週期中接收多少計算時間會很好(AFAIK,這可能是有挑戰性的)。

我還沒有找到任何現有的軟件,包括http://java-source.net/open-source/job-schedulers。我懷疑我可能不得不在工作經理周圍建立一個RPC接口(當然有認證等);也許可以使用Apache Commons Exec之類的東西。在這種情況下,我更喜歡Java或Python作業管理器部分。

我很樂意聽到前者或後者情景的建議!

+2

這是一個非常具體的規範,沒有太多的問題。構建這個的一個通用解決方案需要很多抽象,以使其能夠與Quartz/GAE/etc以及logging/stdout&err一起工作,更不用說工作是如何開始的(依賴注入?Class.newInstance()?)工作是如何存儲的(您的案例需要S3,但GAE的數據存儲,SQL等對於一般的解決方案來說都是合理的)。 –

+0

感謝您的回答。我主要是尋找一個圖書館的建議,提供作業/過程排隊和管理,我可以建立一個RPC/RMI/...讓我可以在GWT應用程序和服務器端之間傳遞消息,或者可以做到這一點的完整解決方案。作業將作爲Linux機器上的進程運行 - 我只需要一種至少知道進程何時結束的好方法,並理想地找出其計算時間,或許可以排隊進程。在我看來,如何以及在哪裏存儲數據很容易解決(我對如何做到這一點非常瞭解)。 – admr

+0

Quartz在EC2上運行? – Peter

回答

0

你的問題不是很清楚。

  • 如果你只是想要一個工作隊列,還有那些一百萬(SQS,AMPQ,Redis的等)
  • 如果你想爲正在運行的作業和記錄結果的通用框架,看Rundeck
  • 如果您想要特別作業控制,只需使用tmux並通過SSH和/或CGI腳本對其進行編寫。

但是真的,我不確定是否有一個'通用'組件可以精確地做你想做的。只需啓動您最喜歡的框架並從您喜歡的語言中讀取系統調用。如果您學習了UNIX哲學,您可以從任何語言進行任何操作(運行過程,信號過程以暫停/終止)。也許存儲運行作業的數據庫等。