2012-04-30 14 views
1

誰も私に答えることができます - どのようにSMS /電子メールゲートサービスが動作しますか?asp.net高負荷SMS /電子メールスケジューラのアーキテクチャ

一般的に、私はasp.net mvc 3 Webアプリケーションが必要です。これは高負荷SMS /電子メールapiをサポートする必要があります(例では、1秒あたりのapiに100〜500リクエスト)。このシナリオでは、どのアーキテクチャ/アルゴリズムを使用する必要がありますか?

私は間違っていると思っています。解決してください。 1)私のサービスにたくさんのHttp(またはsoapなど)リクエストがあります。 「www.example.com/sms-api/send?blabla」と似ています。 2)db内のすべての要求を挿入する 3)Winサービスは、status = NotInProcess(例)のdb内のすべての行を反復処理します。 4)新しいスレッドのすべての項目を処理してください(正常/正しいのですか?)、実行してください(別のサービスなどからのログ/待機応答とともにメールを送信します)。

私は知っている、それは私の質問には "ベストプラクティス"が存在するはずですが、私はそれを見つけませんでした...誰でも私のアーキテクチャの質問で私を助けることができますか?

答えて

1

解決策の要件によって異なります。

パフォーマンス: あなたが永続性を除外した場合は、パフォーマンス上のポイントを大幅に節約することができます。 DBへの書き込みは非常にコストがかかるためです。 DBからの読み込みも高価です。

スケーラビリティ: 派遣他のホスト(複数可)へのすべての着信メッセージ。最初は、同じサーバー(Web)上にこれらのホストを置くことができます。負荷が上がると、サーバーとホストを追加したり、有料のクラウドサービスを使用したり、メッセージを並行して送信したりすることができます。永続性やその他の必要なホストにメッセージを送信することもできます(認証、承認、請求などが必要です)。)

可用性: 何ダウンいくつかのホストであれば?ホストが稼動した後に、受信データを復元してディスパッチを続ける必要があります。私はあなたの問題のために非常に適したアーキテクチャは、SOAだと思うこのすべてを仮定 あなたは簡単に新しいホストを追加/置き換え/削除することができるはず、処理、高/低負荷など

保守サービス指向アーキテクチャ)。 MSMQまたはRabbitMQをトランスポートとして、NServiceBusをフレームワークとして使用できます。続きを読む:http://particular.net/nservicebus

2

これはおそらくそれよりも複雑です。具体的には、処理の失敗と完全な要件は何かです。一度それを定義すれば、アーキテクチャはより明確になると思います。あなたはSMS /電子メールゲートウェイとして行動しています。つまり、あなたがそれらのメッセージを送信しているものは、自分自身の失敗を持つ可能性があります。あなたのアプリケーションの意味は何ですか?あなた自身が失敗するつもりですか?送信を再試行しますか?

外部サービスが失敗して失敗した場合は、WCF(またはASP.NET MVC 4およびWebAPI)で通常のREST APIを実行するだけで十分です。

クライアントに代わってメッセージを送信し続ける場合は、Microsoft Azure QueuesなどのWCFのREST API(上記と同じ)を参照することをおすすめします。クライアントが接続すると、Azure Queueに送信するメッセージを追加し、スレッド(またはワーカーロール)を使用して新しい追加を監視します。キューを使用することでメリットがあるのは、メッセージが来ても処理できることと耐久性があることです。つまり、メッセージを送信しようとしているときにサービスがダウンした場合、キュー内のデータは失われません。それはあなたにもう少しフォールトトレランスを与えます(あなたがそれを適切に実装していると仮定します)。

あなたが見たいかもしれないものはQuartz.NETです。これにより、スレッドが特定の時間スケジュールで繰り返し実行されるようにスケジュールすることができます。これはスケーリングの再試行のメカニズムに役立つかもしれません。外部サービスが失敗した場合は、1分後にもう一度お試しください。再度失敗する場合は、15分後に再試行してください。

関連する問題