1

我负责为我的公司构建一个复杂的系统,经过一些研究,我认为 Camunda 符合我的大部分要求。但是我的一些要求并不常见,在阅读了用户指南后,我意识到有很多方法可以做同样的事情,所以我希望这个问题能澄清我的想法,也可以作为其他寻找建筑的人的基本问题相似的东西。

首先,我计划在 Camunda BPM 之上构建一个特定的应用程序。它将使用工作流和 BPM,但不一定是 BPM/Camunda 提供的所有东西。这意味着我不打算使用大部分与 Camunda 捆绑在一起的网络应用程序(任务、建模器......),至少不适合最终用户。为了使事情变得更复杂,它必须支持多个租户......动态。

因此,我将尝试指定我的所有要求,然后希望比我更有经验的人能够解释哪个是完成这项工作的最佳架构/解决方案。

开始了:

  • 基于 Camunda BPM 构建的单一应用程序
  • 高性能
  • 工作量(几个月后每天 10k 新流程实例)。
  • 用户(从 1k 开始,预计约为 50k)。
  • 多个租户(从 10 个开始,预计约为 1k)
  • 租户动态管理(创建、部署流程定义)
  • 它将部署在集群上
  • PostgreSQL
  • WildFly 8.1 最好

经过一番研究,这是我的想法

  • 一流程应用
  • 每个租户一个流程引擎
  • 多租户数据隔离:模式或表级别。
  • 首先集群(2 个节点)以实现高可用性,并在租户数量和工作负载开始增加时添加更多节点。

怀疑

  • 我应该让 camunda 管理我的用户/组,还是在我的应用程序上更好地管理它?在这种情况下,我可以对 Camunda 说“用户 X 完成了任务 Y”,即使 camunda 不知道用户 X 的存在吗?
  • 那么动态多租户呢?是否可以即时创建租户并使这些租户即使在重新启动应用程序服务器后也会随着时间的推移而持续存在?重启后重新部署进程怎么办?
  • 在哪一点之后我应该考虑在节点上对引擎进行分区?很难弄清楚我将如何使用动态多租户来做到这一点,但此外......这是处理高工作量和不断增长的租户数量的正确方法吗?
  • 我只设置了一个流程应用程序,我应该在集群环境中处理其他事情吗?

我不排除在我的应用程序中只使用一个租户、一个流程引擎并在逻辑​​上处理与租户相关的所有内容,但我知道这可能非常(非常!)麻烦。

欢迎所有答案,希望我们能找到解决这个问题的好方法。

4

1 回答 1

2

1. 我应该让 camunda 管理我的用户/组,还是在我的应用程序上更好地管理它?在这种情况下,我可以对 Camunda 说“用户 X 完成了任务 Y”,即使 camunda 不知道用户 X 的存在吗?

是的,您可以选择您的应用程序来管理用户并告诉 Camunda 任务由 Camunda 不知道的用户完成。同样,您可以让 Camunda 将任务分配给它根本不知道的用户。这是通过实现他们的org.camunda.bpm.engine.impl.identity.ReadOnlyIdentityProvider接口并让配置知道您的实现来完成的。

PS:如果您不需要Camunda附带的所有应用程序,我什至建议您将Camunda引擎嵌入您的应用程序中。它可以很容易地完成,并且他们为他们的 java API 提供了很好的文档。而且很容易实现。

2. 动态多租户呢?是否可以即时创建租户并使这些租户即使在重新启动应用程序服务器后也会随着时间的推移而持续存在?重启后重新部署进程怎么办?

是的。可以动态添加租户。在重新启动引擎或应用程序时,您可以选择重新部署/或仅使用现有部署的流程。即使您重新部署流程,如果您希望 Camunda 仅在流程发生更改时创建流程的新版本,这也是可能的。请参阅 其DeploymentBuilder的enableDuplicateFiltering属性。

3. 之后我应该考虑在节点上对引擎进行分区吗?很难弄清楚我将如何使用动态多租户来做到这一点,但此外......这是处理高工作量和不断增长的租户数量的正确方法吗?

以我的经验,这是可能的。您需要在此处跟踪各种参数,例如内存、正在服务的请求数、可用的打开连接数等,然后相应地添加或删除节点。使用 AWS,这将变得容易得多,因为他们已经拥有一些可用于动态扩展/扩展节点的工具。但话虽如此,我只是将 Camunda 用作嵌入式引擎应用程序。

于 2017-03-28T09:01:11.063 回答