6

私は、多くのモジュール式 Web アプリケーションで構成される Web 製品に取り組んでいます。さまざまなコンポーネントが独自のアプリに分割されていますが、エンド ユーザーには 1 つのアプリケーションのように見えます。

この理由の一部は、複数のアプリケーション サーバー間で簡単に水平方向にスケーリングできるようにするためです。

データ層の水平スケーリングを容易にするために、データベースの前に Web サービス層を使用することを計画しています。このレイヤーは N 台のマシンにスケールアウトでき、その各インスタンスはキャッシュを個別に処理します。

これは、アプリケーションがサービス層のロード バランサーを呼び出し、その呼び出しをサービス インスタンスに割り当て、そのキャッシュを使用してデータを返すか、データベースに接続してデータをクエリするという考え方です。これは、アプリケーション コードを大幅に変更することなく、スケールアウトするための最も簡単な将来を見据えたソリューションのようです。

[N Amount of Databases]
         |
         \/
[Service Tier X N amount of Machines]
         |
         \/
[Application Tier X n amount of Machines]

ただし、いくつかの質問があります。ユーザー セッションをサービス レベルで永続化して、各アプリケーションがトークンで認証されるようにしたいのですが、すべてのサービス マシンでセッション データを維持する方法がわかりません。単一障害点。

これをやってのける方法についてのアイデアはありますか?アーキテクチャに関する他のアイデアはありますか? 1 日に数百万件のヒットを処理できる可能性のあるサイトを設計するプロジェクトを行った人は他にいますか?

編集:アイデアさえありませんか?:(

4

1 に答える 1

2

memcached ( http://www.danga.com/memcached ) や今後の MS Velocity プロジェクト ( http://code.msdn.microsoft.com/velocity )などの分散キャッシュ メカニズムの完璧なユース ケースについて説明しました。 .

それぞれが独自のローカル キャッシュを実行する Service Tier インスタンスの数が増加している状況では、新しいボックスごとにキャッシュの有用性が低下します。これは、個々のインスタンスがデータベースから同じデータを取得してローカル キャッシュに入力する必要があるためです。同じデータが別のサービス層インスタンスによってアクセスされた場合。memcached または Velocity を使用すると、キャッシング メカニズムによって、すべてのサーバーで未使用の RAM がインテリジェントに結合され、すべてのサービス層のインストールで共有される単一のキャッシュになります。そうすれば、データにアクセスする最初のサービス層インスタンスのみがデータベースを使用する必要があり、他のサービス層インスタンスによる後続のアクセスはキャッシュから同じデータを取得します。

この同じキャッシュを使用してユーザー セッションの状態値を簡単に保存でき、すべてのサービス層インスタンスがこの同じ情報にアクセスできるため、これを配置することで、ユーザー セッションの質問にも答えることができます。

お役に立てれば!

アダム

于 2008-11-03T19:59:04.407 に答える