序1-2.サーバの種類
サーバはサービスを提供するために、様々なアプリケーションやミドルウェアを動作させます。
サーバはサービスを提供するために、様々なアプリケーションやミドルウェアを動作させます。
OS(基本ソフトウェア)はファイル管理やメモリ管理など基本的・汎用的な機能を扱います。一方で、アプリケーション(応用ソフトウェア)は業務遂行など特定用途に特化したもので、OSの基本機能だけでは動作が難しいものもあります。この時、あらかじめアプリケーションの動作に必要な追加機能などをパッケージ化したものがミドルウェアであり、ミドルウェアをインストールすることでアプリケーションの動作が最適化されたり、そもそもミドルウェアがなければ充分にアプリケーションを動かすことすら不可能だったりします。サーバOS上にアプリケーションの実体(プログラムのコード)を置き、それを実行するためにミドルウェアをインストールするという流れです。
ファームウェアはハードウェア(具体的にはROM)上に組み込まれたハードウェア制御用のソフトウェアです。ファームウェアの一種として、BIOSやUEFIがあります。BIOSやUEFIはハードウェアに組み込まれているため、コンピュータが組み立てられればアクセスすることができ、システム設定や電源設定、OSの起動方法やどのメディアからOSを読み込むか(HDD/SSDやDVD、USBなどの外部メモリなどを指定できます)など、コンピュータやOSの動作に関わる設定を行えます。PCにOSをインストールするときにも、この画面を利用します。
なお、BIOSはややレガシーであり、現在はUEFIが主流です。ファームウェアはBIOSやUEFIだけでなく、PCパーツごとに存在していたりもします。
▲ UEFI画面の例
さまざまなソフトウェアがサーバOS上で動作していることがわかりますが、ここではミドルウェアに注目します。
サーバOSは、それ単体では本当にコンピュータとして最低限のことしか出来ません。アプリケーションを開発しても、OSの機能だけでは満足に動かすことが出来ません。そこでミドルウェアをインストールするわけですが、つまり、いわばミドルウェアがそのサーバマシンの機能・用途・方向性を決定づけるといえるわけです。
インストールされているミドルウェアによって、サーバはWebサーバ、メールサーバ、アプリケーションサーバなど機能ごとに分類されていきます。
ここで、様々なサーバの種類を見ていきましょう。
クライアントの利用しているWebブラウザからのリクエストを受けて、Webページをレスポンスします。提供しているコンテンツには静的なものと動的なものがあります。HTMLで組まれた一般的なWebサイトは静的なコンテンツであり、「誰が見ても」「いつ見ても」同じWebページです。
見る人や、時間などの状況によって表示される内容が変わるような動的コンテンツを提供するためにはアプリケーションサーバなどと連携する必要があります
(1台のサーバがWebサーバとアプリケーションサーバを兼ねる例も多いです)。動的ページの例としては、ECサイトなどが挙げられます。買い物履歴などにより、人によっておすすめされる商品が変わったりするのをイメージしてもらうとわかりやすいと思います。
Webサーバを構築する際に利用するミドルウェアの代表的なものとして、Apache WebServer、NGINX、LiteSpeedなどが該当します。
アプリケーションが動作するためのコードなどを配置し、アプリケーションが動作するためのミドルウェアが動作するサーバです。Webアプリケーションであれば下図のように、Webサーバと連携しアプリケーションを呼び出しますが、主要なWebミドルウェアはアプリケーションサーバの機能を備えているものがほとんどで、逆にアプリケーションミドルウェアがWebサーバ機能を備えているものも多いです。(Webサーバとアプリケーションサーバは同一筐体で動くことが多い)
アプリケーションサーバで利用するミドルウェアとして、Tomcat(Java)、Unicorn(Ruby)、Gunicorn(Python)があります。PHPは専用のミドルウェアはありませんが、デフォルトでApacheやNGINXで動作させることが可能です。
DB(データベース)サーバはアプリケーションなどが保持するデータを格納するためのサーバです。例えば一般的なID/パスワードでログインするアプリケーションで考えても、User1の持ってるデータはこれ、生年月日などの情報はこれ、スケジュールの情報はこれ・・・というように1人のユーザーに多くのデータが紐付いています。これらはデータベースによって管理されます。スプレッドシートやExcelで表を作るイメージを考えてもらうのが分かりやすいと思います。
Webサーバがアプリケーションを呼び出し、アプリケーションサーバがデータを呼び出し・・・と連携していきます。この構成はWeb3層構造と呼ばれ、Webアプリケーションのアーキテクチャとして最も基本的、汎用的なモデルとなります。また、3層構造の中でもLinux上にApache、MySQL、PHPを動作させたものはこれらの頭文字を取ってLAMP環境と呼ばれます。サーバの学習を始めるにあたって、まずはこのLAMP環境の構築を目標としてみるのがいいでしょう。
DBサーバで動作するミドルウェアとしてはMySQL、MariaDB、PostgreSQL、MongoDBなどが挙げられます。これらの殆どはリレーショナルデータベース(RDB)と呼ばれるものです。上述したような、スプレッドシートなどで作れるような表を、大規模に、様々な機能で構築出来るもので、SQL言語を使用して構築します。RDBではデータの一貫性や信頼性が高くなりますが処理に時間がかかってしまいビッグデータへの対応が難しいことから、クラウドコンピューティングの分野ではNoSQLが広く使われています。NoSQLはJSONやXMLのようなデータ形式を利用したキーバリュー型で情報を格納します。
世界中のWebサーバは、インターネットを経由してアクセスする以上、IPアドレスが設定されており、ユーザーはIPアドレスを指定してWebサーバにリクエストを送信します。しかしながら、インターネット上のWebリソースへのアクセスは殆どの場合URI(Uniform Resource Identifier)もしくはURL(Uniform Resource Locator)を宛先としてアクセスします。各Webサーバは確かにIPアドレスを持っていますが、IPアドレスのような数値だと人間が入力・記憶するのが難しくなるので、わかりやすいように英数字文字列を使った名称(URL)を用意しています。そして、このURLとIPアドレスの紐付けを行っているのがDNSサーバとよく表現されます。
https://www.srv-preparation.com/home/index.html
↕
https://198.51.100.1/home/index.html
上記ではIPアドレス198.51.100.1を持つWebサーバ上の、/home/index.htmlというリソースにアクセスしています。「www.srv-preparation.com」の部分はWebサーバのホスト名とドメイン名を組み合わせたものでFQDN(Fully Qualified Domain Name)と呼ばれ、ネットワークの中でホストを特定されるために使われるものです。
よって、より技術的に正確に言うのであればFQDNとIPアドレスの紐付けを行うのがDNSサーバ、ということになります。
DNSの流れについて、まず噛み砕いたものを図示しておきましょう。
「太郎」「次郎」「三郎」がサーバのホスト名にあたります。
「山田」がドメイン名にあたります。
「山田 太郎」「山田 次郎」「山田 三郎」がFQDNにあたります。
「それぞれの住所」がそれぞれのIPアドレスにあたります。
「四郎」がクライアントです。
「住所録」がDNSサーバです。
もちろん、住所を最初から知っていればわざわざ住所録を見ずとも次郎に会いにいくことができます。次郎の居場所を探してくれるのがDNSサーバです。
上記を踏まえて、サーバに置き換えてみます。
見比べてみれば、よりわかりやすくなるかと思います。このDNSの仕組みにより、WebサーバのIPアドレスを知らずとも、URLの指定のみでWebサーバまでアクセスすることができているわけです。なお、ドメイン名は一意なものになるので、基本的にFQDNにおける「同姓同名」はありえません。
このため、クライアントのデバイスがインターネットに接続するためには「どのDNSサーバに情報を見に行くか」(参照DNSサーバ)を指定する必要があります。
一般的にはプロバイダが提供しているローカルDNSサーバや、事業者が提供している公開DNSサーバを参照します(Googleが提供しているIPアドレス 8.8.8.8 の公開DNSサーバが有名です)。
DNSサーバを構築するためのミドルウェアとしてはBINDが有名です。
主要なものを紹介してきましたが、その他にも用途ごとに様々なサーバが存在しています。(カッコ内は対応するミドルウェアです)
DHCPサーバ:クライアントにIPアドレス、サブネットマスク、デフォルトゲートウェイなどのIPパラメータを配布する。(DHCPd)
メールサーバ:メールの送受信・保管などを行う。(Postfix,Dovecot)
ファイルサーバ:ネットワーク内のクライアントが共有でファイルを格納しておけるサーバ。(Samba)
認証(AAA)サーバ:ユーザID/パスワードの一元管理が可能。(FreeRadius)
次に、これらが動作するサーバの分類について触れておきます。