🐘 片付けを忘れたサーバー
STAGE 1 ― Webサーバーの中 ―
クリア 0 / 3
STAGE 1

Webサーバーの中

リクエストとワーカー
🎯 ミッション
ブラウザがページを頼んでから返事が届くまでの流れと、ワーカー(PHPを動かす処理係)が何件もの頼みを順番に使い回して処理することを説明できれば合格。
未達成
うさ美
博士、ニュースで「Webサーバーに重大な脆弱性、すぐに更新を」と流れていました。PHPという言葉も出てきました。PHPって何ですか?
ねこ博士
Webサイトを動かすのによく使われているプログラミング言語だよ。ブログや通販サイト、学校のホームページまで、世界中のWebサイトのかなりの部分がPHPで動いている。だから、PHPのようなしくみに欠陥が見つかると大きなニュースになる。今日から何回かに分けて、Webサーバーの中で起きる「メモリの片付け」の問題を、しくみから順に追いかけよう。
うさ美
脆弱性というのは、弱点のことですか?
ねこ博士
そう。プログラムの中の「悪用できる欠陥」のことを脆弱性という。ただのバグは「動きがおかしい」で終わるけれど、脆弱性は、他人がそれを利用して、本来できないはずのことをできてしまう。重さにはいろいろな段階がある。それはしくみを知ってから見ていこう。まずはWebサーバーの中で何が起きているかからだ。
うさ美
お願いします。
ねこ博士
きみがブラウザでWebページを開くとき、ブラウザはインターネットの向こうのコンピューターに「このページをください」という頼みを送る。この頼みをリクエストという。受け取る側のコンピューターがWebサーバーだ。サーバーはページを作って送り返す。この返事をレスポンスという。
うさ美
頼んで、返事が来る。お店の注文みたいですね。
ねこ博士
いいたとえだね。そのまま使おう。Webサーバーはお店だ。入口の受付係がリクエストを受け取り、中の処理係に回す。処理係がPHPのプログラムを動かしてページを作り、受付係が返事として送り返す。この処理係をワーカーと呼ぶ。
ブラウザから届いたリクエストを、受付(Webサーバー)が空いているワーカーに回し、ワーカーがPHPのプログラムを動かしてページを作って返す。ワーカーは1件を終えると片付けをして、次のリクエストを待つ
うさ美
ワーカーは、リクエストのたびに新しく作られるんですか?
ねこ博士
いいところに目をつけたね。昔はそういうやり方もあった。でも、処理係を1人呼んで準備させるのには時間がかかる。だから今のサーバーは、何人かのワーカーをあらかじめ用意しておいて、1人のワーカーが何件ものリクエストを順番に引き受ける。1件終わったら机を片付けて、次のお客さんの頼みに取りかかるんだ。
うさ美
同じ処理係が、知らない人どうしの注文を続けて担当するということですか?
ねこ博士
その通り。Aさんの注文のすぐあとに、まったく無関係のBさんの注文を、同じワーカーが同じ机で処理する。ここで大事なのが片付けだ。Aさんの注文で使ったメモや材料を、Bさんの番までにきちんと片付けておかないと、どうなると思う?
うさ美
Bさんの料理に、Aさんの注文のメモが混ざってしまうかもしれません。Aさんの名前や住所が書いてあったら、Bさんに見えてしまうかも。
ねこ博士
そう。だから、PHPは1件のリクエストが終わるたびに、そのリクエストのために使ったものを全部片付けるという約束で作られている。リクエストごとにまっさらな机から始める。これがPHPの基本の考え方なんだ。
うさ美
それなら安全そうに聞こえます。
ねこ博士
約束が守られていればね。でも、プログラムは人が書くものだから、片付けに漏れがあることがある。たとえば、作業の途中で急に手を止めなければならなくなって、やりかけのものが机に残ったまま次のお客さんの番が来てしまう、というような漏れだ。
うさ美
次のお客さんの番で……。だから、同じワーカーが使い回されることが関係するんですね。
ねこ博士
そう。ワーカーの使い回しは速さのための工夫で、それ自体は悪くない。でも、片付けに漏れがあると、前のリクエストの残りが次のリクエストに影響する。ここをしっかり覚えておいてほしい。
💡 ワーカーの動かし方はいろいろPHPをWebサーバーで動かす方法には、Apache というサーバーの中にPHPを組み込む mod_php、PHP専用の処理係の集まりを別に動かす PHP-FPM、そのほか FrankenPHP、LiteSpeed、php-cgi などがある。どの方法でも「何人かのワーカーを用意して使い回す」という点は共通している。動かし方によって、ワーカーを使い回す回数や、1件ごとの片付けの仕方が少しずつ違う。
うさ美
博士、もう1つ聞いてもいいですか? ワーカーが使い回されるとき、何が「残って」いるんですか? 机の上のメモというのは、コンピューターの中では何にあたるんでしょう。
ねこ博士
それを考えるには、コンピューターのメモリを知る必要がある。プログラムが計算の途中のものを置いておく場所だ。次は、メモリを番号つきの箱が並んだ棚として見て、「借りる」「返す」とはどういうことかを確かめよう。
【このステージの成果】 ブラウザの頼み=リクエスト、サーバーの返事=レスポンス PHPのプログラムを動かす処理係=ワーカー。速さのため、1人のワーカーが何件ものリクエストを順番に引き受ける(使い回し) PHPの約束:1件ごとに、そのリクエストで使ったものを全部片付ける 片付けに漏れがあると、前のリクエストの残りが、同じワーカーの次のリクエストに影響する

確認クイズ

Q1. ブラウザからWebサーバーへ送られる「このページをください」という頼みを何という?

Q2. 今のWebサーバーで、PHPのワーカーはふつうどう使われる?

Q3. 1件のリクエストが終わったときの、PHPの基本の約束は?

← トップへ