PHPセッションは、分散システム全体に拡張するのが難しいですか?

StackOverflow https://stackoverflow.com/questions/255573

  •  05-07-2019
  •  | 
  •  

質問

職場では、ほぼすべてをJavaとperlで行いますが、PHPとセッションを使用して機能を構築したかったのです。一部のピープは、システムでPHPセッションを実行しようとするのは悪い考えだと考え、それが多くのサーバーに配布されるためです。特定の問題はどうなりますか?

役に立ちましたか?

解決

特定の質問への答え、問題は何であるかは、デフォルトでPHPがセッションをファイルシステム上のファイルに保存するという事実にあります。リクエストを処理する単一のWebサーバーの場合、セッションデータは常に利用できるため、これは問題ではありません。しかし、2つの負荷分散されたWebサーバーがリクエストを処理している場合はどうなりますか?

リクエストで最初のWebサーバーにアクセスすると、ファイルシステムにセッションファイルが作成されます。次に、次のリクエストが2番目のWebサーバーにヒットします。もちろん、2番目のWebサーバーにはセッションファイルは表示されません。ユーザーには、Webサイトにログインした後、突然ログアウトする可能性があります。

これはPHP固有の問題ではなく、非常に一般的です。解決策は、セッションデータをいくつかの共通領域に保存することです。最も一般的な方法は、すべてのWebサーバーからアクセス可能なデータベース、またはmemcachedなどの共有メモリキャッシュサーバーにセッションデータを保存することです。

他のヒント

カスタムセッション保存ハンドラを使用することもできます。

http://www.php.net/ manual / en / function.session-set-save-handler.php

試したことはありませんが、独自の保存/読み取り関数を定義するため、拡張機能をインストールする必要なく、データベースまたは共有nfsバックエンドを実装できます。

@Eran Galperinによって提案されたMsessionも、前述したものの代替として非常に興味深いようです。

複数のサーバー間でのセッションの永続化(セッションクラスタリングとも呼ばれます)は、Webアプリケーションのスケーリングに関する一般的な問題であり、PHPに固有のものではありません。 PHPは、 Zend Platform (商用アプリケーションサーバー)、および Msession (拡張)。

かなりあいまいな質問ですが、問題は答えで言及されているよりも大きいと思います。 Cookieのロードと保存の方法をオーバーライドできますが、それにはコストもかかります。たとえば、次のシナリオ/質問を考慮する必要があります。

  • 別のホストにCookieを配置する場合、これはCookieの速度にどのように影響しますか?それは明らかに、書き込み/読み取りの回数に依存します。
  • 速度を上げるために、またはフェイルオーバーを行うためにこれを行っていますか?答えは間違いなく異なるソリューションにつながります:
    • フェイルオーバーのためにこれを行う場合、ネットワークリンクがダウンしたためにウェブサーバーがセッションストアにアクセスできない場合、どのように処理しますか?セッションストアがダウンした場合はどうなりますか?何らかの種類のマスターマスタレプリケーションを使用してこれを解決する必要があります。おそらく、すべてのセッションがメモリに収まる場合は、Webサーバーと同じマシンでその分散セッションストアを実行します。マスター/マスターレプリケーションについては、 Riak などをご覧ください。
    • 速度を上げるためだけにこれを行う場合、Apache、nginx、または(最速)haproxyを使用して、クライアントIPアドレスに基づいて負荷分散を行うだけです。そうすれば、分散セッションストアをセットアップする必要がなくなります。もちろん、PHPインスタンスの1つがダウンすると、ユーザーはCookieを失いますが、それは問題ではないでしょう。それはあなた次第です。

easiestはmemcachedまたはredisです。

redisでそれを行う方法は次のとおりです-現在使用しています: http://redis4you.com/articles.php ?id = 001& name = Redis + as + session + handler + in + PHP

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top