文系出身システム屋の技術日記

自分がつまづいたテクニカルなこと、役に立ったことをまとめます。

WEBサービスとWEB3層構造について

お前はシステム屋として3年になるのにWEB3層構造すら理解できていないのか!

こんにちは。すっかり久しぶりの投稿となってしまいましたが、
今日はWEBサービスとWEB三層構造について、自分が復習したことを記載してみます。
見出しは、先日上司に言われてしまったなんとも耳の痛いお言葉です。

正論過ぎて何も言えなかったことはお察しいただけることと思います。
3年前に今の会社に入社した際、研修で学んだはずなのですが、
普段の業務に忙殺されるまま、記憶までも「忘殺」されてしまっていたようです。

人に説明できるようになって初めて理解したといえる、なんていうこともよく言われます。
そのために今日はエントリーにしてみようと思ったわけです。

世の中にはWEBアプリケーションが溢れ返っている

何を今さら、と思った方は同業者の方、あるいは多少なりともITリテラシーをお持ちの方でしょう。
ITの知識が全くない方にとっては、スマホやPCがAMAZONで買い物をさせてくれる。
Youtubeやニコ動で動画を見せてくれる。Googleでネットサーフィンさせてくれる。

そんな程度に思っている方がほとんどです。
今やスマホ向けのアプリだって、外部との通信をしていないアプリなんてほとんどありません。
会員向けのサービスにログインする、クラウド上に保存しているデータにアクセスする、
あるいは画面の上下に表示される広告バナーだって、勝手に外部との通信を行って取得しているのです。

つまり、意識しているかどうかにかかわらず、私たちは日常的にWEBアプリケーションを利用しているのです。

開発者は通信の仕組みやWEBアプリケーションの内部的な動きを正しく認識していなければならない

まずは以下の画像を見てください。

f:id:nari104:20160604232537j:plain

WEBアプリケーションはユーザからのリクエスト(要求)から始まります。
このリクエストに対するレスポンス(応答)を返すことが、最終的な目的となります。
この要求や応答はHTTPというプロトコルに基づいて行われます。
プロトコルというのは、ざっくりいうと「やり取りの方法についてのルール」という意味です。

例えばトランプで遊ぶとき、「七並べ」をやるときと「ババ抜き」をやる時ではルールが全く違いますよね。
同じトランプでも何の遊びをするかによってルールが全然違うわけです。

上記の例え話でいうと、

トランプ : インターネット
七並べ  : HTTP

ということになります。あくまで例え話ですので、イメージ的にはそんな感じ、
と捉えてください。

さて。リクエストとレスポンスの話に戻ります。
ユーザ目線での話をすると、ネットサーフィンをしているとき、気になるリンクをクリックすることがあると思います。
このとき、WEBアプリケーションは要求されたリンク先のページを返そうとします。
その要求を返すためにサーバ側でどのような処理が必要で、実際データの流れがどうなっているのか、
システム屋としてはそのあたりのことを認識している必要がある、というのが今回のお話です。

サーバ側は基本的にWEB3層構造で構築される

冒頭の耳が痛い話に戻ります。
結論から言うと、WEB3層構造というのは、

  • WEBサーバ(Apacheが有名)
  • APサーバ (Tomcatが有名)
  • DBサーバ (Oracleが有名)

上記の3つのサーバから構成されるWEBアプリケーションの構成のことである。
ということです。

えー。お前そんなことも知らなかったの?そんな声が聞こえてきそうです。
あえて言おう。

いざ聞かれると咄嗟に答えられないものですよ?(違

ま、まぁ同じことを言われないように、こうしてエントリーを書いているわけです。

とはいえ、そんな当たり前のこと(上司談)をいまさら書いたところで、「うん、そうだね。で?
となること請け合いなので、ここでは3層構造にするメリットについて考えてみます。

3層構造によるメリット

そもそもの疑問です。3層構造以外に、例えば2層構造とか4層構造ってあり得るのだろうか。

これがあり得るんですね。調べました。ハイ。

アプリケーションサーバってなに?Webサーバとの違い | 構築ツールの最新情報や基礎知識 | 知る・学ぶ | Marketing Bank (マーケティングバンク)

こちらのサイトによると、

かつては、全てをWebサーバに処理させていました(2層構成)が、それでは負荷がかかりすぎてしまうため、
Webサーバとアプリケーションサーバの2つに分離することで、大量の処理が可能となりました。

とのこと。TomcatにWebサーバとしての機能も実装されていますからね。
処理速度的な面とセキュリティ的な面で劣るため、現在では3層構造が主流とのこと。

このほかには、メンテナンス性の向上が考えられると思います。
例えば動的ファイルを返す処理に何らかの改修作業が発生したとします。
もし3層構造であれば影響範囲は基本的にAPサーバだけということになります。

ところが、もしこれらが同一のソフトで構成されていた場合、
そのすべてが影響範囲ということになり、保守性がかなり下がってしまいます。

WEBアプリケーションに限らず、最近のシステム設計では機能や役割ごとに
論理的、物理的に切り離した構造にするのが主流です(MVCなどですね)

各サーバのそれぞれの役割

ソフトによって微妙に違いがあったりするわけですが、基本的にはそれぞれ以下のような役割を持っています。

  • WEBサーバ

HTTPリクエストを受け取り、レスポンスを返却する。静的ファイルの受け渡しなども行う。

  • APサーバ

動的な処理が必要になったとき、WEBサーバからの要求で必要な処理を行う。
必要なデータをWEBサーバやDBサーバから取得して処理を行い、結果をWEBサーバに返却する

  • DBサーバ

各種必要なデータを保存する。
WEBサーバやAPサーバからの問い合わせに対して応答する

最後に

こうして書いてみると、本当に基本的なことばかりですね。
でも、いざ人に説明してみようとすると、結構できないものですよ!(;´Д`)