0

我正在寻找一个微服务编排器并遇到了 Uber Cadence。我已经阅读了文档并在开发设置中使用了它。

我对生产场景有几个问题:

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

  2. 当我们添加一个新的工作机器时,在同一台机器上为不同的活动/工作流运行所有工作人员是一种常见的做法吗?例子:

    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();
    

    或者我们应该在专用机器上运行每个活动/工作流工作者?

  3. 在单个工作机器中,我们可以为给定的活动创建多少工作人员?例如,如果我们有活动 HelloActivityImpl,我们是否应该在同一台工作机器上为它创建多个工作人员?

  4. 我还没有找到任何用于生产设置的文档。例如,如何在生产环境中安装和配置 Cadence 服务?如果有人能指导我找到正确的材料,那就太好了。

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

4

2 回答 2

2
  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. 没有理由为同一活动创建多个工人。

  4. 不确定Cadence。这是展示如何部署到 Kubernetes 的 Temporal 文档。

  5. 该文档尚不可用。我们Temporal正在努力解决这个问题。

于 2020-09-16T17:43:41.363 回答
1

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

我正在积极与 Cadence 团队合作,为社区提供操作文档。它对那些不想在 K8s 上运行的人很有用,比如我自己。随着我们取得进展,我稍后会回来。

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

将很快发布到 cadence-docs。

于 2020-09-19T02:10:09.810 回答