我负责为我的公司构建一个复杂的系统,经过一些研究,我认为 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 的存在吗?
- 那么动态多租户呢?是否可以即时创建租户并使这些租户即使在重新启动应用程序服务器后也会随着时间的推移而持续存在?重启后重新部署进程怎么办?
- 在哪一点之后我应该考虑在节点上对引擎进行分区?很难弄清楚我将如何使用动态多租户来做到这一点,但此外......这是处理高工作量和不断增长的租户数量的正确方法吗?
- 我只设置了一个流程应用程序,我应该在集群环境中处理其他事情吗?
我不排除在我的应用程序中只使用一个租户、一个流程引擎并在逻辑上处理与租户相关的所有内容,但我知道这可能非常(非常!)麻烦。
欢迎所有答案,希望我们能找到解决这个问题的好方法。