何十軒ものサイトを、玄関ひとつで捌いていた話

案件ごとにキッチンを分けても、外からの入り口まで案件の数だけ用意するのは無理があった。
代わりに玄関をひとつだけ作って、そこで住所を見て振り分けることにした。
表札の掛け方ひとつで、同じ玄関から何十軒もの家へ案内できる。

前回、案件ごとに専用のキッチン(コンテナ)を用意している、という話を書いた。
ここで最初に引っかかったのが、外からの入り口だった。
インターネットから来る通信を受け取る窓口を、案件の数だけ用意していいものか。
窓口として使えるポートの番号には限りがあるし、ひとつのパソコンで何十個も開けておくのは現実的ではない。
そこで、玄関をひとつだけ作ることにした。

玄関は一つ、家は何十軒

この玄関にあたるのが、リバースプロキシと呼ばれる仕組みだった。
インターネットから来た通信を最初に受け取るのは、この玄関役のコンテナだけ。
受け取ったあと、その通信がどの家(案件)宛てなのかを見て、正しい奥の部屋へ回す。

どうやって宛先を見分けているかというと、住所の一部、つまりドメイン名を見ている。
「myproject-a.test」宛てなら奥のキッチンA、「myproject-b.test」宛てなら奥のキッチンBへ、というふうに。
表向きは同じ玄関からしか入ってこないのに、名乗った名前によって案内される先が変わる。
ホテルのフロントが、行き先の部屋番号を聞いてから鍵を渡すのと近い。

名乗る名前は、自分のパソコンの中だけで決めていい

「myproject-a.test」のような名前は、本物のインターネット上には存在しない。
自分のパソコンの中にある「hosts」という小さな名簿に、この名前が来たら自分自身(ローカル)へ向かってくれ、と一行書いておく。
そうすると、ブラウザでその名前を打ったときだけ、自分のパソコンの中の玄関へ通信が向かう。
名簿に載っていない名前は、いつもどおりインターネットの向こう側へ探しに行く。
この一行があるおかげで、本番のサイトと同じ名前の感覚でローカルの案件を呼び出せる。

玄関とキッチンを分けたのは、電気代を節約するため

最初は、玄関の役目もキッチンごとに持たせようとしていた。
それだと、案件を一つ増やすたびに玄関も一つ増える。
玄関の仕組みそのものは全案件で同じなので、同じものを何十個も動かしているだけになる。
パソコンのメモリと処理能力を、余計なところで食っていた。

玄関を一つにまとめてからは、増えるのはキッチンの数だけになった。
新しい案件を始めるときにやることは、奥に新しいキッチンを立てて、玄関の名簿に「この名前が来たらここへ」という一行を足すだけ。
玄関そのものは触らない。
触る場所が少ないほど、間違える場所も減る。

データを保管する倉庫も、同じ考え方で一つにした

もうひとつ共有しているのが、データを保管しておく倉庫(データベース)だった。
ここも、案件ごとに倉庫を新しく建てると、その分だけ管理の手間が増える。
倉庫を一つにしておいて、案件ごとに棚(データベース名)を分ければ、混ざらずに済む。
表札と同じで、名前さえきちんと分けておけば、同じ建物の中に何十件分の荷物を置いても取り違えない。

次は、キッチンを増やす話

玄関と倉庫の話はここまでにして、次回は奥のキッチン、つまり案件ごとのプログラム実行環境を増やすときに何をしているかを書く。
新しい案件を始めるたびに、まっさらな状態から手作業で作っていたら日が暮れる。
ここも、決まった手順に落とし込んである。

スタンプラリーに挑戦する 行った場所・気になる場所は、現地チェックインでスタンプに残せます。 みんなのコースを見てみる 会員が作ったスポット巡りのコースを都道府県から探せます。自分だけのコースも作れます。 運営者の個人noteも書いています AI活用やサイト運営で気づいたことを、もう少し個人の視点で掘り下げています。

※運営者が個人で書いているnoteです。

技術ブログ一覧へ戻る