前回の記事でWEBを実現するプロトコルたちについて見ていきましたので、実際にWEB3層で用いられるサーバーについて解説していきます。
この記事は「ネットワーク基礎 – WEBページが表示されるまで 」の「5.WEB3層とは」の後半部分の解説記事となります。
WEB3層とは?
WEB3層とは、WEBアプリケーションを提供するのに必要な3種類のサーバーのことを指します。
役割ごとに分けることによって、サーバーの管理やメンテナンスのしやすさを向上させるだけではなく、セキュリティの向上にも役立ちます。
以下では具体的なサーバを一つずつ解説していきます。
WEBサーバー
まず最初にWEBサーバの解説をします。
WEBサーバーはその名の通り、WEBのプロトコル(httpやhttps)を受信し、各サーバーに処理を流したり、場合によっては処理を流さずそのままレスポンスを返したりするサーバーのことです。
WEBサーバーとAPサーバーの名称が曖昧になっていることもありますが、WEBサーバーとAPサーバーのように2つに分けている場合は、WEBサーバー上には実際のアプリケーションは存在しないことが多いです。
WEBサーバーには専用のミドルウェアが必要で、有名なものとしてはapache http serverやnginx、IIS(Internet Infomation Service)、ligthttpdなどがあります。
apacheやnginx、lighttpdはオープンソースのソフトウェアで、最も一般的なのがapache、nginxはapacheが持つC10K問題(クライアントが10K=1万を超える辺りから、構造的に遅延が発生してしまう)を解決すべき生まれたシングルスレッドのWEBサーバーです。
IISはMicrosoftの製品となっていて、Windows上で動作させる必要があるので、OSのライセンス料がかかります。
企業によってはMicrosoftの技術(.NET Frameworkなど)を使ってWEBアプリケーションを組むことも多いので、WEBサーバーのシェアとしては大きいです。
APサーバー
WEBサーバーと混同しやすいのがAPサーバーです。
APサーバーはアプリケーション自体を実行しているサーバーです。リクエストを受け取った際にDBへのアクセスが必要だったり、データを加工したり、間違っていないかを確認するなどの処理を行います。
APサーバーには実行環境をインストールする必要があることがあります。
Javaで書かれたアプリケーションならばJVMという実行環境を備えたAPサーバー(tomcatやWebLogicなど)が必要になり、Rubyで書かれたアプリケーションならばPumaが必要になります。
WEBサーバーとAPサーバーを分ける理由
また、これらの環境ですが実際はWEBサーバーがなくても単体でhttpのリクエストを受けることができます。
ですので、場合によってはWEBサーバーを介さずにAPサーバーが直接クライアントからのリクエストを受ける構成を取ることも可能です。
理由としては一つは「NWを分割して役割を分ける(DMZ)」で解説しますが、セキュリティの向上を狙うものです。
WEBサーバーをDMZに配置し、APサーバーは内部NWに配置することによって、APサーバーに不正なアクセスが来るのを防ぎやすくなります。
また1つのサーバーに複数の役割をもたせることで、それだけ脆弱性を生みやすいということになりますので、それだけ管理も大変になってしまいます。
もう一つの理由としては、スケールアウトのしやすさです。
WEBサーバーとAPサーバー自体は本来役割が違うので、使用するサーバーリソースも異なります。
WEBサーバーは主にリクエストをさばくのが仕事であるのに対して、APサーバーはプログラムの処理を行うのが仕事です。
WEBサーバーをできるだけ軽量に作り、APサーバーにはCPUやメモリを多めに割当て上げるほうが効率的にリソースを使用できるはずです。(※もちろんアプリケーションの作りによってその配分は様々です。)
AutoScalingなどの機能を用いて、リクエストが増えた際にはWEBサーバーをスケールアウトし、CPU使用率が増えた場合はAPサーバーをスケールアウトしたほうが、効率的な運用ができるというわけです。
DBサーバー
WEBサーバーとAPサーバーがhttpのリクエストを受けてプログラムを動作させる役割だったのに対して、 DBサーバーは実際にデータを保管しておくサーバーです。
DBといっても種類がいくつかあって近年はKey-Value型のデータベースであるNoSQLも流行していますが、テーブル同士に関連をもたせてデータを管理する、RDB(Relational Database)が今でも主流となっています。
RDBを管理するソフトウェアという意味でRDBMS(Relational Database Management System)と言いますが、代表なRDBMSとしてOracle、MySQL、PostgreSQL、MariaDB、Microsoft SQL Server、DB2などがあります。
その他のサーバ
基本的なWEB3層のサーバーは以上ですが、WEB3層システムを実現する際には他にもいくつかよく登場するサーバーがあります。
NWを分割して役割を分ける(DMZ)
APサーバーの章で少し解説しましたが、外部からの通信を直接受け付けるサーバーたちをまとめて別のネットワークに所属させておき、他のAPサーバーやDBサーバーや管理系のサーバーと分けて管理することがあります。
このときの外部から通信を受け付けるネットワークのことをDMZ(DeMilitarized Zone)と呼びます。日本語では非武装地帯です。
DMZとその他のサーバーを分けることでセキュリティの管理がしやすくなり、外からの侵入に備えやすくなります。
ProxyサーバとReversProxyサーバ
DMZにはWEB3層の中ではWEBサーバーが配置されますが、その他のサーバーとしてProxyサーバーやReverseProxyサーバーが配置されることもあります。
Proxyサーバーとは、どこかに通信を行う際に、代理で通信を行うサーバーのことで、主に企業内ネットワークからインターネットへ出るときの中継地点に配置して、フィルタリングをかけたり、不正な侵入を防ぐ目的があります。
またWEBアプリケーションで外部通信が必要になる場合(別システムのサーバーへのアクセスが必要になる場合や、外部APIの利用が必要になる場合)にAPサーバーが外へ出ていく踏み台として用いられたりもします。
対してReverseProxyは代理で通信を受け付ける役割を持ちます。
外部からの通信を受け付けて、処理を別のサーバーへ振り分けたりすることができます。
Apacheではモジュールを追加することでReverseProxyの機能をもたせることができるので、WEBサーバーと兼用となっていることもあります。
LoadBalancer
Load Balancerは処理を振り分けるためのサーバーです。LBとも呼びます。オンプレミスでは、オープンソースのソフトウェアとしてHAProxyなどをサーバーにインストールするか、専用のNW機器を購入することで使用することができます。
わかりやすい使い方としては負荷分散のためにWEBサーバーを複数台用意して、LBが受け取ったリクエストを複数のWEBサーバーに振り分けるなどがあります。
他にもWEBサーバーからAPサーバーへの負荷分散のために、間にLBをはさんだり、DBサーバーがクラスタリングなどで複数台構成を採っている場合も、LBで処理を分散させることができます。
LB→WEB/APサーバー→DBサーバー のような構成のことをWEB3層と呼んだりします。
管理サーバ
DMZ以外にも内部で活躍するサーバーがいくつかあります。
例えば各サーバーが正常に役割を果たしているかを監視するためのサーバーであったり、データをバックアップするためのバックアップサーバーであったり、バッチ処理を行う専用のサーバーであったり、役割ごとに分けてサーバーを構成することで、メンテナンスを行いやすくなります。
まとめ
WEB3層サーバーの各サーバーの役割について解説しました。
実際には、上記のような構成とは限らない上に、最近ではサーバーレス構成やDockerを用いたもっと柔軟な構成が登場しています。
サーバーレスやコンテナを用いた構成であっても、基本的な役割の理解はWEB3層のように分けて行うことで、実際の処理が追いやすくなるかと思います。
WEBページが表示されるまでのネットワークの基礎知識についてはこちらの記事でまとめています。
コメント