web-dev-qa-db-ja.com

PHP自動スケーリングサーバーでのセッション

(SOとのクロスポストについてお詫びします。どこがより適切かわかりませんでした。)

アマゾンウェブサービスにデプロイされたPHP Webアプリに取り組んでいます。自動スケーリングされたアプリケーションサーバーの前にロードバランサーがあります。

現在直面している問題は、セッションの処理です。スティッキーセッションは妥当な解決策ですが、セッションをかなり長い時間(理想的には数週間)継続したいと考えています。これにより、時間の経過とともにロードバランサーのパフォーマンスが低下する可能性があります。また、自動スケーリングを使用すると、サーバーが削除され、サーバー上のアクティブなセッションがすべて失われることがあります。もちろん、共通のデータベースを使用してセッションを保存することもできますが、すべてのリクエストでDBへの別のラウンドトリップが必要な場合は、パフォーマンスが少し心配です。

うまくいった解決策や、私たちが試すことができるアイデアを提案していただければ幸いです。

よろしくお願いします、ロス

1
Ross McFarlane

PHPは、セッションをプレーンファイルに保存します。共通のストレージに保存してみましたか?

同様の質問: 共有PHPクラウドファイルシステムのセッション

この特定の問題とさまざまなアプローチに関する記事は次のとおりです。 http://kevin.vanzonneveld.net/techblog/article/enhance_php_session_management/

4
jishi

IME、ファイルベースのセッションとデータベースセッションの使用の間にオーバーヘッドはほとんどありません(前回これを詳細に調べたとき、3つのmysqlノードでマスター/マスターレプリケーションを使用しました)-しかし、後者は前者と比較して追加のネットワークトリップを伴うことがよくあります(ローカルのmysqlインスタンスにアクセスする場合、ローカルのみのファイルシステムと比較して違いは測定できません。また、dbベースのストレージを共有リポジトリにスケーリングする方がはるかに簡単です。また、単純なキー/値の方法論であるため、リレーショナルデータベースよりもさらに簡単にスケーリングできるnosqldbsに実装するのは簡単です。

1
symcbean

他の人がリンクしている記事ですでに言及されていますが、個別に繰り返す必要があります。Memcacheはここで非常に便利なオプションです。非常に高速で、複数のMemcacheサーバー/インスタンスに簡単に拡張でき、データベースに多くのオーバーヘッドや負荷をかけることなく、非常に簡単に実装できます。 1日あたり数百万のヒットがあるサイトで最小限の労力でこれを正常に実装し、既存のハードウェアでさらに多くの成長の余地を与えました。

そうすることで、PHPのセッションガベージコレクターを実行するのではなく、Memcache独自のエージングポリシーを使用することもできます。

0
Steven Don