Cadence:馴服複雜流程的工作流引擎
Cadence是一個開源的無故障狀態程式碼平臺和工作流引擎,專為解決與第三方 API、內部服務和長期執行的業務流程進行復雜互動的挑戰。Cadence 為使用需要容錯的基於微服務的架構以及包含無數多步驟併發工作流或與多個第三方 API 互動的應用程式的開發團隊提供了很多價值。
Cadence 將應用程式的整個狀態儲存在與任何特定程式無關的持久虛擬記憶體中。儲存的應用程式狀態包括使用者定義活動的所有呼叫引數和返回結果。然後,它使用該資訊來趕上並重播被中斷的工作流。
Cadence 擁有使開發人員能夠使用 Java、Go、Python 和 Ruby 等流行語言建立和協調工作流的庫。Cadence 服務(例如工作人員)在很大程度上是無狀態的,並利用資料儲存來實現任務/工作流的永續性。支援的儲存選項包括開源 Cassandra 和 MySQL/PostgreSQL,並且介面卡可用於任何具有多行單分片事務的資料庫。還提供多種服務部署模型。例如,Uber 使用由數百個應用程式共享的多租戶 Cadence 叢集。
Cadence 的優勢體現在以下用例中:
- 定期執行(分散式 cron)。Cadence 保證定期排程的業務邏輯的執行,完成複雜的錯誤處理、重試策略和非同步歷史事件複製。重要的是,Cadence 支援大規模並行執行作業,能夠同時執行數百萬個工作流。
- 微服務編排。實現為多個微服務呼叫的業務流程必須使所有這些呼叫成功,即使下游服務失敗。Cadence 保證工作流程式碼的完成,支援無限重試並使補償邏輯易於開發,例如 SAGA 模式。
- 輪詢。定期檢查狀態更改的輪詢作業(通常用於監視或檔案處理)與 Cadence 對長時間執行的活動和無限重試的支援特別匹配。
- 事件驅動的應用程式。Cadence 直接支援非同步事件,併為開發人員抽象出狀態持久化的複雜性,使實現偵聽多個事件源的應用程式變得簡單。
- 儲存掃描。Cadence 支援對大型分割槽資料集(甚至是數十億個檔案)進行可擴充套件、彈性和完整的掃描。
- 批次作業。對於外部 API 呼叫可能失敗的批處理作業,Cadence 保證永續性。
- 基礎設施供應。長時間執行的配置操作可能會出現間歇性故障;Cadence 可以防止這種情況發生。該平臺還支援將活動執行路由到特定程式或主機,以及可擴充套件的容錯鎖定行為以一次在資源上執行單個突變。
- CI/CD 管道和應用程式部署。透過使開發人員能夠專注於業務邏輯,Cadence 為構建部署解決方案提供了一個理想的平臺。
- 運營管理。Cadence 支援自動管理和恢復,以建立自運算元據庫等。
- 互動式應用程式。Cadence 的效能和可擴充套件性支援 UI 會話狀態跟蹤和同步後臺操作執行。
- DSL 工作流程。Cadence SDK 允許開發人員編寫解釋 DSL 流程定義的容錯、可擴充套件、持久的應用程式。
- 大資料和機器學習。Cadence 為大資料和機器學習解決方案提供強大的控制平面,提供任務執行路由來控制 ML 模型和其他檔案的分配方式。
要開始使用 Cadence,請獲取Cadence 伺服器或Docker 映像的[url=https://github.com/uber/cadence]GitHub 儲存庫[/url]。
在此處獲取最新的 Cadence Java 客戶端。將其作為依賴項包含在您的 Java 專案中:
透過向連線到 Cadence 服務的工作人員註冊,將此工作流連結到 Cadence 框架(工作人員預設連線到本地執行的服務)。
public static void main(String[] args) { WorkflowClient workflowClient = WorkflowClient.newInstance( new WorkflowServiceTChannel(ClientOptions.defaultInstance()), WorkflowClientOptions.newBuilder().setDomain(DOMAIN).build()); // Get worker to poll the task list. WorkerFactory factory = WorkerFactory.newInstance(workflowClient); Worker worker = factory.newWorker(TASK_LIST); worker.registerWorkflowImplementationTypes(HelloWorldImpl.class); factory.start(); } |
現在,透過執行工作程式使用 CLI 執行 Hello World 工作流。
> docker run --network=host --rm ubercadence/cli:master --do test-domain workflow start --tasklist HelloWorldTaskList --workflow_type HelloWorld::sayHello --execution_timeout 3600 --input \"World\" Started Workflow Id: bcacfabd-9f9a-46ac-9b25-83bcea5d7fd7, run Id: e7c40431-8e23-485b-9649-e8f161219efe |
相關文章
- uber/cadence:Cadence是一種分散式,可擴充套件,持久且高度可用的流程編排引擎分散式套件
- 展示BPMN複雜流程的案例
- 瀏覽器核心渲染引擎工作流程瀏覽器
- incident如何使用Golang構建工作流程引擎?IDEGolang
- 主流工作流引擎 flowable 三種方式部署流程
- 馳騁工作流引擎-父子流程設計說明
- KaliLinux常用服務配置教程DHCP服務工作流程Linux
- 複雜任務中,流程的解耦設計解耦
- .Net Core Razor引擎 Form複雜模型繫結ORM模型
- LeaRun.Java工作流引擎 快速開發業務流程Java
- JNPF.WF的概念: 工作流自動化並不複雜
- 專案實踐之工作流引擎基本文件!Activiti工作流框架中流程引擎API和服務詳解框架API
- 馳騁CCFlow開源工作流程引擎如何設定PDF列印
- Window的工作流程梳理
- http,https的工作流程HTTP
- 複雜多變場景下的Groovy指令碼引擎實戰指令碼
- TinyML-TVM是如何馴服Tiny的(下)
- TinyML-TVM是如何馴服Tiny的(上)
- Learun工作流引擎,OA、ERP等業務流程快速配置工具
- Gitflow 工作流程Git
- Spark工作流程Spark
- Git工作流程Git
- HTTPS工作流程HTTP
- springMVC工作流程SpringMVC
- Cocos Creator 的工作流程 2.4
- openStack核心元件的工作流程元件
- Java Activiti 工作流引擎 springmvc SSM 流程審批 後臺框架原始碼JavaSpringMVCSSM框架原始碼
- DDD之理解複雜度、尊重複雜度、掌控複雜度複雜度
- 複雜度分析的套路及常見的複雜度複雜度
- activiti工作流引擎元件元件
- 試試這個工作流引擎吧,流程設計器也是簡潔美觀的
- 馴服定時器和執行緒定時器執行緒
- 測試工作流程
- mydumper工作流程圖流程圖
- springMVC DispatcherServlet 工作流程SpringMVCServlet
- 工作流引擎的工作原理與功能
- OA軟體的核心:工作流引擎
- 理解zip函式的工作流程函式