首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Uber Cadence 学习

Uber Cadence 学习

作者头像
poslua
发布2021-07-14 13:30:42
2.5K0
发布2021-07-14 13:30:42
举报
文章被收录于专栏:posluaposlua

Cadence

"Cadence is a distributed, scalable, durable, and highly available orchestration engine to execute asynchronous long-running business logic in a scalable and resilient way. "

"Fault-Oblivious Stateful Code Platform."

简单来讲就是一个工作流引擎,是个好东西。可惜文档晦涩难懂,不使用业内通用模式和架构,自己创造一套,这大概也是 Uber 的一个特色吧?

相反 Netflix Conductor 的 JSON DSL 简直就是噩梦。

演进历史:

AWS Simple Workflow -> Uber Cadence -> Temporal                    -> AWS Step Function

? Architecture

•Frontend service 相当于网关,使用自己实现的TChannel[1]协议和其他角色通信•History service 负责 workflow 状态变迁•Matching service 托管 taliskst 进行 task scheduling, dispatching•Worker service•Decision Worker 又叫 Workflow Worker,本质上就是 workflow func,完全靠 decision task 驱动,decision 由 cadence 生成•Activity Worker 靠 activity task 驱动,activity task 由 decision worker 生成

执行流程:

1.用户发起 workflow2.cadence history 状态发生变化,生成第一个 decision task3.decision worker 轮询到 decision task 开始执行 workflow func4.workflow func 执行导致 history 发生变更,生成 activity task,此时该 workflow block 等待接下来的 decision5.activity worker 轮询到 activity task 开始执行 activity func6.activity func 执行完毕返回给 cadence,生成第二个 decision task7....

? Workflow

什么是工作流?

我们都知道,任何微小的工作,都可以拆分成多个步骤,这些步骤顺序相连,依次进行,最终输出成果,有些步骤可能存在多个分支,并且最终输出多个成果。这些步骤依次执行,并且向后传递阶段性信息的流,就是工作流

工作流是个很宽泛的概念,审批系统算,容器编排、CI 的 pipeline 也都可以算。不同的工作流系统设计上有它的侧重点,所以可复杂可简单。但本质上(不是很精确的解释哈),都是在解决「流程的定义」和「流程的执行」这两件事。

1.流程定义就是说设计一种数据结构,来表达业务流程,通常来说最后会落地成一张有向图(图结构)。实际系统中,由于流程可能会非常复杂,或者说需要可视化的与业务方人员沟通,这时就涉及到了流程的建模。2.流程执行就是核心功能了,简单的说就是读进流程定义,创建流程的实例(用来持久化流程相关的用户数据和状态),根据流程和实例的状态来执行流程。

常见的工作流引擎的自动化理论主要有:

•有限状态机(FSM)•简单、最常见•可以有环•描述的是单个对象的状态,也就是说(一个工作流实例内)仅能够追踪一个任务•有向无环图(DAG)•AirFlow[2] 、Conductor[3] 采用的工作流理论•不能有环•工作流实例在一个时刻能够处于多个状态,可以追踪多个任务•PetriNet•主要用于面向 BPM 的工作流引擎•可以有环•工作流实例在一个时刻能够处于多个状态,可以追踪多个任务

可见 PetriNet 同时拥有 FSM 和 DAG 的特点,能够很好的支持最复杂的工作流的应用场景。Amazon workflow engine 就是基于此设计。Cadence 作者认为这个模型过于复杂,自创了一套:State machines are wonderful tools[4]。

关于「流程的定义」业内通用的模式是通过 DSL 来描述,之后再写代码实现 worker 来完成 「流程的执行」;而 Cadence 不一样,它是通过代码来描述「流程的定义」,同样通过 worker 来执行流程。Cadence 作者有他自己的看法[5],总结起来就是大佬认为 DSL 的表现能力有限,不如代码来的直接。况且即使定义了 DSL,最后还是要自己实现 worker,何必多此一举。

⏳ State

Cadence Workflow 内部状态获取有两种方式:

•History Protocol eventId 核心概念•Query Handler 业务自己埋点

异步状态也有两种方式:

•Signal•Asynchronous Activity

?‍? Demo Time

按照官方的 samples[6] 来一遍,基本就会玩了。当然还有更复杂的用例:uber eats[7]

参考资料

•Cadence — The only workflow orchestrator you will ever need[8]•Using Cadence workflows to spin up Kubernetes[9]•Building your first Cadence Workflow[10]•What exactly is a Cadence decision task?[11]

引用链接

[1] TChannel: https://github.com/uber/tchannel-go [2] AirFlow: https://airflow.apache.org [3] Conductor: https://netflix.github.io/conductor [4] State machines are wonderful tools: https://news.ycombinator.com/item?id=25614487 [5] 看法: https://news.ycombinator.com/item?id=19734067 [6] samples: https://github.com/uber-common/cadence-samples [7] uber eats: https://github.com/ms2008/cadence-codelab [8] Cadence — The only workflow orchestrator you will ever need: https://blog.usejournal.com/cadence-the-only-workflow-orchestrator-you-will-ever-need-ea8f74ed5563 [9] Using Cadence workflows to spin up Kubernetes: https://banzaicloud.com/blog/introduction-to-cadence [10] Building your first Cadence Workflow: https://medium.com/stashaway-engineering/building-your-first-cadence-workflow-e61a0b29785 [11] What exactly is a Cadence decision task?: https://stackoverflow.com/questions/62904129/what-exactly-is-a-cadence-decision-task

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 poslua 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cadence
    • ? Architecture
      • ? Workflow
        • ⏳ State
          • ?‍? Demo Time
            • 参考资料
              • 引用链接
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档