Dapr雲原生應用開發系列7:工作流整合

朱永光發表於2022-02-23

題記:這篇介紹一個很有意思的東西,Dapr和Logic Apps這樣的工作流引擎整合。

 

Dapr工作流

 

在1年多前,Dapr的孵化團隊搞了一個很有意思的東西:把Dapr和Logic Apps整合起來,實現Dapr內建的工作流引擎。

 

官方文件:

https://docs.dapr.io/developing-applications/integrations/azure/workflows/

官方部落格:

https://cloudblogs.microsoft.com/opensource/2020/05/26/announcing-cloud-native-workflows-dapr-logic-apps/

 

Logic Apps是Azure上的一個PaaS/SaaS服務,可以認為是一個雲端的BPM。官方文件的介紹如下:

Azure 邏輯應用是一個基於雲的平臺,用於建立和執行整合應用、資料、服務和系統的自動化工作流。藉助此平臺,可以快速為企業和企業到企業 (B2B) 方案開發高度可縮放的整合解決方案。作為 Azure Integration Services 的成員,Azure 邏輯應用簡化了跨雲、本地和混合環境連線舊式、新式和一流系統的方式。

由於Logic Apps(透過NuGet)提供了獨立的執行時和SDK,所以Dapr可以把其整合進來,獲得如下好處:

  • 在任意環境執行Logic Apps工作流:本地機器、私有資料中心、Kubernetes叢集或者公有云。

  • 透過Dapr獲得內建的跟蹤、度量和mTLS能力

  • 為你的工作流提供gRPC和HTTP端點

  • 利用Dapr的繫結或釋出訂閱事件來觸發工作流執行

  • 透過呼叫Dapr的狀態儲存、釋出訊息等功能來編排複雜的工作流場景

 

當然微軟目前主要是透過跨雲產品Azure Arc來把Azure上的很多應用服務引入到其他環境,見:

https://azure.microsoft.com/en-us/blog/build-cloudnative-applications-that-run-anywhere/

 

實現原理

 

整合的基本原理其實很簡單,把Logic Apps執行時包裝到一個實現Dapr規範介面的gRPC Server,並以Dapr應用的方式來執行:

 

 

 

然後把Logic Apps的工作流定義json檔案載入進去,透過Dapr的服務呼叫、繫結或者釋出訂閱來“觸發”這些工作流。透過程式碼可知,“觸發”最終還是透過http trigger的方式來啟動工作流例項。

 

正因為這種巧妙的架構,加上Dapr強大的能力,我才可以很簡單的就為其實現了釋出訂閱觸發工作流的能力(一開始的版本僅支援服務呼叫和繫結觸發)。

支援釋出訂閱的版本的程式碼見:

https://github.com/heavenwing/dapr-workflows/tree/SupportPubSub

 

你可以Clone程式碼到本地,然後根據README的說明來嘗試。也可以把這個工作流引擎整合到你的Dapr應用程式當中,實現靈活的業務流程處理。

 

更多思考

 

理論上,我們可以使用這樣的架構,把任何工作流引擎整合到Dapr當中,只要這個引擎的執行時可以被一個外殼應用程式包裝。

 

另外,大家可能會問,那麼我如何得到工作流訂閱json檔案呢?如果你對Logic Apps的工作流規範很熟悉,儘可以純手寫json;但其實最簡單的方式是到Azure Portal裡面新建一個Logic Apps,直接利用它的設計器來獲得工作流定義json檔案,我的程式碼中的workflow3.json就是這樣得到的。

Logic Apps工作流語言參考文件在:

https://docs.microsoft.com/zh-cn/azure/logic-apps/logic-apps-workflow-definition-language

相關文章