对 Windows 工作流程的东西有点新,所以很容易:)
我希望设计一个具有高可用性的工作流主机环境——在不同的硬件上至少有 2 个 WF 运行时主机,它们都指向相同的持久性或跟踪 SQL 数据库。
我正在寻找一种模式,通过这种模式我可以基于一些外部事件异步创建新的工作流实例(即,一些数据由不同的应用程序在 DB 中更新)。对于每个事件,我都需要准确地创建一个工作流实例,而不管该实例是在哪个主机上创建的。关于事件之间的持续时间和实际创建工作流实例的时间也有一些灵活性。
我正在考虑的一种解决方案是在 WF 主机上使用 WCF 接口,并将它们放在某种负载平衡器后面。然后由系统的任何部分触发“事件”来进行 WCF 调用。
我对此并不满意,因为如果所有 WF 主机都关闭或不可用,则该事件可能会“丢失”。此外,我将无法按照我想要的方式管理负载。我设想这样一种情况,在短时间内可能会发生很多事件,但在一段时间后处理这些事件是完全可以接受的。
所以我认为我需要以某种方式持久化事件并将事件创建与事件处理分离。
将这些事件放入 MSMQ 或 SQL Server 中的简单事件表中,并让 WF 主机定期轮询队列是可行的解决方案吗?投票似乎是一个如此肮脏的词......
NServiceBus 和持久消息传递在这里有用吗?
任何见解将不胜感激。
附录
该数据库将使用共享光纤通道存储进行集群。网络也将是冗余的。为了使 WF 运行时实例具有故障转移,它们必须指向一个公共持久性服务,在这种情况下是一个 SQL 后端。这是高可用性,而不是总可用性 :)
此外,WF 运行时的每个实例都必须运行完全相同的位,因此升级需要同时将它们全部关闭。如果需要,我喜欢能够做到这一点的想法,而无需关闭整个系统。