3

Windows ワークフローに少し慣れていないので、簡単に進めてください :)

高可用性を備えたワークフロー ホスト環境を設計したいと考えています。少なくとも 2 つの WF ランタイム ホストが別々のハードウェア上にあり、どちらも同じ永続性または追跡 SQL データベースを指しています。

外部イベントに基づいて新しいワークフロー インスタンスを非同期的に作成できるパターンを探しています (つまり、別のアプリケーションによって DB で一部のデータが更新されます)。イベントごとにワークフロー インスタンスを 1 つだけ作成する必要があり、そのインスタンスがどのホスト上で作成されるかは問題ではありません。イベントからワークフロー インスタンスが実際に作成されるまでの期間についても、ある程度の柔軟性があります。

私が検討している 1 つの解決策は、WF ホストに WCF インターフェイスを配置し、それらをある種のロード バランサーの背後に配置することです。その後、「イベント」を発生させて WCF 呼び出しを行うシステムの部分に依存します。

両方\すべての WF ホストがダウンしているか、または使用できない場合、イベントが「失われる」可能性があるため、これにはあまり満足していません。また、思い通りに負荷を管理することもできません。短期間に多くのイベントが発生する可能性がある状況を想定していますが、後でそれらのイベントを処理することはまったく問題ありません。

したがって、何らかの形でイベントを永続化し、イベントの作成をイベント処理から切り離す必要があると思います。

これらのイベントを MSMQ または SQL Server の単純なイベント テーブルに配置し、WF ホストにキューを定期的にポーリングさせることは実行可能な解決策ですか? 世論調査は汚い言葉のようですが...

ここで NServiceBus と耐久性のあるメッセージングは​​役に立ちますか?

どんな洞察も大歓迎です。

補遺

データベースは、共有ファイバー チャネル ストレージでクラスター化されます。ネットワークも冗長化されます。WF ランタイム インスタンスがフェイルオーバーできるようにするには、共通の持続性サービス (この場合は SQL バックエンド) をポイントする必要があります。総可用性ではなく、高可用性です:)

WF の信頼性と高可用性に関する MSDN の記事

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

4

3 に答える 3

1

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

また、アップグレード時には、古いバージョンのサービスからインスタンスを復活させることはできないことに注意してください。そのため、実行時間の長いワークフローをアップグレードするには、新しいリクエストの受信を停止し、すべてのインスタンスが完了するまで待ってからビットを変更する必要があります。そうしないと、古いインスタンスが永続ストアに永久にスタックされます。

于 2008-09-17T21:07:09.217 に答える
0

MSMQ/イベント テーブルを使用します。ポーリングは、間違った場合にのみ汚れます。

覚えておくべきことの 1 つは、高可用性のために複数の WF サーバーが必要だとおっしゃいましたが、どちらも同じ SQL バックエンドを使用していることです。高可用性は、一部の単一障害点だけでなく、すべての単一障害点を除去した場合にのみ機能します。

于 2008-08-14T15:56:19.490 に答える
0

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

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

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

于 2008-11-02T16:55:44.120 に答える