PAAS/SAAS平臺基礎——Azure WebJob
目錄
1、工作任務系統
在PAAS平臺或SAAS平臺的基礎設施中,如果沒有一個後臺工作任務的系統,則很多譬如傳送郵件、簡訊、定時匯出報表等的工作繁瑣而難以保證,因此亟需這樣的一個任務系統基礎服務解決當下痛點。
然而在網站下並沒有一個很好的解決方案可以在後臺進行常規工作和批量工作。現在Azure雲支援一個名為“ Azure WebJobs ” 的東西來簡單地解決這個問題。
2、Azure 雲提供的工作任務
系統支援各種不同的語言。
3、使用場景
當我想做一些簡單的事情 - 比如調整一些影象時 - 我會寫一個指令碼或一個小的.NET應用程式。事情確實變得複雜,但是當你想要採取簡單的事情並做n次時。將命令列應用程式擴充套件到雲通常會涉及大量的工作。
假設我想在命令列中使用此功能,並在雲中大規模執行:
public static void SquishNewlyUploadedPNGs(Stream input, Stream output)
{
var quantizer = new WuQuantizer();
using ( var bitmap = new Bitmap(input))
{
using (var quantized = quantizer.QuantizeImage(bitmap))
{
quantized.Save(output, ImageFormat.Png);
}
}
}
WebJobs旨在使開發,執行和擴充套件更容易。它們內置於Azure網站中,並與您的網站在同一個VM中執行。
以下是一些適用於Windows Azure WebJobs SDK的典型場景:
- 影象處理或其他CPU密集型工作。
- 佇列處理。
- RSS聚合。
- 檔案維護,例如聚合或清理日誌檔案。
- 您希望在後臺執行緒中執行的其他長時間執行的任務,例如傳送電子郵件。
WebJobs以兩種不同的方式呼叫,無論是觸發還是持續執行。觸發的作業按計劃發生,或者當某些事件發生時,連續作業基本上會執行一個while迴圈。
通過將WebJobs複製到檔案系統中的正確位置(或使用指定的API執行相同操作)來部署WebJobs。以下檔案型別被接受為可用作作業的可執行指令碼:
- .exe - 使用WebJobs SDK編譯的.NET程式集
- .cmd,.bat,.exe(使用windows cmd)
- .sh(使用bash)
- .php(使用php)
- .py(使用python)
- .js(使用節點)
從門戶部署WebJobs後,您可以啟動和停止作業,刪除它們,將作業上載為ZIP檔案等。您可以完全控制。
但值得指出的是,Azure WebJobs 不僅僅是預定的指令碼,您還可以將WebJobs建立為用C#編寫的.NET專案或其他任何東西。
4、來個栗子
現在我們部署一個控制檯程式上去。
using Microsoft.WindowsAzure.Jobs;
using nQuant;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void SquishNewlyUploadedPNGs(
[BlobInput("input/{name}")] Stream input,
[BlobOutput("output/{name}")] Stream output)
{
var quantizer = new WuQuantizer();
using (var bitmap = new Bitmap(input))
{
using (var quantized = quantizer.QuantizeImage(bitmap))
{
quantized.Save(output, ImageFormat.Png);
}
}
}
}
}
在Azure網站上設定:
配置引數齊全!!
5、結論
自己編寫一個任務平臺並不是很難的事情,關鍵在於擴充套件的思路,而微軟的Azure平臺已經準備好了一切。
特別注意:Web 應用可在進入非活動狀態 20 分鐘後超時。 只有向實際 Web 應用發出的請求才會重置計時器。如果你是IIS的宿主,請調整好引數。