3

私は新しいサイトの計画段階にあります-それは私たちが構築したいくつかのモバイルアプリの拡張です。ユーザーにコミュニケーションの中心点を提供し、モバイルアプリを使用したくない/使用できないユーザー向けの機能も提供したいと考えています。追加しようとしている機能の1つは、SOバッジシステムと本質的に類似したレピュテーションシステムです。私たちはSOAを使用するようにシステムを設計しています。

このロジックのすべてを目立たないチャンクとしてメインアプリにコーディングする必要はありません。これを達成するための手段を作成することを考えています。これにより、評判を得るための新しいしきい値とルールを定義し、それらを何らかのサービスに注入することができます。これまで私がこれを行うことを考えた2つの方法は次のとおりです。

  1. ユーザーアクションの特定の特性を探して応答するには、これは、「プラグイン」アワード定義を実行し、満たされているしきい値をチェックして適切に応答できるサービスを実行することを意味します。
  2. ユーザーがアクションを実行したときにイベントを発生させるには、それらのイベントをリッスンし、適切に応答します。これらのアクションを実行するサービスは、潜在的に別々のサーバー上の別々のアプリドメインで実行されているため、これらのイベントをリッスンして応答する中央メッセージバスがあることを確認できる唯一の方法は、MassTransit、nServiceBus、Rhino.Esbなどを使用することです。 。

サービスバスの使用は、それを必要としないアプリケーションに非常に簡単に不適切に設計される可能性があることを知っています。ほとんどの場合、異種の異種システムを統合しない限り、新しいシステムを設計するときにサービスバスは必要ないでしょう。しかし、これを行うための最良の方法に関するオプションについては少し迷っています。私は、サービスがバックグラウンドで常にDbをハンマーで叩くという考えは好きではありません。しかし、それは早い段階で、後で、もっと単純になるかもしれないように聞こえます。私は考えるのが怖いです!

ここで誰かがこのようなシステムを設計しましたか?どのようにしてこれを達成しましたか?システムがユーザーのバーストに対処できる必要がある場合があると予想されるため、高スループットを実現するように設計しています。

4

1 に答える 1

4

同様の要件を持つシステムを設計しました。これを達成するための重要な要素は次のとおりです。

基本的な概念は、コアが特定のタスクを実行するモジュールを正確に認識していないということです。

メッセージが定義され、システム内のある時点でメッセージがディスパッチされます。送信者は、メッセージが必要かどうかを認識していません。これにより、システムの膨大なチャンクが効果的に分離されます。

したがって、ジョブを実行するために、イベントメッセージングバスに登録してメッセージを受信するコードがプラグインされます。処理する必要があるというメッセージを受信すると、処理します。

Emesaryコードは、私が最初に呼んだインスタンスでは非常に小さく効率的です(Emesaryとあなたはそれを自由に使用できます;またはEmesaryCodePlexから

システムがより複雑になるにつれて、多くのイベントが飛び交う可能性があります。1秒あたり20kを超える場合は、フィルタリングとルーティングを追加することが常に私の設計に含まれていました(受信者が登録時に受信するメッセージを指定します)。Emesaryは十分に効率的であるため、メッセージの処理に時間がかかるため、このフィルタリングを追加する必要はありませんでした。

私は、WCF、Corba、およびTCP/IPを使用して異種システム間で2つのNotifierをブリッジするバージョンのEmesaryを構築しました。RabbitMQを使用して調査し、必要に応じてEmesaryの下でこれを使用できると判断しました。

基本クラス図

Emesaryクラス図

スケーラブルサーバー。

これはかなり複雑な例ですが、Emesaryがどこに収まるかを示しています。この図では、ドロップシャドウのあるものはすべて複数のインスタンスを持つことができ、これはここで説明しようとしていること以外で管理されます。

スケーラブルなアプリケーションサーバー

于 2010-10-10T15:37:55.753 に答える