サーバーってなんなのか改めて考えてみた


はじめに

私もエンジニアの端くれとして社会人になって間もなく丸一年が経過しようとしています(とてもペーペーですが)
いろいろ書きたい記事があって温めてはいるんですが、

そもそも僕らエンジニアが扱ってる"サーバー"って一体何なの?

あんまり考えたこと、ありませんでした・・・。
というわけで、備忘録までに。

サーバーって何よ?

1. 語源

英語のServer(serveする人/もの)に由来する。
→ Serveとは... 尽くす/(任務などを)務める/(人に)役立つ/(食物などを)提供する/サーブする/(人に)仕える etc...
(スーパーアンカー英和辞典 学習研究社より)

つまり社ちk・・・じゃなくてサーバーとは(相手に対して)何らかの商品を提供して役に立つ存在のことを指す。ということです。

2. 相手との関係性

語源からしてサーバーには相手が必要です。
じゃあその相手って何よというと、"顧客(クライアント)"という言葉がそれに当たります。よく聞く言葉ですね。
サーバー・クライアント型のネットワークがまさにそれの象徴ともいえる形と言えます。

一般には、サーバーがクライアントに提供する商品のことを"サービス"と呼びます。

サーバーは何を提供するのか

ひとえにサーバーと言っても、世の中本当に様々な種類があります。そもそもサーバーとして稼働しているのが見えるのって、一般ユーザー的には外部公開用セグメントにいるWebサーバーや普段自分たちが利用しているメールで使う送受信サーバーくらいですよね、実際。
代表的なサーバーの種類について、軽くではありますがまとめてみます。

1.Webサーバー

Webシステム上において、クライアント側のWebブラウザーが要求するリクエストに対して、自身の持つデータを提供するサーバーのことです。
ブラウザーがリクエストするものということなので、基本的にはHTTP(HyperText Transfer Protocol)プロトコルを中心としたHTML(HyperText Markup Language)ファイルなどを扱います。基本的にはサーバーマシン(またはPC)に対して、サーバーソフトウェアと呼ばれるミドルウェアを導入することで実装が可能です。
主なサーバーソフトウェアとしては、Apache, nginx, h2o, IIS(Windows)などがあります。

2.メールサーバー

クライアントに対してメールの送受信サービスを提供するサーバーのことです。
とくに、自身のネットワーク宛に送られたメールを保管して適切なユーザーに対してメールを渡すサーバーを受信メールサーバーといい、
自ネットワーク内のユーザーから他ネットワークへメールを送り届けるサーバーのことを送信メールサーバーといいます。
受信サーバーではIMAPやPOP3、送信サーバーではSMTPと呼ばれるプロトコルを使ってメールの送受信を行います。こちらも、サーバーソフトウェアを導入することで実装できます。
主なメールサーバーのソフトウェアにはPostfixやDovecotなどがあります。

3. データベースサーバー

データベース内に顧客情報などを管理し、必要に合わせて情報を保存・上書き・引き出すためのサーバーです。
規模の比較的大きいウェブサイトやアプリケーションにおいては必須の存在で、顧客のデーターが多ければ多いほどこのサーバーが運用上の体感速度に影響を与えるとも言えます。
顧客情報を直接管理するという関係上、普段は社内ネットワークや外部から直接閲覧できないセグメントに置かれていますが、Webサーバーなどのリクエストに合わせて情報をやりとりすることがあります。
一般にはSQL(MySQL, PostgreSQLなど)を導入することが多いです。

4. DNSサーバー

名のとおり、DNS(Domain Name System)サービスを提供するためのサーバーです。
今回DNSについて詳しくは書きませんが、外部用のDNSサーバーと内部のみで利用するタイプがあります。
外部DNSはインターネットにアクセスする際の名前解決を担ってくれるサーバー、内部DNSは内部でのやりとりを円滑に進めるためのサーバーです。
よく知られたDNSサーバーのソフトウェアにはBINDなどがあります。

5. アプリケーションサーバー

俗にWebアプリケーションサーバのことを指す用語ですが・・・。
クライアントからの要求に対し、データベース等から必要なデータを取り出して提供するための、橋渡しをしてくれるサーバーを指します。
ウェブサイトでマークアップ言語(HTMLなどブラウザが解釈できるもの)以外に何らかのプログラミング言語によって作成されたコンテンツがある場合、クライアント側に対してその実行環境を提供したり、従来クライアント側で対応しなければならなかった面倒な制御を一挙に行ったりしてくれます。
流れとしては以下のようなイメージ
クライアント <---> Webサーバー - アプリサーバー <---> DBサーバー
代表的なアプリケーションサーバーソフトウェアには(といってもプログラミング言語自体大量にありますけど)JavaのTomcatやRuby on RailsのUnicornなどがあります。

まとめ

今回挙げた5つ以外にも、ProxyやVPNなど、みなさんが利用するネットワークのあらゆるコンテンツにはかならず提供者(サーバー)が存在します。
運用フェーズに携わる人間としては24時間365日稼働(メンテ等除く)というのがどれだけ維持に工数かかってるかというのは本当に考えるのが辛いですが、世の中には、以上のような、いろいろなサービスを提供してくれる人やサーバーたちがいるんだなあと再認識することができればいいかなと思っています。
内容についてご指摘・修正点等あればご教示をお願い致します。ただし○○ちゃんが入ってない!などはきりがないのでお控えください・・・。