我正在设计一个从 10,000 英尺高的分布式主从系统,包括:
- 基于网络的用户界面
- 一个主组件,负责根据一组可配置的算法生成作业
- 在普通电脑、HPC 集群甚至云上运行的一组工作人员
- 一个数字存储库
- 基于消息的中间件
- 不同类别的任务,运行时间从 <1s 到 ~6hrs。任务是计算繁重的,而不是数据/IO 繁重的。预计任务量不会很大(据我现在所见)。大概最高100/分钟左右。
严格来说,没有必要移出 Windows 生态系统,但我会更愿意使用跨平台解决方案来保持选项开放(注意,某些任务仅适用于 Windows)。
我几乎已经将RabbitMQ作为消息传递层,Fedora-commons似乎是最成熟的现成存储库。至于我正在评估的主/从逻辑:
- 基于 Java:Grails + Postgres + DOSGi或带有 Zookeeper的GridGain
- 基于 Python:Django + Postgres + Celery
- 基于 .net:ASP.NET MVC + SQL Server + NServiceBus + Sharepoint 或Zentity作为存储库
我查看了各种 IoC/DI 容器,但怀疑它们是否真的最适合任务执行容器并添加额外的层/复杂性。但也许我错了。
目前我倾向于使用 python 解决方案(保持轻量级),但我会对人们必须分享的任何经验/建议感兴趣,特别是对于 .net 堆栈。开源/可扩展性/弹性功能是加分项。
PS:未来更高级的需求将是用户能够直接连接到正在运行的任务(使用 Web UI)并影响其行为(实时转向)。为此需要一个直接的通信通道(通过 AMQP 执行此操作似乎不是一个好主意)。