2008-08-14 3 views
3

Windowsワークフローにはちょっと新しくなっています:)外部イベントに基づいて確実にワークフローインスタンスを作成するにはどうすればよいですか?

高可用性を備えたワークフローホスト環境を設計したいと思います。別のハードウェア上に最低2つのWFランタイムホストを同じ持続性またはトラッキングSQLデータベース。

いくつかの外部イベント(つまり、一部のデータが別のアプリケーションによってDB内で更新される)に基づいて、新しいワークフローインスタンスを非同期で作成できるパターンを探しています。イベントごとに、私はちょうど1つのワークフローインスタンスを作成する必要があり、そのインスタンスが作成されるホストは関係ありません。また、イベントとワークフローインスタンスが実際に作成されるまでの時間には柔軟性があります。

私が検討している解決策の1つは、WFホスト上にWCFインターフェイスがあり、何らかの種類のロードバランサの背後に配置することです。 WCFコールを行うために「イベント」を発しているシステムのどの部分にまでさかのぼります。

\すべてのWFホストがダウンしているか、または利用できない場合、イベントが「失われている」可能性があるので、これは本当にうれしいことです。また、私が望むように負荷を管理することはできません。私は、小さな期間にたくさんの出来事があるかもしれない状況を想定していますが、後でそれらの出来事を処理することは完全に容認できます。

私はイベントをどうにかして保持し、イベントの作成とイベントの処理を切り離す必要があると思います。

これらのイベントをMSMQまたはSQL Serverの単純なイベントテーブルに入れて、WFホストが定期的にキューをポーリングするだけで、実行可能なソリューションが得られますか?ポーリングはこのような汚い言葉だと思われますが...

ここでNServiceBusと耐久性のあるメッセージングは​​便利でしょうか?

洞察力があれば幸いです。データベースが共有ファイバチャネルストレージとクラスタ化され

補遺

。ネットワークも冗長化されます。 WFランタイムインスタンスがフェールオーバーするには、共通の永続性サービス(この場合はSQLバックエンド)を指す必要があります。それは、高可用性、ない総クラッシュリカバリ:)

MSDN article on WF Reliability and High Availabilty

また、WFランタイムの各インスタンスはまったく同じビットを実行している必要がありますので、アップグレードは、同時にそれらすべてを降ろすことが必要になります。私は、システム全体をダウンさせることなく、必要に応じてそれを実行できるという考えが好きです。

答えて

0

私はMSMQ /イベントテーブルに行きます。あなたが間違っていると、ポーリングは汚れてしまいます。

高可用性のために複数のWFサーバを使用する場合は、が必要ですが、どちらも同じSQLバックエンドを使用しますか?高可用性は、すべて単一障害点を削除した場合にのみ機能します。

1

netMsmqBindingでWCFサービスを使用すると、ポーリングすることなくキューに入れられたメッセージを受信できます。メッセージを受け取るために実行中のサービスがない場合、メッセージは待機します。メインのキューマシンがダウンした場合に備えて、クラスタ化されたキューを使用して信頼性を確保する必要があります。

また、古いバージョンのサービスからインスタンスを蘇らせることができないようにアップグレードする場合は注意してください。したがって、長時間実行されているワークフローをアップグレードするには、新しい要求を受け取らないようにして、ビットを変更する前にすべてのインスタンスが終了するまで待つか、古いインスタンスが永続ストアに永遠に残るようにする必要があります。

0

これは私がそれを解決した方法です。

私はNServiceBusを使用しており、各WFランタイムホストは同じメッセージバスを指しています(MSMQをトランスポートとして使用しています)。 NServiceBusは、メッセージバスからのトランザクション読み取りとロールバックをサポートします。メッセージが完全に処理される前にメッセージがバスから取り出されてもプロセスが終了すると、メッセージはキューに残り、別のランタイムホストがそれを取得します。

WFランタイムホストを別のマシンで実行するには、以前のバージョンのMSMQではリモートトランザクション読み取りがサポートされていないため、メッセージバス\キューがWindows 2008サーバー(MSMQ 4.0)以降に存在する必要があります。また、リモートトランザクション読み取りを実行するには、読み取りを実行するマシンにもMSMQ 4.0がインストールされている必要があります(Windows Server 2008など)

関連する問題