PART 0

複数のサーバが連携して動く、
小さな街を建てる。

この教材のゴールは、複数のサーバが役割を分け合って 1 つのサービスを動かす仕組みを、自分の手で組み立てられるようになることです。動かすだけでなく、止まったときに、どこで止まったのかを自分で確かめられるところまでを目指します。

そのために、サーバやネットワークを「街」に見立てて、エリアを 1 つずつ建てていきます。Part 1〜4 で街の中心のサービスが動き出し、Part 5〜7 でその街を広げ、見守る仕組みを加えます。

§ 01 何を建てるのか

街の中心に建つのは、カードをかざすと残高が減り、利用記録が残る改札サービスです。Part 4 の最後に、このサービスを 4 台のサーバで動かします。

サービスは 3 つの役割に分かれています。要求を受け取る「入口」、残高の計算などの処理を行う「App」、残高や履歴を保存する「DB」です。App は 2 台用意するので、全体は入口 1 台・App 2 台・DB 1 台の合計 4 台になります。

役割ごとにサーバを分けると、どこが止まったかによって起きることが変わります。入口が止まればアクセスを受け付けられません。App が止まれば処理できません。DB が止まれば残高を読み書きできません。

§ 02 街の地図と工程

街は 7 つのエリアに分かれています。各エリアが 1 つの Part に対応します。

この教材で作る「小さな街」の全体図。Part 1 Linux 基礎エリア、Part 2 ネットワークエリア、Part 3 サーバー運用エリア、Part 4 サービスエリアは完成していて明るく、Part 5 仮想化エリア、Part 6 ストレージエリア、Part 7 監視・障害対応エリアは建設中。下半分は、Part 4 で作る改札サービスの動き(カードをかざす、Web サーバーが受け取る、2 台のアプリサーバーが処理する、データベースを更新する、結果を返して改札が開く)。各 Part の実機演習の有無は、下の表を参照。
図を押すと、大きな画像で開きます。各エリアと Part の対応は、下の表にもまとめています。
エリアPart一言状態
Linux 基礎エリアPart 1 Linux 基礎1 台のサーバの中を動かす教材公開・実機演習あり
ネットワークエリアPart 2 ネットワーク基礎サーバ同士を道でつなぐ教材公開・実機演習あり
サーバー運用エリアPart 3 サーバ運用動いているサービスを維持する教材公開・実機演習は提供していない
サービスエリアPart 4 サーバ構築複数のサーバを組み合わせてサービスを作る教材公開・実機演習は提供していない
仮想化エリア(建設中)Part 5 仮想化これから作るエリアまだ作っていない(教材も未公開)
ストレージエリア(建設中)Part 6 ストレージこれから作るエリアまだ作っていない(教材も未公開)
監視・障害対応エリア(建設中)Part 7 監視これから作るエリアまだ作っていない(教材も未公開)

初めてインフラを学ぶ方は、Part 1 から順番に進むことをおすすめします。Linux やネットワークの経験がある方は、必要な Part から読んでも構いません。ただし、後の Part では前の Part で説明した用語やコマンドが登場します。

§ 03 街の言葉と技術の言葉

Part 4 では、サービスの仕組みを「改札」にたとえて説明します。ここでは、街の中の言葉が実際の技術では何を意味するのかだけ、簡単に確認しておきます。

街の言葉技術の言葉簡単な説明
改札(サービス全体)3 つの役割(入口・App・DB)入口・App・DB が連携し、ひとつの処理を完了させる仕組み
入口(改札の入り口)入口のサーバ(nginx)要求を受け付け、App へ渡す
タップ(カードをかざす動作)1 件ごとの処理の依頼(HTTP 要求)App が受け取り、DB に記録する
残高残高を保存する表(cards テーブル)DB がトランザクション(複数の更新をひとまとまりとして扱う仕組み)と制約で正確さを守る
event ID(1 回ごとの識別子)処理ごとに付ける識別子(event ID)同じ処理を二重に実行させないための鍵
App処理を行うサーバ(アプリサーバ)入口と DB の間で処理を実行する
振り分け(複数の App への割り当て)振り分けの設定(nginx の upstream)2 台の App へ要求を振り分ける

この言葉の対応は、章の中で繰り返し使います。「タップが届かない」と言ったとき、それは nginx の入口に届かないのか、App まで届かないのか、DB に記録されないのか。役割ごとに分けて確かめることが、この教材の中心にあります。

§ 04 最初の一歩

初めての方は、Part 1 の第 1 章から始めてみましょう。Linux のターミナルを開いて、ファイルを操作するところからです。

Part 1 第 1 章へ進む →