問:什麼是 Amazon SWF?
Amazon Simple Workflow Service (SWF) 是能夠在各個分散式應用程式元件之間輕鬆協調工作的一項 Web 服務。Amazon SWF 可以用協調任務的方式來設計適用於下列各種使用案例的應用程式,包括媒體處理、Web 應用程式後端、業務處理工作流程及分析管道。任務是代表應用程式中的不同處理步驟的呼叫,它可透過可執行程式碼、Web 服務呼叫、人工作業以及指令碼來執行。

任務的協調包括根據應用程式的邏輯流程來管理執行相依性、排程及並行。有了 Amazon SWF,開發人員可完全控制處理步驟的實作以及協調推動各步驟的任務,而不用擔心追蹤進度和保存狀態等底層複雜的工作。Amazon SWF 還提供 AWS Flow Framework,以協助開發人員在開發應用程式過程中使用非同步的程式設計。透過使用 Amazon SWF,開發人員可受益於程式設計的簡易性,並能改進其應用程式的資源利用率、延遲及輸送量。

開始免費使用 AWS

建立免費帳戶
或者,請登入主控台

AWS 免費方案包括 Amazon ElastiCache 提供的 750 小時微型快取節點。

查看 AWS 免費方案詳細資訊 »

問:以協調任務的方式設計應用程式有哪些優點?Amazon SWF 如何透過這樣做來協助我?
在 Amazon SWF 中,任務係指應用程式中邏輯步驟的呼叫。任務是由工作者處理,而工作者是和 Amazon SWF 互動以取得任務、處理任務並傳回任務結果的程式。工作者會實作應用程式處理步驟。您可以用不同的程式設計語言來建構工作者,甚至可以重新使用現有的元件來快速建立工作者。例如,您可以使用雲端服務、企業應用程式、傳統系統甚至簡單的指令碼來實作工作者。您可以透過個別控制處理每種任務的工作者數量,有效控制應用程式的輸送量。

要協調各工作者中的應用程式執行,您可以用自選的程式設計語言編寫一個所謂的「決策程式」。將處理步驟分開並進行協調,就可以用受控制的方式來管理您的應用程式,並讓您能夠靈活地分別部署、執行、擴展和更新它們。您可以選擇在雲端 (例如 Amazon EC2 或 Lambda) 或在企業防火牆內的機器上部署工作者和決策程式。由於工作者和決策程式的去耦,您的商業邏輯可以是動態的,而且您的應用程式可以快速更新以適應新的需求。例如,您可以移除、略過或重試任務,並簡單地透過變更決策程式來建立新的應用程式流程。

經由實作工作者和決策程式,您會把焦點放在差異化的應用程式邏輯,因為它們與執行實際的處理步驟及步驟協調有關。Amazon SWF 會處理底層的詳細資訊,例如在任務可被指派之前儲存任務、監控指派的任務以及任務完成時提供一致的資訊。Amazon SWF 還可以透過 API 和主控台在每個任務層級提供持續的可見性。

問:Amazon SWF 可用來做什麼?
當您使用分散式元件來建構應用程式時,可使用 Amazon SWF 解決出現的多項挑戰。例如,您可以使用 Amazon SWF 和隨附的 AWS Flow Framework 執行以下事項:

  • 使用簡單的程式設計結構,以非同步程式形式來編寫用於擷取詳細資訊的應用程式,例如啟動任務以遠端執行及追蹤程式的執行時間狀態。
  • 保存應用程式的執行狀態 (例如,已完成哪些步驟、正在執行哪些步驟等)。您不需要使用資料庫、自訂系統或專用解決方案來保存執行狀態。
  • 在各應用程式元件之間溝通和管理工作流程。使用 Amazon SWF,您無需設計簡訊發送協定,也不必擔心任務遺失和重複。
  • 集中協調應用程式中的步驟。您的協調邏輯不需要分散在不同的元件,但可以封裝在單一程式中。
  • 將各種程式和元件整合到您的應用程式中,包括傳統系統和第三方雲端服務。透過允許應用程式在任何位置、以任何組合形式靈活部署應用程式元件,Amazon SWF 可協助您逐步將應用程式元件從私有資料中心遷移到公共雲端基礎設施,而不會中斷應用程式可用性或效能。
  • 將工作流程自動化,包括長時間執行的人工任務 (例如,核准、審核、調查等) 也自動化。Amazon SWF 能夠可靠地追蹤執行長達數天或數月的處理步驟的狀態。
  • 在 Amazon SWF 的基礎上建構應用程式層,以支援最終使用者的網域特定語言。由於 Amazon SWF 賦予您充分的彈性來選擇程式設計語言,所以您可以便利地為特殊化語言 (如 XPDL) 建構編譯器以及自訂的使用者界面 (包括建立模型工具)。
  • 取得應用程式執行中的所有執行個體的詳細稽核追蹤與可見性資料。您也可以使用 Amazon SWF 提供的 API,將 Amazon SWF 提供的可見性功能納入自己的使用者界面。

客戶已經使用 Amazon SWF 來建構應用程式,以用於影片編碼、社交商務、基礎設施預設定、MapReduce 管道、業務流程管理及其他一些使用案例。有關使用案例的更多詳細資訊,請參閱「哪些使用案例可透過 SWF 解決?」。要檢視客戶現在如何使用 Amazon SWF,請閱讀我們的案例研究。

問:相較於自主解決方案與現有的工作流程產品,Amazon SWF 有哪些優點?
在分散式環境中建構解決方案來協調任務時,開發人員必須考慮數個變數。推進處理步驟的任務可能會長時間執行,且可能出現故障、逾時或需要重新開始。而它們完成時的輸送量和延遲通常也不相同。在這些情況下,追蹤和檢視任務不僅非常困難,而且是毫無差別的工作。隨著應用程式和任務增加,開發人員要面臨困難的分散式系統問題。例如,他們必須確保每個任務只指派一次,在意外故障和中斷的情況下確實地追蹤結果。透過使用 Amazon SWF,開發人員就可以專注在差異化的應用程式邏輯,也就是處理任務和協調任務的方式。

現有的工作流程產品通常會強迫開發人員學習特殊化的語言,託管昂貴的資料庫,並放棄任務執行的控制。這些特殊化的語言使得表達複雜應用程式變得困難,而且不夠靈活以快速地套用變更。而 Amazon SWF 是一種雲端服務,允許開發人員使用常見的程式設計語言,並可以控制在哪裡處理任務。Amazon SWF 對分散式應用程式採用鬆散耦合的模型,所以能夠敏捷地進行變更。

問:什麼是工作者和決策程式?
在 Amazon SWF 中,應用程式的實作是透過建構工作者和決策程式,它們會直接與服務溝通。工作者是跟 Amazon SWF 互動以取得任務、處理收到的任務及傳回結果的程式。決策程式是根據應用程式邏輯來控制任務協調 (如順序、並行及排程等) 的程式。工作者和決策程式可以在雲端基礎設施 (例如 Amazon EC2) 上執行,也可以在防火牆內的機器上執行。Amazon SWF 會居中協調工作者和決策程式之間的互動。它允許決策程式統一檢視任務的進度並持續啟動新的任務。同時,Amazon SWF 可存放任務,在任務就緒時將它們指派給工作者,並監控任務進度。它也確保每個任務只會獲指派一次,絕對不會重複。因為 Amazon SWF 可長期保存應用程式的狀態,所以工作者和決策程式不需要追蹤執行狀態。它們可以獨立執行,並快速擴展。請參閱 Amazon SWF 詳細資訊頁面的「功能」部分,進一步了解使用 Amazon SWF 來建構應用程式的詳細步驟。

您在 Amazon SWF 上可讓一個工作流程有數個並行運行項目。每個運行是指一個工作流程執行或一個執行。而執行是以唯一的名稱來辨識。您可以使用 Amazon SWF 管理主控台 (或可見性 API) 來檢視整體的執行情況,並深入查詢指定的執行來檢視任務層級的詳細資訊。

問:Amazon SWF 可為編寫應用程式提供哪些程式設計上的便利性?
如同其他 AWS 服務,Amazon SWF 提供用於 Web 服務 API 的核心開發套件。此外,Amazon SWF 還提供名為 AWS Flow Framework 的開發套件,讓您能夠快速輕鬆地開發以 Amazon SWF 為基礎的應用程式。AWS Flow Framework 使用熟悉的程式設計結構來擷取任務層級協調的詳細資訊。當執行程式時,該架構會呼叫 Amazon SWF,使用 Amazon SWF 保存的執行歷史記錄來追蹤程式的執行狀態,並適時呼叫程式碼的相關部分。AWS Flow Framework 提供直覺的程式設計架構來存取 Amazon SWF,讓開發人員能夠以工作流程中建構的非同步互動來編寫整個應用程式。有關更多詳細資訊,請參閱「什麼是 AWS Flow Framework?」

問:何時應該使用 Amazon SWF 或 AWS Step Functions?

AWS Step Functions 是一種全受管服務,可讓您使用視覺化的工作流程,輕鬆地協調分散式應用程式與微型服務的元件。您不用撰寫決策程式,只需以 JSON 定義狀態機器。AWS 客戶應該為新的應用程式考慮使用 Step Functions。如果 Step Functions 不符合您的需要,則應該考慮 Amazon Simple Workflow (SWF)。Amazon SWF 讓您可以完全控制協調邏輯,但會增加開發應用程式的複雜程度。您可以使用所選的程式設計語言來撰寫決策程式,或是以 Flow Framework 來使用程式設計結構為您建構非同步互動。AWS 將繼續提供 Amazon SWF 服務、Flow Framework,也會支援所有 Amazon SWF 客戶。

問:Amazon SWF 與 Amazon SQS 有何不同?

Amazon SQS 和 Amazon SWF 都是可推動應用程式或微型服務整合的服務:

  • Amazon Simple Queue Service (Amazon SQS) 提供可靠、可高度擴展的託管佇列用以存放訊息,同時還能在應用程式或微型服務之間移動。Amazon SQS 能夠在分散式應用程式元件之間移動資料,並協助您去耦這些元件。
  • Amazon Simple Workflow Service (Amazon SWF) 是能夠在各個分散式應用程式元件之間輕鬆協調工作的一項 Web 服務。

Amazon SQS 與 Amazon SWF 的主要區別如下:

  • Amazon SWF API 動作是任務導向。Amazon SQS API 動作是訊息導向。
  • Amazon SWF 會追蹤應用程式中的所有任務和事件。Amazon SQS 則需要自行實作應用程式層級追蹤,特別在應用程式使用多個佇列時。
  • Amazon SWF 主控台和可見性 API 提供以應用程式為中心的檢視,讓您可以搜尋執行,深入檢視執行的詳細資訊以及管理執行。Amazon SQS 需要實作這類額外功能。
  • Amazon SWF 提供了一些可加速應用程式開發的功能,例如,在各任務之間傳送資料、信號傳送、分發任務的彈性。Amazon SQS 需要實作一些應用程式層級的功能。
  • 除了呼叫服務 API 的核心開發套件外,Amazon SWF 還提供 AWS Flow Framework,您可以利用它使用程式設計結構編寫分散式應用程式,以建構非同步互動。

雖然您可以使用 Amazon SQS 建置基本工作流程以協調分散式應用程式,但 Amazon SWF 本身即具有此設備以及其他應用程式層級功能。

建議您同時試用 Amazon SQS 與 Amazon SWF,以決定最符合您需求的解決方案。

問:使用 Amazon SWF 可以解決哪些使用案例?

Amazon SWF 已經應用於媒體處理、業務流程自動化、資料分析、遷移至雲端以及批次處理等使用案例。以下是一些範例:

使用案例 #1:使用 Amazon S3 和 Amazon EC2 的影片編碼。在此使用案例中,是以區塊形式將大型影片上傳到 Amazon S3。區塊的上傳過程必須受到監控。區塊上傳之後,要將它下載到 Amazon EC2 執行個體進行編碼。經過編碼的區塊會儲存到另一個 Amazon S3 位置。以這種方式將所有區塊進行編碼之後,會將它們合併成一個完整的編碼檔案,再整個放回 Amazon S3。如果處理期間有一或多個區塊發生編碼錯誤,此程序便可能失敗。此類故障需要偵測和處理。

使用 Amazon SWF:整個應用程式會建構成一個工作流程,其中每個影片檔將作為一個工作流程執行來處理。下面這些任務是由不同的工作者處理:將區塊上傳到 Amazon S3、從 Amazon S3 下載區塊到 Amazon EC2 執行個體並對其編碼、將區塊放回 Amazon S3、將多個區塊合併成單一檔案,再將完整的檔案上傳到 Amazon S3。決策程式將啟動並行任務,在此使用案例中利用並行機制。它會啟動一項任務來編碼已上傳的區塊,而不必等待要上傳的其他區塊。如果某個區塊的任務失敗,決策程式只會針對該區塊重新執行任務。Amazon SWF 保存的應用程式狀態可協助決策程式控制工作流程。例如,決策程式會使用它來偵測所有區塊均已編碼,並放到它們的 Amazon S3 位置以進行合併的時間。在 Amazon SWF 管理主控台會持續追蹤執行的進度。如果有故障,將標明失敗的特定任務,並用它來準確找到出現故障的區塊。

使用案例 #2:使用 Amazon Mechanical Turk 處理大型產品目錄。在驗證大型目錄中的資料時,目錄中的產品會以批次處理。不同批次可同時處理。將從資料中心的伺服器中提取每個批次的產品資料,然後轉換成 Amazon Mechanical Turk 的 Requester User Interface (RUI) 所要求的 CSV (逗號分隔值) 檔案。上傳 CSV 以填寫和執行 HIT (人力智慧任務)。完成 HIT 後,將結果 CSV 檔案反向轉換,使資料返回原始格式。接著評估結果,Amazon Mechanical Turk 工作者會針對可接受的結果付費。故障將會清除及重新處理,而使用可接受的 HIT 結果更新目錄。在批次處理過程中,系統需要追蹤 Amazon Mechanical Turk 工作者的品質並據此調整費用。出現故障的 HIT 會重新進行批次處理,並透過管道再次傳送。

使用 Amazon SWF:以上使用案例會以一組工作流程的方式實作。BatchProcess 工作流程會負責單一批次的處理。它擁有可擷取資料、轉換資料並透過 Amazon Mechanical Turk 發送資料的工作者。BatchProcess 工作流程會輸出可接受的 HIT和失敗的 HIT。這會用來當作其他三個工作流程的輸入資訊:MTurkManager、UpdateCatalogWorkflow 和 RerunProducts。MTurkManager 工作流程負責對可接受的 HIT 付費、回應生成失敗 HIT 的人工工作者,以及更新自己的資料庫以追蹤結果品質。UpdateCatalogWorkflow 會根據可接受的 HIT 更新主目錄。RerunProducts 工作流程會一直等待,直到形成足夠數量的失敗 HIT 產品。然後,它會建立一個批次,將其發送回 BatchProcess 工作流程。整個端到端目錄處理是由 CleanupCatalog 工作流程執行,這個工作流程會啟動以上工作流程的子執行。具備良好定義的工作流程系統,可讓此使用案例在擁有數百萬產品的目錄上能夠有系統地架構、稽核和執行。

使用案例 #3:將元件從資料中心遷移到雲端。業務關鍵操作由私有的資料中心託管,但需要整體遷移到雲端中,而不會導致中斷。

使用 Amazon SWF:以 Amazon SWF 為基礎的應用程式可以將包含資料中心所執行元件的工作者與雲端中執行的工作者合併在一起。若要無縫轉移資料中心工作者,會先在雲端中部署相同類型的新工作者。資料中心的工作者與新的雲端工作者會繼續照常執行。傳送部分負載給以雲端為基礎的工作者,以測試和驗證它們。測試期間,應用程式不會中斷,因為資料中心的工作者一直在執行。測試成功之後會逐步停止資料中心的工作者,並持續擴展在雲端中的工作者,直到最後全部在雲端中執行。您可以針對資料中心的所有其他工作者重複這個程序,以將整個應用程式移到雲端。如果因為一些業務考量,某些處理步驟必須繼續在私有資料中心執行,這些工作者可以繼續在私有資料中心執行,同時也參與應用程式。

請參閱我們的案例研究,了解開發人員和企業使用 Amazon SWF 建構的更多令人激賞的應用程式和系統。

問:Amazon 是否在自己的應用程式中使用 Amazon SWF?
是。Amazon 的開發人員每天使用 Amazon SWF 處理各種專案並執行數百萬個工作流程執行。他們的使用案例包括 Amazon.com 和 AWS 網站幕後的關鍵業務流程、實作多項 AWS Web 服務及其 API、對營運決策進行 MapReduce 分析及管理網頁、影片和 Kindle 書籍等面向使用者的內容。

問:如何開始使用 Amazon SWF?
要註冊 Amazon SWF,請移至 Amazon SWF 詳細資訊頁面,然後按一下 "Sign Up Now" 按鈕。如果沒有 Amazon Web Service 帳戶,系統將會提示您建立一個。註冊之後就可以在 AWS 管理主控台逐步執行範例,此範例將引導您了解使用 Amazon SWF 執行簡單圖像轉換應用程式的步驟。您也可以下載 AWS Flow Framework 範例以了解該服務的各種功能。要在應用程式中開始使用 Amazon SWF,請參閱 Amazon SWF 文件。

問:是否有可用來試用 Amazon SWF 的範例工作流程?
是。當您開始使用 Amazon SWF 時,可以在 AWS 管理主控台逐步嘗試操作範例,它們將指導您註冊網域和類型、部署工作者與決策程式及開始工作流程執行。您可以下載此逐步介紹中使用的工作者和決策程式的程式碼,然後在自己的基礎設施中執行它們,甚至修改它們以建構自己的應用程式。您也可以下載 AWS Flow Framework 範例,它們描述了分散式資料處理、Cron 工作和應用程式堆疊部署等各種使用案例對 Amazon SWF 的使用情況。透過查詢隨附的原始程式碼,您可以進一步了解 Amazon SWF 的功能及如何使用 AWS Flow Framework 來建構自己的分散式應用程式。

問:有哪些不同的方式來存取 SWF?
您可以用下面任何方式存取 SWF:

  • 適用於 Java、Ruby、.NET 和 PHP 的 AWS 開發套件
  • 適用於 Java 的 AWS Flow Framework (隨附在適用於 Java 的 AWS 開發套件)
  • Amazon SWF Web 服務 API
  • AWS 管理主控台


問:什麼是註冊?
註冊是為各種不同類型的工作流程和活動執行的一次性步驟。您可以用程式設計方式或透過 Amazon SWF 管理主控台來註冊。在註冊時,您需要為每種活動和工作流程類型提供唯一的類型 ID。也要提供執行工作流程時使用的預設資訊,例如逾時值和任務分發參數。

問:什麼是網域?
您在 SWF 中要為自己的應用程式資源定義稱為網域的邏輯容器。網域只能在 AWS 帳戶層級建立,不能巢狀嵌入。網域可以有使用者定義的任何名稱。每個應用程式資源 (例如,工作流程類型、活動類型或執行) 只能屬於一個網域。在註冊時,您需要指定在哪個網域下註冊工作流程或活動類型。當您開始執行時,將自動在與其工作流程類型相同的網域中建立任務。資源識別符的唯一性 (如類型 ID、執行 ID) 範圍只限於網域內,也就是您可以在不同的網域中重複使用識別符。

問:如何管理分佈在不同環境和群組的應用程式資源?
您可以使用網域來組織應用程式資源,讓它們易於管理,且不會不小心互相影響。例如,您可以為開發、測試和生產環境建立不同的網域,並在每個網域中建立適當的資源。雖然可以在前述的每個網域中註冊相同的工作流程類型,但在各個網域中會將其視為獨立的資源。您可以在開發網域中變更它的設定,或在測試網域中管理執行,而不會影響生產網域中對應的資源。

問:決策程式在 Amazon SWF 中如何協調工作流程?
決策程式可視為特殊類型的工作者。就如同工作者,您可以用任何語言編寫決策程式,並且它可從 Amazon SWF 取得任務。不過,它處理的是稱為決策任務的特殊任務。當工作流程執行有轉變 (例如正在完成活動任務或活動任務逾時) 時,Amazon SWF 將發佈決策任務。決策任務包含輸入、輸出及之前啟動的活動任務的目前狀態等資訊。決策程式會使用這些資料來確定後續步驟,包括任何新的活動任務,然後將這些資料傳回 Amazon SWF。Amazon SWF 會依次制定這些決策,然後在適當時啟動新活動任務並監控它們。決策程式透過持續回應決策任務,來控制活動任務的順序、時間和並行,進而執行應用程式中的處理步驟。當執行開始時,SWF 會發佈第一個決策任務。自此之後,Amazon SWF 將制定決策程式提出的決策以推動任務的執行。執行將繼續進行,一直到決策程式作出完成執行的決策為止。

為了協助決策程式作出決策,SWF 會持續保存有關執行中所有任務詳細資訊的記錄。這份記錄稱為歷史記錄,而且對於每個執行而言是唯一的。當執行開始時會啟動新的歷史記錄。歷史記錄在當時會包含執行的輸入資料等初步資訊。之後,隨著工作者處理活動任務,Amazon SWF 會用它們的輸入和輸出資料及最新狀態來更新歷史記錄。當決策程式取得決策任務時,它可以檢查執行的歷史記錄。Amazon SWF 會確保歷史記錄準確反映決策任務發佈時的執行狀態。因此,決策程式可以使用歷史記錄來判定執行之中已發生的事情,並決定適當的後續步驟。

問:如何確保工作者或決策程式只會取得其了解的任務?
您可以使用任務清單來決定任務的指派方式。任務清單是所啟動的任務會新增到其中,並從其中請求任務的 Amazon SWF 資源。任務清單可由使用者定義的名稱來識別。任務清單可能包含不同類型 ID 的任務,但它們必須屬於活動任務或決策任務。您在註冊時要為每種活動和工作流程類型指定一個預設任務清單。Amazon SWF 也讓您可以在執行時間建立任務清單。建立任務清單的方法非常簡單,只要為任務清單命名就能開始使用它。任務清單的使用方式如下:

  • 當啟動活動任務時,決策程式可將其加入特定的任務清單,也可以請求 Amazon SWF 將其加入其活動類型的預設任務清單。
  • 當開始執行時,您可以請求 Amazon SWF 將其所有決策任務加入特定的任務清單或加入該工作流程類型的預設任務清單。
  • 當請求任務時,決策程式和工作者可以指定它們希望從哪個任務清單接收任務。如果清單中有任務,SWF 會在回應中傳送它並包含它的類型 ID。

綜合以上所述,您可以控制任務要加入哪個任務清單,以及誰可以從每個清單要求任務。因此,您可以確保工作者和決策程式只會取得其了解的任務。

問:什麼是 AWS Flow Framework?它能如何協助我協調工作流程?
AWS Flow Framework 是一種程式設計架構,可以讓您快速且輕鬆地開發以 Amazon SWF 為基礎的應用程式。它會擷取任務層級協調的詳細資訊,並和簡單的程式設計結構進行非同步的互動。在 Amazon SWF 中的工作流程協調包含啟動需要不同時間完成的遠端動作 (例如,活動任務) 及正確實作各任務之間的相依性。

AWS Flow Framework 讓您可以透過熟悉的程式設計概念方便地表達協調的不同方面。例如,啟動活動任務就像呼叫一種方法一樣簡單。AWS Flow Framework 會自動將呼叫轉譯成決策,以啟動活動任務,並讓 Amazon SWF 指派任務給工作者,進行監控並在完成時回報。該架構在從方法呼叫傳回值時,會以程式碼形式向您提供任務結果,包括其輸出資料。為了表達任務的相依性,您只需像處理典型的方法呼叫一樣,在程式碼中使用傳回的值。該架構的執行時間將自動等待任務完成,並只在結果可用時繼續您的執行。在幕後,該架構的執行時間會從 Amazon SWF 接收工作者和決策任務,在適當的時間叫用程式中的相關方法,並制定決策以送回 Amazon SWF。透過提供直覺的程式設計架構來存取 Amazon SWF,AWS Flow Framework 讓使用者能夠在應用程式開發時輕鬆加入非同步和事件驅動的程式設計。

問:工作者和決策程式如何與 Amazon SWF 溝通?輪詢協議不是會耗用大量資源嗎?
通常,以輪詢為基礎的協議會要求開發人員找出一個最佳的輪詢頻率。如果開發人員輪詢的頻率太高,許多輪詢可能會傳回空的結果。這樣將導致輪詢耗費大量應用程式和網路資源,但沒有有意義的輸出結果來推動執行。如果開發人員輪詢的頻率不足,則訊息可能會保留較長的時間,進而增加應用程式延遲。

為了克服輪詢內在的效率低下問題,Amazon SWF 提供長時間輪詢。長時間輪詢可大幅降低輪詢傳回空任務的次數。當工作者和決策程式輪詢 Amazon SWF 以取得任務時,如果沒有的可用任務,則該連線會保留一分鐘。如果在該段期間有可用任務,它們將針對長時間輪詢的請求傳回回應。透過將連線保留一段時間,可避免該段期間傳回空結果的其他輪詢。您的應用程式使用長時間輪詢之後,將獲益於輪詢的安全性和流程控制優勢,而不會損害推送 Web 服務提供的延遲和效率優勢。

問:是否可以使用現有的 Web 服務作為工作者?
工作者使用標準的 HTTP GET 請求從 Amazon SWF 取得任務並傳回結果。要使用現有的 Web 服務作為工作者,您可以編寫一個包裝函式以從 Amazon SWF 取得任務,適時叫用您 Web 服務的 API,並將結果傳回 Amazon SWF。在包裝函式中,將任務中提供的輸入資料轉譯成適用於您 Web 服務 API 的參數。同樣地,也要將來自 Web 服務 API 的輸出資料轉譯成任務的結果,並將結果傳回 Amazon SWF。

問:Amazon SWF 是否會限制我使用特定的程式設計語言?
否,您可以使用任何程式設計語言來編寫工作者或決策程式,只要您能使用 Web 服務 API 跟 Amazon SWF 溝通即可。目前提供適用於 Jave、.NET、PHP 和 Ruby 的 AWS 開發套件。適用於 Java 的 AWS 開發套件包括 AWS Flow Framework。

問:我希望確保每次啟用業務流程 (如交易、提交或指派) 時只會執行一次。要如何達成此目標?
當您開始執行新工作流程時,您需要為該工作流程執行提供一個 ID。這讓您能夠將執行和商業實體或動作 (例如,客戶 ID、檔案名稱、序號) 建立關聯。Amazon SWF 會確保在它執行時該執行的 ID 是唯一的。在此期間,嘗試啟動相同 ID 的另一個執行會失敗。這讓您可以輕鬆滿足要求針對指定業務動作不得執行多個執行的業務需求,例如交易、提交或指派。以在網站上註冊新使用者的工作流程為例。當使用者按一下提交按鈕時,可以使用該使用者的唯一電子郵件地址來命名執行。如果該執行已存在,呼叫啟動執行將失敗。當註冊正在進行中,即使多位使用者按下按鈕,也不需額外的程式碼來防止衝突。

當工作流程執行完成時 (不論成敗),您可以開始另一個有相同 ID 的工作流程執行。這將產生新一輪的工作流程執行,其具備相同的執行 ID,但有不同的運行 ID。運行 ID 由 Amazon SWF 產生,而具備相同工作流程執行 ID 的多個執行可以透過運行 ID 加以區分。透過讓您以這種方式重新使用工作流程執行 ID,Amazon SWF 可協助您處理重試等使用案例。例如,以上述使用者註冊為例,假設工作流程在為使用者建立資料庫記錄時執行失敗。您可以用相同的執行 ID (使用者的電子郵件地址) 再次啟動工作流程執行,而不用建立新的 ID 來重試註冊。

問:Amazon SWF 如何協助我擴展應用程式?
Amazon SWF 透過讓您完全控制為每種活動類型執行的工作者數目及為決策程式執行的執行個體數,來擴展您的應用程式。藉由增加工作者或決策程式執行個體數量,可讓您為相應的處理步驟增加所配置的計算資源,進而增加這些步驟的輸送量。若要自動擴展,您可以使用 Amazon SWF 透過其 API 提供的執行時間資料。例如,Amazon SWF 提供任務清單中的任務數量。由於此數量的增加暗示著工作者跟不上負載,所以當待處理的任務達到閾值時,您可以自動擴充新的工作者。

問:我進行了大量關鍵任務型應用程式執行。要如何監控和擴展它們?
除了管理主控台之外,Amazon SWF 提供一整組可見性 API。您可以使用它們來取得執行時間資訊,以監控所有執行並根據負載自動擴展您的執行。您可以取得每種工作流程類型的詳細資訊,例如特定時間範圍內開啟和關閉的執行數。您也可以使用可見性 API 來建構自訂的監控應用程式。

問:我有許多隨時運行的執行,但其中一小部分常故障或停止。我要如何偵測這些有問題的執行並解決問題?
Amazon SWF 讓您可以透過管理主控台和可見性 API 來搜尋執行。您可以按照各種條件來搜尋,包括執行開始或完成的時間間隔、目前狀態 (即開啟或關閉) 及標準的故障模式 (例如,逾時、終止)。要將工作流程執行組成群組,您可以在開始執行時,使用最多 5 個標籤來建立自訂文字與工作流程執行的關聯。在 AWS 管理主控台中,您可以使用標籤來搜尋工作流程執行。

要尋找可能已停止的執行,您可以從以時間為基礎的搜尋來開始,再搜尋到執行時間超過預期的執行。接著,您可以檢測它們以檢視任務層級詳細資訊,並確定特定任務的執行時間是否已過長或失敗,或者決策程式根本沒有啟動任務。如此可協助您準確查明在任務層級的問題。

問:我有一種可用於多個應用程式的活動類型。是否可在這些應用程式之中共用它?
是。如果應用程式和活動全部在相同的網域進行註冊,則多個應用程式可以共用指定的活動類型。為了實作此共用,您可以讓不同的決策程式為該活動類型啟動任務,並將它加入任務清單,以便工作者輪詢該活動。然後,該活動類型的工作者將從所有不同的應用程式取得活動任務。如果您要分辨某個活動任務是來自哪個應用程式,或者您要為不同的應用程式部署不同組的工作者,則可以使用多個任務清單。請參閱如何確保工作者或決策程式只會取得其了解的任務

問:是否可以使用 AWS Identity and Access Management (IAM) 來管理 Amazon SWF 的存取權限?
是。您可以授與 IAM 使用者存取 Amazon SWF 的許可。IAM 使用者只能存取您指定的 SWF 網域和 API。

問:是否可以在防火牆內執行我的工作者?
是。工作者使用標準 HTTP GET 請求從 Amazon SWF 取得任務並傳回計算的結果。由於工作者總是向 Amazon SWF 啟動請求,所以您不必設定防火牆來允許入站請求。

問:將我的商業邏輯公開作為工作者和決策程式,是否有安全風險?
工作者使用標準 HTTP GET 請求從 Amazon SWF 取得任務並傳回計算的結果。因此,您不需要公開工作者的任何終端節點。而且,Amazon SWF 只會在決策程式啟動那些任務時才向工作者提供任務。由於是您編寫決策程式,所以您能夠完全控制何時和如何啟動任務,這包括隨這些任務傳送到工作者的輸入資料。

問:Amazon SWF 如何協助能可靠地協調應用程式中的任務?
Amazon SWF 針對任務指派提供可靠的保證。它可確保任務絕對不會重複,且只會被指派一次。因此,即使一種特定活動類型可能有多個工作者 (或大量的決策程式執行個體),Amazon SWF 將只提供一個特定任務給一個工作者 (或一個決策程式執行個體)。此外,對於工作流程執行,Amazon SWF 每次最多保留一個待決的決策任務。因此,您可以執行多個決策程式執行個體,而不用擔心在同一執行上會有兩個執行個體同時運作。這些措施可讓您協調工作流程,而不必擔憂有重複、遺失或衝突的任務。

問:我可以在 Amazon SWF 中註冊多少個工作流程類型、活動類型和網域?
每個網域中最多可以註冊或淘汰 10,000 個工作流程和活動類型 (總計)。在您的 AWS 帳戶中最多可以有 100 個 Amazon SWF 網域 (包括已註冊和淘汰的網域)。如果您認為可能會超過以上限制,請使用此表聯繫 Amazon SWF 團隊,以便討論您的情況並請求提高限制。

問:我可以同步運行的工作流程執行數是否有限制?
在任何指定的時間,一個網域中最多可以有 100,000 個開啟的執行。而所運行的執行累計數或 Amazon SWF 保留的執行數,沒有其他限制。如果您認為可能會超過以上限制,請使用此表聯繫 Amazon SWF 團隊,以便討論您的情況並請求提高限制。

問:工作流程執行最長可以進行多久?
每個工作流程執行最長可以進行 1 年。每個工作流程執行歷史記錄最多可以增長到 25,000 個事件。如果您的使用案例需要超過以上限制,則可以使用 Amazon SWF 提供的功能繼續執行,並使用子工作流程執行來建構應用程式。

問:如果我的工作流程執行長時間閒置,會發生什麼情況?
如果工作流程執行閒置一段長時間,Amazon SWF 不會採取任何特別的動作。閒置的執行受您設定的逾時限制。例如,如果您已將執行的最大持續時間設置為 1 天,則閒置的執行超出 1 天時就會逾時。閒置的執行也受到 Amazon SWF 對於執行可以進行多久的時間 (1 年) 限制。

問:工作者處理一項任務需要多久?
Amazon SWF 不會對工作者處理一項任務所需的時間強加特定限制。它會強制套用您為活動任務最大持續時間指定的逾時值。請注意,由於 Amazon SWF 限制執行最長可進行 1 年,所以工作者處理一項任務的時間不能超過該限制。

問:在工作者要求取得任務之前,Amazon SWF 可以保留該任務多久?
Amazon SWF 不會對工作者輪詢前保留任務的時間強加特定限制。不過,當註冊活動類型時,您可以針對 Amazon SWF 保留該類活動任務的時間設定預設的逾時。您也可以在排程活動任務時,透過決策程式碼來指定此逾時或覆蓋預設的逾時。由於 Amazon SWF 限制一項工作流程執行最長可進行 1 年,所以如果未指定逾時,任務的保留時間將不會超過 1 年。

問:是否可以透過發佈一個決策來排程數個活動任務?
是,您最多可以在一個決策中排程 100 個活動任務,還可以接連發佈數個決策。

問:在一個工作流程執行及多個執行中,我可以擁有多少個工作者任務、信號和標記?
對於在工作流程執行期間使用的活動任務、信號及計時器數,沒有限制。不過,目前每個工作流程執行最多只能有 1,000 個開啟的活動任務。這包含已經啟動的活動任務以及工作者正在處理的活動任務。同樣地,每個工作流程執行最多可包含 1,000 個開啟的計時器,以及最多 1,000 個開啟的子執行。

問:我可以在工作流程執行中傳輸多少資料?
在工作流程執行期間傳輸的資料總量沒有限制。不過,Amazon SWF API 會對執行之中用來傳送資料的參數強制套用特定的最大限制。例如,傳入活動任務的輸入資料和隨信號傳送的輸入資料,每個項目最多可以包含 32,000 個字元。

問:Amazon SWF 是否會保留已完成的執行?如果是,會保留多久?

Amazon SWF 會以您指定的任意天數來保留已完成執行的歷史記錄,最長可保留 90 天 (即大約 3 個月)。在保留期間,您可以用程式設計方式或透過主控台來存取歷史記錄和搜尋執行。

問:何時會限制 API 呼叫?
除了不常見的峰值之外,如果您在很短的時間內呼叫非常大量的 API,就可能會受到限制。如果您發現自己經常受到限制或是您的應用程式經常遭遇峰值,請使用此表聯繫 Amazon SWF 團隊,討論您的使用案例並請求為您的帳戶設置不同的限制設定。

問:Amazon SWF 可以在哪些區域使用?
以下區域提供 Amazon SWF (SWF):美國東部 (維吉尼亞北部)、美國西部 (奧勒岡)、美國西部 (加利佛尼亞北部)、歐洲 (愛爾蘭)、歐洲 (法蘭克福)、亞太區域 (新加坡)、亞太區域 (東京)、亞太區域 (雪梨)、南美洲 (聖保羅) 和 AWS GovCloud (US)。

問:Amazon SWF 是否可以跨可用區域使用?
是,Amazon SWF 可以跨 3 個可用區域來管理工作流程執行歷史記錄及工作流程的其他詳細資訊,所以即使在某一可用區域出現故障,您的應用程式仍可以繼續仰賴 Amazon SWF。

問:什麼是 Amazon SWF 服務存取點?
請瀏覽 AWS 一般參考文件以了解更多關於存取終端節點的資訊。

問:價格含稅嗎?

除非另有說明,否則我們的價格不包括適用的稅金和稅收 (包括加值稅和適用的營業稅)。帳單地址在日本的客戶若使用 AWS 服務,則需負擔日本消費稅。進一步了解