輪詢活動任務時避免延遲 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

輪詢活動任務時避免延遲

GetActivityTask API 旨在提供taskToken一次。如果 taskToken 在與活動工作者通訊時遺失,可以封鎖數個 GetActivityTask 請求 60 秒來等待回應,直到 GetActivityTask 逾時為止。

如果您只有少量輪詢在等待回應,則所有請求可能都會排在封鎖的請求後面並且停止。但是,如果您對每個活動 Amazon 資源名稱(ARN)都有大量未完成的民意調查,並且某些比例的請求卡在等待中,則還有更多可以獲得taskToken並開始處理工作。

對於生產系統,我們建議每個活動 ARN 隨時至少都有 100 個開啟的輪詢。如果有一個輪詢遭到封鎖,而且有一部分的輪詢排在其後面,則有更多請求仍會收到 GetActivityTask 以在 taskToken 請求遭到封鎖時處理工作。

若要在輪詢任務時避免這幾種延遲問題:

  • 在您的活動工作者實作中,以個別的執行緒實作您的輪詢器。

  • 每個活動 ARN 隨時至少都有 100 個開啟的輪詢。

    注意

    每個 ARN 擴展至 100 個開放輪詢可能所費不貲。例如,每個 ARN 進行 100 個 Lambda 函數輪詢的成本比具有 100 個輪詢執行緒的單一 Lambda 函數高 100 倍。若要降低延遲將成本降至最低,請使用具有非同步 I/O 的語言,然後針對每個工作人員實作多個輪詢執行緒。如需輪詢器執行緒與工作執行緒不同的範例活動工作者,請參閱 Ruby 中的範例活動工作者

如需活動和活動工作者的詳細資訊,請參閱 活動