7

問題:分散型でスケーラブルで災害に強いパブ/サブ サービスを WCF で提供する方法。

詳細:

このアプローチは、Tibco EMS などのメッセージング/ミドルウェア ソリューションに加えて検討されていることに注意してください。

私は WCF、特に pub/sub を提供するためにどのように使用できるかを調べてきました。この件に関して、この記事は非常に優れています: WCF pub-sub

この記事では、著者は複数のパブリッシャーを持つことの問題に取り組もうとしています (複数のボックスにまたがるサービス レイヤーで発生する問題のように)。問題は、クライアント A がパブリッシャー A に登録しているが、パブリッシャー B がイベントを公開したい場合、パブリッシャー B はクライアント A のことを知らないということです。つまり、クライアント A がイベントについて通知されることを誰もパブリッシャー B に伝えていません。著者は、解決策として pub/sub サービスを提案しています。pub/sub サービスは、サブスクリプションを一元的に保存します。ただし、セカンダリ/デュアル pub/sub サービスを使用して pub/sub サービスを災害に強いものにしたい場合は、元と同じ問題があります。

したがって、問題にはいくつかの解決策があると思います。

  1. サブスクライバーの詳細を分散キャッシュに保存します (質問を参照してください: q1およびq2 )。
  2. サブスクライバーの詳細をデータベース/中央ファイル システムに保存します。

他の解決策を考えられる人はいますか (つまり、WCF の素晴らしい魔法の機能を見逃していませんか?) コメントをいただければ幸いです。

4

2 に答える 2

3

私は同じ問題を抱えていて、この問題について多くの調査を行いました。問題は実際には簡単です。集中化された状態を維持したいが、分散された方法で。これを実現する最善の方法は、分散キャッシュを使用することであることがわかりました。たとえば、速度を見てください。状態管理の問題を解決できるネイティブの WCF ソリューションはありません。状態管理が WCF によって処理される永続的なサービスについても調べましたが、すべてのクライアント接続に対して状態を一元化する必要があるため、pub/sub サービスには適していません。データベースにデータを保存することもオプションですが、コストはデータベースの必要性であり、データベースを使用しても、データベースが複数のマシンでクラスター化されていない場合、単一障害点が発生する可能性があります。

最後に、障害点ゼロで何かを実装するのは実際には費用がかかると考えました。そこに行くことにした場合は、Azure を見てください。ストレージの未来はクラウドにあります。Azure サービスは完全にスケーラブルで分散されます。 、しかし、私たちはまだそこにいません。

于 2009-01-24T18:26:48.837 に答える
0

WCFはまだ存在しないと思います。必要なのは、ビジネスロジックを実装できるように、これらすべての詳細を処理するブローカーです。ActiveMQのような非常に優れたものがいくつかあります。オーケストレーションが必要な場合は、ブローカーの上に置くこともできるバスを使用することをお勧めします。WCFは素晴らしいと思いますが、そうでないものにしようとするのは良い考えではありません。

于 2012-10-26T19:51:18.717 に答える