0

私の質問は、Amazon EC2 の複数のサーバーにまたがる高速アクセスのための集約データに関するものです。ASP.NET アプリケーションでは、おそらくそのデータを Application["somevar"] 変数に格納して、すべてのユーザーが (メモリ内で) すばやくアクセスできるようにします。

問題は、集約されたデータを収集し、その値をすべてのサーバーで等しくしたいときに始まります。2 つのサーバーをデプロイすることを選択した場合、ユーザーは毎回異なるサーバーにデータを送信する可能性があります (サーバーはロード バランサーまたは ElasticBean の下にあります)。たとえば、ユーザーがページを要求した回数を数えると、各サーバーのアプリケーション変数の値は異なります

例えば:

サーバー 1:

アプリケーション["カウンター1"] = 120

サーバー 2:

アプリケーション["カウンター1"] = 130

私が欲しいのは、すべてのサーバーで同じ変数です。アプリケーションのような変数にデータが必要な理由は、高速アクセスのためにメモリ内にそのデータが必要であり、そのデータをデータベースに書き込む可能性があるからです。

私が知りたいのは、どうすればこれを達成できるかということです。Amazon ElasticCache の使用について考えたので、ロード バランサーの下に 10 台のサーバーがある場合でも、API を介して ElasticCache 変数にアクセスでき、どのサーバーから memcache 変数にアクセスしても、同じ変数を取得/設定します。したがって、クロスサーバーのグローバル変数を保持するという目標を達成できます。

それが良い習慣であるかどうか、またそのような機能を実装するためのより良い方法があるかどうかを知りたかったのです。

ASP.NET C# と MySQL でアプリケーションを開発しています。また、集約されたデータの一部をデータベースに書き込む必要があることも考慮してください。これは、同時に多くの書き込みを防ぐために行います。たとえば、20 回の書き込みに達した後にデータを書き込むと、データは次の場所に書き込まれます。データベース。

4

1 に答える 1

1

いくつかのことを明確にするだけです。まず、ElasticCache の使用方法を理解していることを確認します。ElasticCache の API は、キャッシュ クラスターでの CRUD 操作を提供しません。Amazon の API は、厳密にサーバーと構成を管理するためのものです。クラスターに接続するには、.NET 用の memcached ライブラリを使用する必要があります。memcached のようなキャッシュを使用することは、最初の問題に対する良い解決策です。単純なアプリケーション変数を分散環境に簡単かつ迅速に保存します。小規模なアプリケーションであっても、一般的にキャッシュを使用することをお勧めします。

あなたが何人のユーザーを持っているか、または何人のユーザーがいると予想されるかはわかりませんが、長年のプログラミングで学んだことの1つは、過剰な最適化は通常悪い考えであるということです. 過剰最適化とは、実際に必要になる前にコードの最適化を開始することです。たとえば、最適化が提案されているとします。もちろん、一般的に言えば、データベースに 1 回の書き込みを行う方が 20 回の書き込みを行うよりも高速であることはわかっています。ただし、データベースがそのような機能を実装するためのアプリケーションのボトルネックでない限り、すぐにはメリットがなく、かなりの複雑さが生じます。memcached クラスター サーバーがクラッシュすると、データベースへの書き込みを待機していたデータが失われます。本当に多くのユーザーがいる場合は、memcached アイテムの同時実行とロックについて考え始める必要があります。

アプリケーションについて詳しく知らなければ、アプリケーションの複雑さを無駄に増やすのに時間を費やす前に、最適化が必要であることを確認することを除いて、実際の推奨事項を作成することはできません。

于 2012-07-21T16:57:13.503 に答える