おれ、エンジニアになるよ。

エンジニア志望の大学生がISUCON7出場を目指す成長日記

「プロになるためのWeb技術入門」を読んで 〜Webシステムの三層構成〜

こんにちは。

「プロになるためのWeb技術入門」シリーズ、今回が最後です。

 

テーマは「Webシステムの三層構成」。

・Webサーバ

・・・女将さん

 

・Appサーバ

・・・職人さん

 

・DBサーバ

・・・素材屋さん

 

こいつらが互いにあんなことやそんなことやこんなことまでしてるんやって。

んで、この3つはシステム開発する上で必ず登場するみたい。

ソフトウェア構成の基本の基本の基本のそのまた基本。

絶対押さえとかなきゃいけないね。

よし、やろう!

 

 

と、サーバの話の前に「ノード」について。

 

 

ノード

 

一つのシステムを動かすために、Webサーバ・クラインアントみたいに複数のコンピュータがあった。

この時、各コンピュータのことを「ノード」って呼ぶらしい。

コンピュータの他に、ハブとかルータもそう。

まぁここはさらっと。

 

 

では「三層構造」。

それぞれを擬人化して説明していく。

 

 

・Webサーバ

まずは女将さんこと「Webサーバ」。

なぜ女将さんかと言うと、こいつが司令塔だから。

クライアントからのリクエストをまず女将さん(Webサーバ)が受け取る。

この女将さんが的確に指示出してあげないと、後に続く職人さん(Appサーバ)や素材屋さん(DBサーバ)が仕事できないってわけ。

どうやらこいつは最強にしないといけなさそうだ。

 

ちなみに「nginx」(nginx - Wikipedia)使う予定。

 

 

・Appサーバ

こいつは職人さん。

女将さん(Webサーバ)から指示を受けてせっせと働くんやな。がんばれ。

 

こいつの役割は、

・セッション管理

・・・セッションIDの発行や管理

 

トランザクション管理

・・・業務上、まとめて確実に実行される一連の処理(トランザクション

ん、なんやそれ....?

 

例えば、ネットで買い物したときのトランザクション

 

・商品在庫を一つ減らす

・クレジットカードの請求処理を行う

 

みたいな。

 

 

・DB接続の管理

・・・DB接続 / 切断

 

DBはドラゴンボールやないで。

データベースや。

情報が表にまとまってるイメージかな。

 

 

職人さんだからもっとやることはいっぱいあるけど代表的なやつをちょこっと紹介。

うん、どうやらこいつも最強に育てなければならないらしい。

 

Ruby使うならUnicorn + Sinatra (またはRuby on Rails)かな。

 

 

 

・DBサーバ

今回初登場の素材屋さんこと「DBサーバ」。

大量の情報を管理してくれる。

CRUD」っていうDBに対する基本操作があって、下の4つがそれ。

 

・生成(Create)

・・・新しい情報をDBに登録する

 

・読み取り(Read)

・・・DBに登録されている情報を読み取る。条件によって合致する情報を抽出する(これが検索処理)

 

・更新(Update)

・・・DBに登録されている情報を更新する。

 

・削除(Delete)

・・・Dbに登録されている情報を削除する。

 

例えば、マサ(以前登場した人物。別の記事でちゃんと紹介しますww)のプロフィールをDBに登録する。

まず、「マサのプロフ」っていう表を用意する。

これが「テーブル」。

 

んで、名前とか誕生日とか身長とか体重とかの各項目があるでしょ。

これが「カラム」。

 

これだとマサの情報だけで一行になっちゃうからアレなんだけどね。

これが「AKB48のメンバー」になると、何行にもなるよね。

この時、一行のまとまった情報に対して「レコード」って言うんや。

 

そしてSQLっていうDB専用言語を使って、必要な情報を取り出すってわけ。

SQLの命令は、

 

・何を

・・・マサの「誕生日」を

 

・どこから

・・・「マサのプロフ」テーブルと「AKB48のメンバー」テーブルから

 

・どのように

・・・誕生日が同じ、という条件で

 

取り出す。

 

ざっとこんな感じ。

これらをAppサーバとDBサーバがSQLを使って情報の受け渡しをしているんや。

 

情報が多くなってくるとこいつも最強にしなければならんな。

 

ちなみに使うとするなら「MySQL」とか「PostgreSQL」かな。

 

 

実際にISUCONで戦うとなると、CPUとメモリから判断してこの3つの内、どいつを最強(チューニング)にしていくかってことになる。

各サーバを1つのノードにまとめて入れるのか、それとも1ノード1サーバにするのか。

それぞれにMAXパフォーマンスを出させてあげて、それでも重くなるようだったらサーバ(ノード)分けてあげるとか。

まぁ色々パターンはあるみたい。

 

一般的な構成としては、WebサーバとAppサーバとDBサーバを1つのサーバ(ノード)にまとめて入れちゃうみたい。

 

ちなみに「オートスケール」っていう、自動でサーバを増やしたり減らしたりすることもできるみたい。

 

「あ、こいつやばいな。サーバ増やして負荷軽くしてやろう」

 

みたいな。

 

 

以上が「Webシステムの三層構成」。

女将さん・職人さん・素材屋さんのどれから最強(チューニング)にしていくのか、作戦会議をしながら進めるみたいです。

 

「プロになるためのWeb技術入門」終わり!!

(ISUCON出場に向けて、本書の全7章のうち5章までを読みました。)

 

 

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか