1

クラウド サーバーで実行される asp net mvc4 でコード化された WebService があります。このクラウド サーバーには、IIS 8 と mysql サーバーがあります。このサーバーは、このアプリケーション専用です。

このサーバーへのリクエストが増えています。各リクエストにはデータベースへの接続が必要です (クエリの 70% は単純な「選択」、25% は 2 つまたは 3 つのテーブルとの結合、5% は挿入です)。

サーバーはデータベースにアクセスし、取得したデータを含む単純な xml を回答として提供します (xml は約 0.2 kb から 2 kb です)。

Web サービスは常にサーバーで実行されています。

リクエストごとに、私のWebサーバーはデータベース(同じマシンに保存されている)への接続を開き、操作して接続を閉じ、xmlで応答します。

現在では、1 分間に数回しか発生しません。私のコネクタ クラスはシングルトンです。

このシナリオでは、この接続を永続化する必要がありますか? これはアプリのスケーラビリティを向上させるのに役立ちますか? よりスケーラブルにするために何をすべきかについてのアドバイスはありますか?

4

1 に答える 1

0

いくつかのポイント:

  • 時期尚早の最適化は諸悪の根源であることを忘れないでください。これが現時点でパフォーマンスのボトルネックでなければ、あまり時間をかけません。

  • マルチスレッドアプリケーションでは、シングルトンは非常に悪いものです。それらはスケーラビリティのアンチテーゼを表しています。トラフィックの多いアプリケーションでは、競合状態などの問題が発生します。静的オブジェクトまたはメソッドへのアクセスには、パフォーマンスを大幅に低下させる可能性のあるコンテキストの切り替え/変更が含まれる場合があります。シングルトンやその他の静的オブジェクトを取り除き、非シングルトン (「マルチトン?」:/) に置き換えるだけで、アプリが 10 倍高速化するのを見てきました。

  • エンティティ フレームワークや Windows 上の他のほとんどの db ライブラリの背後にある基盤となるデータベース プロバイダーである ADO.NET は、既に接続プールを実行しているため、データベースへの接続のオーバーヘッドが大幅に削減されます。アプリケーションにその機能を再実装すること (これは、データ層ではなくアプリケーション層で接続を開いたままにすることによって事実上行っていることです) がパフォーマンスを向上させる可能性はほとんどありません。

  • WCFは永続的な接続を本質的にサポートしているため、この機能が本当に必要な場合は、RESTful または SOAP (asmx) サービスではなく、WCF で Web サービスを実装することを検討することをお勧めします。しかし、私は、WCF は Web サービスの実装に対するかなり重いアプローチであり、(私の意見では) 不必要な複雑さにつながると感じています。

于 2014-08-12T16:21:13.900 に答える