2013-04-06 23 views
8

我正在開發一個ASP.NET應用程序,它將上載到Azure上。如果我在Azure上有多個實例,並且想運行我的應用程序所需的cron作業。然後,我只想確認該cron作業是否只運行一次,或者每個實例會自行運行該cron?每個天藍色的實例是否運行cron?

例如:如果我在Azure上有4個雲服務實例,並且我的應用程序每天在晚上11:00運行一個cron作業。所以,我只想確認一下,如果該cron只運行一次,或者每個實例都會自行運行該cron(即cron將運行4次,或者每個實例可以說一次)?

請建議。

回答

3

在您的示例中,所有4個實例都會嘗試並運行cron作業。如果你想只有一個實例運行這個工作,你需要實現某種「鎖定」機制。通常人們做的是每個實例都會試圖在同一個blob上獲得1分鐘的租約。只有一例會成功獲得租約。你可以把只有能夠獲得租約的實例執行該cron作業的邏輯。

4

到目前爲止,我發現了3種做cron作業的方式,但是它們都需要一定程度的管理可能運行任務的多個實例。

到目前爲止,我已經使用了選擇:

  1. Windows任務調度程序 - 創建啓動腳本,將用戶和任務的安排吧。點擊此處瞭解詳情:Running Azure startup tasks as a real user這裏:Building a Task Scheduler in Windows Azure

  2. 使用Quartz.Net - 這我開始,但隨後移動到Windows任務調度程序,但它可能爲你工作,因爲你可以自定義的東西更容易。更多的信息在這裏:Using Quartz.net to Schedule Jobs in Windows.Azure Worker Roles

  3. 在移動服務中使用新的工作計劃。我沒有用過這個,但是當我去年年底閱讀這個博客時:Job Scheduling in Windows Azure我把它放在我的心理清單上,看看下一次我需要一個工作調度程序。它仍然有點新,但它也可以幫助你。

1

正如其他用戶所說,有很多方法可以做到這一點。我添加了一些建議。您是否開發了Cloude服務Web角色或Web站點?如果是前者,最簡單的方法是創建1個工作者角色(只有一個)並從那裏運行任務。它後者,你需要一個外部的「觸發器」:你可以使用調度器(通過Aditi)。你可以從Azure商店獲得它(有一個免費的餡餅)。

0

如果某個角色(Web/Worker/VM角色)具有多個實例,則表示您擁有相同的Windows Server VM帳戶(該版本取決於您配置的哪個guest OS版本)。每個虛擬機將運行完全相同的應用程序代碼(如ASP.NET Web應用程序),所有對此角色的請求都將進行負載均衡,並且其中一個虛擬機將根據循環策略切斷請求。

所以如果你的cron作業只需要運行一次,就像Guarav所說的那樣,你需要一些鎖定機制讓你的角色實例運行它。

相關問題