Uber Cadence 生产设置

Uber Cadence production setup

我在寻找微服务编排器,偶然发现了 Uber Cadence。我已经阅读了文档并在开发设置中使用了它。

我有几个关于生产场景的问题:

  1. 是否建议为工作流及其使用的不同活动设置专门的任务列表?或者,我们应该为所有人使用一个任务列表吗?此决定会影响可伸缩性或性能吗?

  2. 当我们添加一台新的 worker 机器时,通常的做法是 运行 所有 worker 用于同一台机器中的不同 activities/workflows?示例:

    Worker.Factory factory = new Worker.Factory("samples-domain");
    
    Worker helloWorkflowWorker = factory.newWorker("HelloWorkflowTaskList");
    helloWorkflowWorker.registerWorkflowImplementationTypes(HelloWorkflowImpl.class);
    
    Worker helloActivityWorker = factory.newWorker("HelloActivityTaskList");
    helloActivityWorker.registerActivitiesImplementations(new HelloActivityImpl());
    
    Worker upperCaseActivityWorker = factory.newWorker("UpperCaseActivityTaskList");
    upperCaseActivityWorker.registerActivitiesImplementations(new UpperCaseActivityImpl());
    
    factory.start();
    

    或者我们应该 运行 每个 activity/workflow 工人在专用机器上?

  3. 在单个 worker 机器中,我们可以为给定的 activity 创建多少个 worker?例如,如果我们有 activity HelloActivityImpl,我们是否应该在同一个 worker 机器上为它创建多个 worker?

  4. 我没有找到任何生产设置文档。例如,如何在生产中安装和配置 Cadence 服务?如果有人可以为此将我引导至右侧 material,那就太好了。

  5. 在一些视频教程中提到,为了高可用性,我们可以跨多个数据中心设置 Cadence 服务。如何为此配置 Cadence 服务?

  1. 除非您需要对一组活动进行单独的流量控制和速率限制,否则没有理由为每个工作进程使用多个任务队列。

  2. 正如我在 1 中提到的,我会将您的代码重写为:

     Worker.Factory factory = new Worker.Factory("samples-domain");
     Worker worker = factory.newWorker("HelloWorkflow");
     worker.registerWorkflowImplementationTypes(HelloWorkflowImpl.class);
     worker.registerActivitiesImplementations(new HelloActivityImpl(), new UpperCaseActivityImpl());
     factory.start();
    
  3. 没有理由为同一个activity创建多个工人。

  4. 不确定 Cadence。 Here is 显示如何部署到 Kubernetes 的 Temporal 文档。

  5. 此文档尚不可用。我们 Temporal 正在努力。

你也可以使用 Cadence helmchart https://hub.helm.sh/charts/banzaicloud-stable/cadence

我正在积极与 Cadence 团队合作,为社区提供操作文档。对于像我这样不想在 K8s 上 运行 的人来说,这将很有用。我会在我们取得进展后回来。

当前草稿版本:https://docs.google.com/document/d/1tQyLv2gEMDOjzFibKeuVYAA4fucjUFlxpojkOMAIwnA

即将发布到 cadence-docs。