パーシステンス
ロードバランサの機能だよ
セッションを維持するための仕組みだよ
簡単に書くよ
パーシステンス(英:persistence)とは
ロードバランサ
((負担を軽くするために)処理を振り分ける誘導係)の機能のひとつ
であり
同じ人からの接続を同じ機器に振り分けることによって、セッション
(論理的な意味での「開始」から「終了」まで(を意図する単位))を維持する仕組みのこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「ロードバランサ」について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
ロードバランサは「(負担を軽くするために)処理を振り分ける誘導係」です。
例えば、そうですね。
ホームページを見るときには、まずホームページを見るときに使うソフト(Webブラウザ)からホームページが置いてあるコンピュータ(Webサーバ)に「このページをおくれ」と お願いが出されます。
そのお願いに対して、WebサーバさんはWebブラウザさんに「ほれ、そのページだよ」と お返事をします。
くれと言われたホームページのファイルをあげるのです。
Webブラウザさんは、Webサーバさんからもらったファイルを画面に表示します。
これがホームページを見るときの流れです。
この流れにおいて、登場するWebサーバさんは普通は1台です。
1台のWebサーバさんが、えっちらおっちらと、お仕事をします。
とはいえ、世の中には人気者のホームページがあります。
人気者のホームページが置いてあるWebサーバは、たくさんの人から「このページをちょうだい」と言われるでしょう。
そうすると1台では処理しきれなくなることがあります。
そんなときはWebサーバを たくさん用意します。
数の力で対抗するのです。
今回は3台用意したと仮定しましょうかね。
もともと1台でやっていた仕事を3台でやるのです。
1台にかかる負担は三分の一になるでしょう。
ただし、1回の「このページをちょうだい」に対してお返事をするのは1台で十分です。
3台が3台とも「ほれ、そのページだよ」と お返事をすると、逆に混乱させてしまいます。
そこで登場するのが誘導係です。
「このページをちょうだい」のお願いを、まずは誘導係が受け取ります。
お願いを受け取った誘導係が、暇そうなWebサーバに「おまえがこれを処理しろや」と割り振ります。
こうすることで、1度にお仕事をするのは1台ですが、全体で見ると3台でお仕事をする状態になります。
使う人から見れば今までと同じです。
相手をしてくれているのは1台です。
でも実際には3台でお仕事をしています。
1台にかかる負担は三分の一になりました。
めでたし、めでたし。
このように、負荷分散を目的として「今回は、おまえがやれ~」「今回は君がやってね」と処理を振り分けてくれる誘導係がロードバランサです。
ちなみに、今回はWebサーバを例に挙げましたが、用途がWebサーバ以外のロードバランサもあります。
以上を踏まえて、本題に入ります。
実はロードバランサには1つ弱点があります。
それは
お仕事がどの機器に振り分けられるかわからないので、セッションが維持できない
点です。
ん?
「セッション」が何か分かりませんか?
大丈夫です。
説明します。
例えば、そうですね。
ピヨ太君がオンラインショップ(インターネット上のお店)でお買い物をしたとしましょう。
まずは、ピヨ太君の使っているWebブラウザからオンラインショップのWebサーバに対して「この商品を買うよ。注文画面をちょうだい」とお願いを出します。
そうするとオンラインショップのWebサーバは「ほらよ。これが注文画面だ」とお返事を出します。
次にピヨ太君は「注文内容を入力したよ。注文処理をやって結果画面をちょうだい」とお願いを出します。
それに対して、オンラインショップのWebサーバは「注文処理をやったよ。これが結果画面ね」とお返事を出します。
これでピヨ太君は無事に注文ができました。
めでたし、めでたし。
ただし、ここで1つ注意事項があります。
Webサーバさんは忘れっぽいのです。
実はWebブラウザさんとWebサーバさんのやり取りは、1回のお願いと1回のお返事で完結します。
「注文画面をちょうだい」「これが注文画面だ」で関係は終わりです。
お返事を出した時点で、Webサーバさんは今のやり取りを忘れてしまいます。
ですから、次に(さっきの続きとして)「注文処理をやって結果画面をちょうだい」とお願いを出しても、Webサーバさんは戸惑ってしまいます。
「あぁ、さっき『注文画面をちょうだい』ってお願いをくれたピヨ太君ね」とは気づいてくれないのです。
Webサーバさんは、さっきのやり取りを忘れていますからね。
「注文画面をちょうだい」と「注文処理をやって結果画面をちょうだい」が続きだとは気づきません。
Webサーバさんにとって、それぞれのやり取りは独立しているのです。
これでは不便ですよね。
そこで、それぞれのやり取りは独立しているものの「これは一連の流れですよ」と認識させるための仕組みがあります。
この一連の流れを認識させる仕組みを「セッション」や「セッション管理」と呼びます。
セッションの具体的な仕組みは、ここでは触れません。
ざっくりと雰囲気だけ説明しておくと、2回目のお願いをするときに、単に「注文処理をやって結果画面をちょうだい」ではなく「さっき『注文画面をちょうだい』ってお願いしたピヨ太だけどよ~。注文処理をやって結果画面をちょうだい」と伝えるイメージです。
これでWebサーバさんは「あぁ、さっきのアイツか」と気付けます。
このような涙ぐましい努力をして、忘れっぽいWebサーバさんの記憶をつなぎとめているのです。
独立したひとつひとつの「お願い→お返事」を関連付けて、意味のある一連の流れを形作るための仕組みがセッションです。
さて、このような涙ぐましい努力ですが、ロードバランサが混ざると問題が生じます。
ロードバランサは処理の誘導係です。
複数の機器のどれかに割り振ってくれます。
そうするとですね。
1回目の「注文画面をちょうだい」のお願いを機器1に振り分け、2回目の「さっき『注文画面をちょうだい』ってお願いしたピヨ太だけどよ~。注文処理をやって結果画面をちょうだい」のお願いを機器2に振り分けることも出てくるわけです。
機器2は困りますよね。
「さっき『注文画面をちょうだい』って お願いしたピヨ太だけどよ~。」と言われても、そんな「さっき」は ありません。
「注文画面をちょうだい」なお願いは機器1に行ってます。
これではセッションを維持できません。
そこで、ロードバランサには「同じ人からのお願いは同じ機器に振り分けるから」な機能があります。
ピヨ太君の最初のお願いを機器1に振り分けたら、それ以降も必ず機器1に振り分けるのです。
そうすれば「注文画面をちょうだい」も「さっき『注文画面をちょうだい』ってお願いしたピヨ太だけどよ~。注文処理をやって結果画面をちょうだい」も機器1に届きます。
機器1は一連の流れを把握できる立場にいるので、セッションを維持できます。
このような
ロードバランサの機能のひとつで、同じ人からの接続を同じ機器に振り分けることによってセッションを維持する仕組み
が「パーシステンス」です。
ちょっと小難しい言い方をすると
クライアントとロードバランサ間で(ある程度の)セッション管理をやることによってセッションを維持する仕組み
です。
もちろん、振り分け先の機器でもセッション管理をやる必要はありますけどね。
その前段階としての「同じ人からの接続は同じ機器に振り分ける」ロードバランサの機能がパーシステンスです。
一言でまとめるよ
まぁ「パーシステンス」って単語が出てきたら「ロードバランサ
((負担を軽くするために)処理を振り分ける誘導係)におけるセッション
(論理的な意味での「開始」から「終了」まで(を意図する単位))を維持するための仕組みなんだな~」と お考えください。
おまけ
■訳してみるよ
「persistence(パーシステンス)」の意味は
・粘り強さ
・しつこさ
・持続性
とかです。






