本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SWF 動作者
什麼是 Amazon SWF 中的動作者?
在操作期間,Amazon SWF 會與許多不同類型程式設計的演員。動作者可以是工作流程啟動者、決策者或活動工作者。這些動作者會透過的 API 與 Amazon SWF 進行通訊。您可以使用任何程式設計語言來開發這些動作者。
下圖顯示 Amazon SWF 架構,包含 Amazon SWF 及其動作者。
工作流程啟動者
工作流程啟動者是任何可起始工作流程執行的應用程式。以電子商務為例,一個工作流程啟動者可以是客戶下單的網站。另一個工作流程啟動者可以是客戶服務代表用來代替客戶下單的行動應用程式或系統。
決策者
決策者是工作流程協調性邏輯的實作。決策者負責控制工作流程執行內之活動任務的流程。只要在工作流程執行期間有所更動 (例如完成工作),就會將決策任務 (包含整個工作流程歷史記錄) 傳遞給決策者。決策者收到來自 Amazon SWF 的決策任務時,會分析工作流程執行歷史記錄,以判斷工作流程執行中的下一個適當步驟。決策者將這些步驟傳遞回 Amazon SWF,使用決定。決策是 Amazon SWF 資料類型,可代表各種後續動作。如需可能決策的清單,請前往決策,位於 Amazon Simple Workflow Service API 參考中。
以下範例是以 JSON 格式呈現的決策,而此格式的決策可傳輸至 Amazon SWF。此決策會新的活動任務進行排程。
{ "decisionType" : "ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes" : { "activityType" : { "name" : "activityVerify", "version" : "1.0" }, "activityId" : "verification-27", "control" : "digital music", "input" : "5634-0056-4367-0923,12/12,437", "scheduleToCloseTimeout" : "900", "taskList" : { "name": "specialTaskList" }, "scheduleToStartTimeout" : "300", "startToCloseTimeout" : "600", "heartbeatTimeout" : "120" } }
在工作流程執行啟動時,及每次工作流程執行內的狀態變更時,決策者會接收到決策任務。決策者會繼續接收決策任務並回應 Amazon SWF,直至決策者判斷工作流程執行完成,使工作流程執行繼續進展。直到最後,決策者會回應關閉工作流程執行的決策。工作流程執行關閉之後,Amazon SWF 就不會為該執行排程其他任務。
在電子商務範例中,決策者會判斷是否正確地執行每個步驟,然後排程下一個步驟或管理任何錯誤情況。
決策者代表單一電腦程序或執行緒。多個決策者可以處理相同工作流程類型的任務。
活動工作者
活動工作者是一種程序或執行緒,可執行屬於工作流程一部分的「活動任務」。活動任務代表您在應用程式中識別的其中一個任務。
若要在工作流程中使用活動任務,您必須使用 Amazon SWF 主控台或RegisterActivityType動作。
每個活動工作者都會輪詢 Amazon SWF,以獲取適合該活動工作者執行的新任務;某些任務只能由特定活動工作者來執行。收到任務之後,活動工作者會處理任務,完成後向 Amazon SWF 報告任務已完成並提供結果。然後活動工作者會輪詢新任務。與工作流程執行相關聯的活動工作者會以此方式繼續處理任務,直到工作流程執行本身完成為止。在電子商務範例中,活動工作者是信用卡處理者和倉儲員工這類人員所使用的獨立程序和應用程式,可在程序中執行個別步驟。
活動工作者代表單一電腦程序 (或執行緒)。多個活動工作者可以處理相同活動類型的任務。
動作者之間的資料交換
啟動工作流程執行時,即可將輸入資料提供給工作流程執行。同樣地,活動工作者為活動任務進行排程時,即可將輸入資料提供給活動工作者。活動任務完成時,活動工作者可以將結果傳回給 Amazon SWF。同樣地,決策者可以在工作流程執行完成時報告其結果。每個動作者都皆可透過字串 (使用者定義的形式) 在 Amazon SWF 中傳送和接收資料。根據資料的大小和敏感度,您可以直接傳遞資料,或傳遞指標至存放在另一個系統或服務 (例如 Amazon S3 或 DynamoDB) 上的資料。直接傳遞的資料以及其他資料存放區的指標會記錄在工作流程執行歷史記錄中;不過,Amazon SWF 不會複製或快取外部存放區中的任何資料來做為歷史記錄。
由於 Amazon SWF 會維護每個工作流程執行的完成執行狀態 (包含輸入和任務結果),因此所有動作者都可以是無狀態。工作流程處理因而極具擴展性。隨著系統負載的成長,您只要新增其他動作者即可增加容量。