Camunda:高性能,动态多租户应用程序的架构和决策

时间:2015-02-18 16:21:34

标签: multi-tenant camunda

我负责为我的公司建立一个复杂的系统,经过一些研究后认为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的存在吗?
  • 动态多租户怎么样?即使重新启动应用程序服务器,是否有可能动态创建租户并使这些租户持续存在?重启后重新部署进程怎么样?
  • 在关注节点上的引擎分区后,我应该考虑哪一点?动态多租户很难弄清楚我将如何做到这一点,而且......这是处理高工作量和不断增加的租户数量的正确方法吗?
  • 通过我只设置一个流程应用程序,我应该在群集环境中处理其他事情吗?

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

欢迎所有答案,希望我们能够很好地解决这个问题。

1 个答案:

答案 0 :(得分: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仅在流程发生变化时才创建流程的新版本,那也是可能的。查看 DeploymentDilder enableDuplicateFiltering 属性。

3。在那之后我应该考虑在节点上划分引擎?通过动态多租户很难弄清楚我将如何做到这一点,而且......这是处理高工作量和不断增加的租户数量的正确方法吗?

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

相关问题