本篇文章1599字,讀完約4分鐘

阿里云國際站經銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優惠大,聯系客服飛機@jkkddd

使用MNS服務集成及回調編排任意任務類型

Serverless工作流的服務集成功能可以簡化用戶與云服務的交互。本文示例中,我們使用MNS隊列集成的功能,結合回調(callback)完成更多非函數計算的計算任務的編排。
簡介
Serverless工作流的使用場景不僅限于編排函數計算FC(Function Compute)的FaaS函數,也包括廣義上任意的計算任務。在上一篇最佳實踐文檔異步任務回調中介紹了利用函數計算的函數向MNS隊列中發送消息,自定義環境中的任務執行者 (worker) 接收到消息,結合回調(callback)通知Serverless工作流任務執行結果。在下文中,將介紹如何使用Serverless工作流的新功能MNS隊列。MNS隊列進一步簡化編排自定義任務類型。Serverless工作流可以直接向MNS的隊列發送消息,省去了發送消息的函數計算的函數的開發、測試和維護,提高了可用性,降低了延遲。使用MNS集成相比通過函數計算的函數發送消息到MNS的做法有以下好處:
無需為發送消息做函數計算的函數的開發,降低了開發、測試和維護成本。
降低了消息傳遞的延時、少了一次遠程訪問、避免了函數計算的冷啟動。
去除了一個服務依賴、提高了容錯性。
Serverless工作流未來會推出更多的云服務集成,讓不同類型任務組成的工作流編排變得更加容易。
服務集成功能
下圖中3個串行的任務由Serverless工作流負責依次發送至用戶指定的MNS隊列中。消息發送成功之后Serverless工作流將會在該步驟暫定等待回調。用戶在自定義環境中的worker(例如ECS VM、容器、自建機房內的機器)調用MNS ReceiveMessage接口拉取消息。收到消息后,worker根據消息內容執行相應的任務。任務結束后,調用Serverless工作流ReportTaskSucceeded/Failed接口,Serverless工作流收到任務結果后繼續該步驟執行。worker在匯報任務結果成功后刪除MNS隊列消息。
步驟詳解
下文將詳細介紹使用該功能的步驟。
準備工作
填寫流程(Flow)
編寫worker
執行并查看結果
步驟一:準備工作
通過MNS控制臺創建MNS隊列,詳細步驟請參見創建隊列。
Serverless工作流需要扮演用戶在Flow中指定的執行角色 (RAM role)向用戶賬號下的MNS隊列發送消息,因此需要為該RAM role添加MNS SendMessage相關的權限策略 (policy),細粒度的策略示例如下。如沒有細粒度權限控制的需求,可以通過Serverless工作流控制臺向Flow RAM role添加系統策略AliyunMNSFullAccess。
步驟二:編寫流程 (Flow)
下面的FDL是一個可以向fnf-demo這個MNS隊列發送消息并且等待回調的任務(Task)步驟。
步驟三:編寫worker
下面的Python 2.7代碼模擬一個執行任務的worker,它可以運行在任何可以訪問到Serverless工作流和MNS服務的環境中。該worker長輪詢調用MNS ReceiveMessage,當一個帶有MNS配置的任務步驟進入時,Serverless工作流會向fnf-demo這個隊列中發送一個消息。該worker執行相應任務結束后回調(callback)Serverless工作流ReportTaskSucceeded/Failed接口,在任務結果匯報完成后Serverless工作流會繼續當前任務步驟執行,worker可以刪除消息。
在虛擬環境中,安裝fnf、mns、Python SDK