阿里云國(guó)際站經(jīng)銷(xiāo)商,主營(yíng)阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費(fèi)開(kāi)戶,代充值優(yōu)惠大,聯(lián)系客服飛機(jī)@jkkddd
使用MNS服務(wù)集成及回調(diào)編排任意任務(wù)類(lèi)型
Serverless工作流的服務(wù)集成功能可以簡(jiǎn)化用戶與云服務(wù)的交互。本文示例中,我們使用MNS隊(duì)列集成的功能,結(jié)合回調(diào)(callback)完成更多非函數(shù)計(jì)算的計(jì)算任務(wù)的編排。
簡(jiǎn)介
Serverless工作流的使用場(chǎng)景不僅限于編排函數(shù)計(jì)算FC(Function Compute)的FaaS函數(shù),也包括廣義上任意的計(jì)算任務(wù)。在上一篇最佳實(shí)踐文檔異步任務(wù)回調(diào)中介紹了利用函數(shù)計(jì)算的函數(shù)向MNS隊(duì)列中發(fā)送消息,自定義環(huán)境中的任務(wù)執(zhí)行者 (worker) 接收到消息,結(jié)合回調(diào)(callback)通知Serverless工作流任務(wù)執(zhí)行結(jié)果。在下文中,將介紹如何使用Serverless工作流的新功能MNS隊(duì)列。MNS隊(duì)列進(jìn)一步簡(jiǎn)化編排自定義任務(wù)類(lèi)型。Serverless工作流可以直接向MNS的隊(duì)列發(fā)送消息,省去了發(fā)送消息的函數(shù)計(jì)算的函數(shù)的開(kāi)發(fā)、測(cè)試和維護(hù),提高了可用性,降低了延遲。使用MNS集成相比通過(guò)函數(shù)計(jì)算的函數(shù)發(fā)送消息到MNS的做法有以下好處:
無(wú)需為發(fā)送消息做函數(shù)計(jì)算的函數(shù)的開(kāi)發(fā),降低了開(kāi)發(fā)、測(cè)試和維護(hù)成本。
降低了消息傳遞的延時(shí)、少了一次遠(yuǎn)程訪問(wèn)、避免了函數(shù)計(jì)算的冷啟動(dòng)。
去除了一個(gè)服務(wù)依賴、提高了容錯(cuò)性。
Serverless工作流未來(lái)會(huì)推出更多的云服務(wù)集成,讓不同類(lèi)型任務(wù)組成的工作流編排變得更加容易。
服務(wù)集成功能
下圖中3個(gè)串行的任務(wù)由Serverless工作流負(fù)責(zé)依次發(fā)送至用戶指定的MNS隊(duì)列中。消息發(fā)送成功之后Serverless工作流將會(huì)在該步驟暫定等待回調(diào)。用戶在自定義環(huán)境中的worker(例如ECS VM、容器、自建機(jī)房?jī)?nèi)的機(jī)器)調(diào)用MNS ReceiveMessage接口拉取消息。收到消息后,worker根據(jù)消息內(nèi)容執(zhí)行相應(yīng)的任務(wù)。任務(wù)結(jié)束后,調(diào)用Serverless工作流ReportTaskSucceeded/Failed接口,Serverless工作流收到任務(wù)結(jié)果后繼續(xù)該步驟執(zhí)行。worker在匯報(bào)任務(wù)結(jié)果成功后刪除MNS隊(duì)列消息。
步驟詳解
下文將詳細(xì)介紹使用該功能的步驟。
準(zhǔn)備工作
填寫(xiě)流程(Flow)
編寫(xiě)worker
執(zhí)行并查看結(jié)果
步驟一:準(zhǔn)備工作
通過(guò)MNS控制臺(tái)創(chuàng)建MNS隊(duì)列,詳細(xì)步驟請(qǐng)參見(jiàn)創(chuàng)建隊(duì)列。
Serverless工作流需要扮演用戶在Flow中指定的執(zhí)行角色 (RAM role)向用戶賬號(hào)下的MNS隊(duì)列發(fā)送消息,因此需要為該RAM role添加MNS SendMessage相關(guān)的權(quán)限策略 (policy),細(xì)粒度的策略示例如下。如沒(méi)有細(xì)粒度權(quán)限控制的需求,可以通過(guò)Serverless工作流控制臺(tái)向Flow RAM role添加系統(tǒng)策略AliyunMNSFullAccess。
步驟二:編寫(xiě)流程 (Flow)
下面的FDL是一個(gè)可以向fnf-demo這個(gè)MNS隊(duì)列發(fā)送消息并且等待回調(diào)的任務(wù)(Task)步驟。
步驟三:編寫(xiě)worker
下面的Python 2.7代碼模擬一個(gè)執(zhí)行任務(wù)的worker,它可以運(yùn)行在任何可以訪問(wèn)到Serverless工作流和MNS服務(wù)的環(huán)境中。該worker長(zhǎng)輪詢調(diào)用MNS ReceiveMessage,當(dāng)一個(gè)帶有MNS配置的任務(wù)步驟進(jìn)入時(shí),Serverless工作流會(huì)向fnf-demo這個(gè)隊(duì)列中發(fā)送一個(gè)消息。該worker執(zhí)行相應(yīng)任務(wù)結(jié)束后回調(diào)(callback)Serverless工作流ReportTaskSucceeded/Failed接口,在任務(wù)結(jié)果匯報(bào)完成后Serverless工作流會(huì)繼續(xù)當(dāng)前任務(wù)步驟執(zhí)行,worker可以刪除消息。
在虛擬環(huán)境中,安裝fnf、mns、Python SDK
心靈雞湯:
標(biāo)題:阿里云免實(shí)名注冊(cè),阿里云服務(wù)器購(gòu)買(mǎi),免費(fèi)注冊(cè)
地址:http://www.busanamuslimtrendy.com/kfxw/64270.html