ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

今年出てきそうなサービス? (4):2つ以上のサーバの共有セッション

2009-01-04 23:04:01 | Weblog

 今年出てきそうなサービスというか、お話、第4話は、

  2つ以上のサーバの共有セッション

 たとえば、クラウドなどで、2つ以上のサービスにおいて、セッションを共有したい(ユーザーには見せたくないデータだが、サーバー間では共有する必要があるデータがあるときなど)場合とか、

 たとえば、DNSラウンドロビンで簡易ロードバランスをしてしまい、ロードバランスするサーバー間で同じセッションデータを共有したい時(セッションによってサーバーを選ぶ形式ではなく)とか、

 クラウドのように外部サーバーでも、ロードバランサーのように、内部サーバー間でもいいんだけど、2つ以上のサーバーで、セッションを共有したい場合が、今でもあり得るし、クラウドがはやれば、もっとあり得る。そういうとき、どうするか。





 たとえば、サーバーA,サーバーBの2つのサーバーでセッションを共有したいとする。
 この場合、理論的には、以下の3つが考えられる。

(1)サーバーA、あるいはサーバーBのどちらかのセッションに、2つのサーバーの
   データを入れておく。
   たとえば、サーバーAに両方のセッションにいれたいデータを入れておいた場合、
   セッションBで、データが必要な時は、セッションAに、データ取り出し請求をし、
   書き変わったら、データAに書き換え要求を出す。

(2)サーバーA、サーバーBとは別のサーバーCに、セッションデータを入れておき、
   データが必要な時には、サーバーCにアクセスする

(3)サーバーA、サーバーBで、共有のハードディスク、データベースなどを用意しておき、
   それを参照、書き換えする。

 ロードバランサーで利用する場合、(1)は、まず、ない。かならず、Aをアクセスするのであれば、Aのアクセス回数は減らない(というか、増える)。(2)は、クラウドなどのときにありえる(認証したときの返り値に、セッションデータを返すとか)。(3)は、ロードバランサーでLANなどで利用するとき、あり得る。

 (2)、(3)とも、1ブラウザごとに(たとえば1台で3つのブラウザを起動していたら、その1ブラウザごとに)、セッションを作る必要がある。
 なので、ブラウザがセッションスタート、セッション終了を行ったほうが、やりやすいかもしれない。そして、各ブラウザごと、セッションをスタートしたら、そのセッションのID(セッションIDそのままだと、セッションハイジャックされる可能性があるから、暗号化するか、あるいはHTTPSでPOSTで送るか)をブラウザが受取、各サービスに渡すかんじかなあ・・




 で、(2)、(3)とも、セッションデータを保存しておかないといけない。
 (2)の場合は、サーバーCのセッション内という話もありえる。それ以外には、あるいは(3)の場合には、理論的には、2つのケースが考えられ得る。

(あ)セッションデータをデータベースにいれる
(い)セッションデータをファイルにいれる
    (セッションIDなど、一意になるものをファイル名として)

 (あ)の場合は、大量データの場合、問題がある。データベースはログを残す。セッションデータは、多くのデータをちょくちょく更新するので、その分、ログがガンガン書き出されてしまう(しかし、そのログは不要である)。

 そーいうことから考えると、(い)のファイルのほうが無難か?
 障害などを考えると、DRDBでミラーリング?
 (いまどきのネタだと、ミラーリングはバックアップにはならない




まとめると、

クラウドで2サーバー間でセッションデータ共有したい場合、
  セッションデータ管理用サーバーをおき、
  そのサーバーのセッション、ないしファイルシステムでデータを読み書き

簡易ロードバランサーのような、社内サーバー間でデータ共有したい場合、
  共有ファイルシステムでデータの読み書き

とくに、DRDBとか使うかんじのが、クラウドや冗長性がはやると、でてきそうですね。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする