前言

後續這兩篇文章,我們將簡單介紹 Azure 背景作業與排程工作: WebJob 與 Azure Function。 背景作業與排程工作在程式設計中相當重要,有別於過去撰寫排程與背景程式方式,使用者可以在 Azure Portal 上透過 WebJob 與 Azure Function 設定,直接執行你所需要的腳本與程式,相當方便。您也能介接其他 Azure 服務,讓工作流程更加完善。本篇文章會先介紹 WebJob,下篇再介紹 Azure Function,若有錯誤或任何建議,請各位先進不吝指教。

關鍵字:背景處理WebJob 與 Azure Fnction 之間的選擇Azure WebJob

webjob icon


介紹

背景處理

對許多類型的處理程序並不在使用者介面操作時執行,我們稱之為背景處理 (background processing),如:批次處理作業、密集處理作業程序與長時間執行工作流程。應用程式在啟動這些工作後,可以繼續處理用戶的請求。背景處理作業可以最小化使用者介面運作的負擔,藉此提高可用性並降低回應時間。背景處理工作類型如下:
  1. CPU 密集型作業:例如數學計算或模型分析。
  2. I / O 密集型作業:例如執行一系列儲存工作或建立索引。
  3. 批次處理作業:例如夜間數據更新或計劃處理。
  4. 長時間執行的工作流程:例如訂單履行或供應服務和系統。
  5. 敏感數據處理:將任務交給更安全的位置進行處理。
  6. 觸發器 (Trigger)
而其啟動方法如下:
事件驅動的觸發器:事件為觸發點 (通常是用戶採取的動作或工作流程中的步驟) 啟動任務。
排程驅動的觸發器:基於排程計劃啟動任務。這可能定期或指定未來時間的一次性啟用。



WebJob 與 Azure Fnction 之間的選擇

  1. 正常來說,會優先選擇 Azure Function: 因為支援多種語言、可以使用現有 lib
  2. 如果你已經有可執行的程式或腳本,而且你不想更動。
     - 可以進行排程 → 排程觸發 WebJob
     - 需要持續執行 → Continuous WebJob
     - 只有需要的時候執行 → 需要的時候觸發 WebJob
  3. 較客製化觸發或者控制 → WebJob SDK


Azure WebJob

WebJob 允許您在 App Service 中背景執行腳本或 console 應用程式。您可以在 Azure Portal 新增 WebJob 服務:

你可以選擇連續觸發兩種類型。連續類型 WebJob 將會執行至結束為止;觸發類型的 WebJob 則提供了可呼叫的 Webhook,以提供排程功能 。

Continuous
Triggered
當 WebJob 建立時立即啟動,直到工作結束為止。
若需要避免工作停止,通程會讓程式在無線迴圈中不斷進行。
當工作結束時,你可以重新啟動 WebJob。
手動或排程觸發時啟動。
可以在所有 Web Apps 上執行所有 instance;
你可以選擇限制它在單一 instance
Azure 負載平衡所選擇的 單一 instance 上執行。
支援遠端除錯
不支援遠端除錯

新增 Azure Web 工作


WebJob 可以支援的格式如下:
  1. cmd、.bat、.exe (使用 Windows 命令提示字元)
  2. .ps1 (使用 PowerShell)
  3. .sh (使用 Bash)
  4. .php (使用 PHP)
  5. .py (使用 Python)
  6. .js (使用 Node.js)
  7. .jar (使用 Java)

觸發與排程類型的 WebJob 有許多使用方式:
  1. 需要在 App Service App 背景執行大量可執行之程式和腳本。
  2. 透過 CRON 表示式 執行的排程作業。
  3. 在 Azure Portal 或透過基本身份驗證使用 admin API 執行所需要的作業。 例如,特殊情況下,需要執行之故障排除或清除資料腳本。
  4. 執行 Console Application 等可執行程式。
  5. 執行批次處理和 Javascript 等腳本。
  6. 想要自動執行目前仍在手動觸發的可執行程式。

我們用一個簡單呼叫網站的腳本,讓 WebJob 執行,執行內容如下:
Invoke-WebRequest -UseBasicParsing -Uri http://www.google.com


接著我們將資料壓縮成 .zip,於 Azure Portal 上建立新的 WebJob,時間我們設定為每30秒執行一次。


WebJob 建立完成後如下圖:


到了執行時間,我們點選儀表板上的 紀錄 即可看見執行詳細資料


理所當然,您也能透過 Visual Studio 建立 WebJob 專案,並且上傳。詳細過程就不再贅述,您可以參考:使用 Visual Studio 開發和部署 WebJob - Azure App Service