阿里云國際站經(jīng)銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優(yōu)惠大,聯(lián)系客服飛機@jkkddd
簡介
復雜的業(yè)務場景例如電商網(wǎng)站、酒店、航班預定這類涉及訂單管理的應用通常要訪問多個遠程服務,并且對操作事務性語義(即所有步驟全部成功或全部失敗,不存在中間狀態(tài))有較高要求。在流量較小、數(shù)據(jù)存儲集中的應用中,事務性可以通過關系型數(shù)據(jù)庫提供的ACID特性滿足。然而在大流量場景下,為了高可用和可擴展性,業(yè)務通常選擇向微服務的分布式架構方向演進。在這樣的架構中提供多步驟事務性的保證通常需要引入隊列和數(shù)據(jù)庫來持久化消息以及展現(xiàn)流程狀態(tài),這類系統(tǒng)的開發(fā)和運維會給業(yè)務方帶來額外的成本和負擔。而使用Serverless工作流提供長流程分布式事務保證會幫您解決這些問題。
場景描述
假設某應用為其用戶提供預定火車票、航班和酒店的功能,要求三個步驟保證事務性。該功能需要三個遠程調用實現(xiàn)(例如預定火車票需要調用12306接口),如果三個調用都成功則該訂單成功。然而實際上任何一個遠程調用都有可能會失敗,因此該應用需要對不同的失敗場景做出相應的補償邏輯,回退已完成操作。如下圖所示:
如果預定火車票(BuyTrainTicket)成功,而預定航班(ReserveFlight)失敗,則需要取消已經(jīng)購買的火車票(CancelTrainTicket),并告知您訂單失敗。
如果預定火車票(BuyTrainTicket)和預定航班(ReserveFlight)均成功,但是預訂酒店(ReserveHotel)失敗,則需要取消已經(jīng)預定的航班(CancelFlight)和火車票(CancelTrainTicket),并告知您訂單失敗。
Serverless工作流實現(xiàn)
下文的示例將FC函數(shù)編排成一個Serverless工作流流程從而實現(xiàn)了一個可靠的多步驟長流程,該示例分為3步:
創(chuàng)建FC函數(shù)
創(chuàng)建流程
執(zhí)行并查看結果
步驟1:創(chuàng)建FC函數(shù)
本步驟是模擬場景案例中提示的三個操作即預訂火車票、預訂航班及預定酒店。
創(chuàng)建下面的Python2.7的函數(shù),關于創(chuàng)建的詳細步驟,請參見FC文檔,建議命名:
Service: fnf-demo
Function: Operation
Operation函數(shù)模擬各操作(例如預定航班、預定酒店)的實現(xiàn),根據(jù)輸入決定該操作執(zhí)行結果(成功或失?。?。
步驟2:創(chuàng)建流程
使用Serverless工作流控制臺創(chuàng)建下面的流程。
配置流程RAM角色
步驟3:執(zhí)行并查看結果
在控制臺上對創(chuàng)建好的流程(Flow)開始一個新的執(zhí)行(Execution)。StartExecution API要求傳入JSON格式的輸入。下面的JSON對象可以模擬每個步驟的成功或失?。ɡ?reserve_hotel_result":"fail"代表模擬預定酒店這步失敗)。StartExecution是一個異步API,調用結束后,Serverless工作流會返回一個執(zhí)行名字用來查詢流程執(zhí)行狀態(tài)。
流程執(zhí)行開始后,在Serverless工作流控制臺可以查看流程的執(zhí)行過程和結果。從步驟信息頁簽您可以看到,由于"reserve_hotel_result":"fail"和ReserveHotel函數(shù)調用失敗,Serverless工作流按照流程定義,依次取消航班(CancelFlight)、取消火車票(CancelTrainTicket)。Serverless工作流每個步驟轉換有持久化的保證,因此網(wǎng)絡中斷或進程崩潰等失敗場景不會影響流程事務性的保證。
流程執(zhí)行會產(chǎn)生執(zhí)行歷史事件(event),這些事件可以通過控制臺、SDK或CLI調用GetExecutionHistory API查詢。
錯誤處理和重試
上面示例中的預定航班、預定酒店等遠程調用都有可能受到網(wǎng)絡或服務錯誤等原因導致調用失敗,而增加對瞬時錯誤的重試可以提高訂單流程成功率。Serverless工作流在任務(Task)類型的步驟(Step)自帶重試功能,如預定酒店這個步驟用下面的寫法可以實現(xiàn)對FC.Unknown類型的錯誤指數(shù)退避。假設重試到達最大次數(shù)后ReserveHotel都無法成功,按照該步驟中catch的定義,ReserveHotel函數(shù)拋出的FC.Unknown錯誤會被捕獲并將跳轉到CancelFlight執(zhí)行定義好的補償邏輯。

心靈雞湯:
標題:阿里云賬號注冊,阿里云服務器購買,24h自助充值
地址:http://ychudong.cn/kfxw/64300.html