2012-10-18 44 views
0

我正在開發一個有兩個需求的新建項目。在雲計算和本地安裝上安排作業

  • 要跑在雲端(Azure)。
  • 要在自承載的Windows Server安裝上運行。

該項目分爲3個主要部分。

  1. 一羣客戶。
  2. 一個RESTful服務器。
  3. 持久性存儲。

對於這個問題,客戶端是無關緊要的,REST風格的服務器是建立與ASP.NET的WebAPI(滿足上述要求)和持久存儲Azure的表在雲中的情況下,或RavenDb時自我主辦。對於這個問題。

在此體系結構中調度作業的最佳機制是滿足上述兩個要求的最佳機制。

我有一個工作的概念,通過查詢RESTful服務器並要求它對任何活動作業執行預定時間檢查,以便服務真的只需要做一個非常簡單的休息查詢即可啓動該過程。

所有作業和運行它們的邏輯(它們是模板)位於服務器上,因此服務不需要任何邏輯。

最終,最好的迴應是某種代理服務,要求該服務執行檢查。如果我可以直接將它構建到ASP.NET WebApi服務器中,我會更加快樂。這是一種新技術,所以請原諒我可能錯過的任何明顯的疏忽,這將解決這個問題。

+1

你看過Quartz.net(http://www.quartz-scheduler.net/)的調度任務嗎? –

+0

我還沒有專門查看特定的庫,因爲我不確定從架構的角度來看我需要什麼。我也很謹慎的爲我所需要的添加一個lib依賴項,這本質上是某種運行請求的代碼。 – deanvmc

+0

石英是穩定的大量以下 - 但這意味着你需要自己實施一切。 –

回答

1

一種方法是編寫一個非常簡單的'調度程序服務'(原則上與OP註釋中提到的石英調度程序類似),寫入[在此處插入最喜歡的.Net語言]。

該服務可以像您希望的那樣簡單或複雜;在較低端,它可以簡單地操作計時器,該計時器將按設定的時間間隔調用REST API來觸發您的過程

服務本身可以被編寫爲一個類庫,然後可以在部署在Windows Server安裝;或者在部署到雲時託管在Azure工作者角色中。當部署在Azure Worker Role中時,調度程序可以以最低的成本輕鬆運行在XS實例(1GHz CPU,768MB RAM,20GB存儲)內 - 按當前價格每月$ 14.40。

該方法允許在兩種解決方案中使用相同的代碼庫(只需引用類庫項目),並且可以獨立進行單元測試。

採取這種方法更進一步,您可以在運行時自動加載類庫程序集,使得將來的部署和升級非常簡單,只需要極端

+0

啊,這似乎很容易,是的,基本上服務只需要每5到10分鐘打勾一次,所以我認爲這個想法非常合適,我不認爲在Azure上運行服務很便宜,但基於這些成本四捨五入一年是可以接受的。乾杯! – deanvmc

+0

等等,我只是重讀最後一部分,我甚至不需要單獨的工作者角色,因爲我在雲部署的情況下使用webapi的web角色,我可以讓服務在其旁邊旋轉。你先生是個傳奇! – deanvmc

+3

@deanvmc - 請記住:如果您將調度程序服務與您的Web角色一起運行,則需要確保只有一個調度程序實例正在運行(實際上,與單獨角色相同的問題)。當您增加Web角色(您的情況爲REST API)或工作者角色(專門根據Nick的建議調度)時,問題就出現了。無論哪種情況:您只應運行一個調度程序副本。您可以使用blob-lease作爲互斥體,作爲實現此目的的一種方式。 –