派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

ゆるく学ぶサーバー入門~イマイチわかりづらいサーバーの基礎を解説:サーバーとは何者なのか?

AWSについて教えてください!と、書籍『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』の著者・小笠原種高さんに連絡を取ったところ、「サーバーの基礎知識を押さえておくと、AWSがよく理解できる」ということで始まったのが本連載。基礎についてゆるく、そして、最新の技術とどのように付き合っていけば良いのかを鋭くご紹介いただきます。初回のお題は、「サーバーとは何か」。こういう仕組みだったのか!と、スッキリするかも?!

春からはじまる新連載「AWS文明開化〜イマイチ掴めないクラウドの正体とメリットを解説〜」も合わせてお楽しみください。

【筆者】小笠原種高さん(ニャゴロウ先生)
技術ライター、イラストレーター。システム開発のかたわら、雑誌や書籍などで、データベースやサーバ、マネジメントについて執筆。図を多く用いた易しい解説に定評がある。主な著書に『なぜ?がわかるデータベース』(翔泳社)、『これからはじめる MySQL入門』『図解即戦力 Amazon Web Serviceのしくみと技術がこれ1冊でしっかりわかる教科書』(技術評論社)がある。

ニャゴロウ先生のつぶやき
ネコも杓子も、AWS!Docker!と喧しい(かまびすしい) 昨今ですね。 どちらも便利な技術なので、ベテランも若手も、身につけたい気持ちはわかるのですが、これらを学ぶのにベースとなるはずの「サーバーの知識」を増やそうという機運が盛り上がっているようには見えません。細かいことを意識しなくても使える技術であるという証左でもあるのでしょうが、サーバーの基礎が分からないことには、いずれ、壁に打ち当たってしまうことは間違いないですし、AWS や Docker が難しいと言われるポイントのほとんどがサーバーの基礎やネットワークの基礎が分かっていないことに起因しています。この連載の初回では、「サーバーとは何か」について解説します。

サーバーとはサービスを提供するもの

そもそも、「サーバー」とは何でしょう。皆さんが、IT企業に勤めているのであれば、なじみのある言葉であるはずですが、意外ときちんと明確に説明できる人は少ないかもしれません。なぜなら、開発現場での「サーバー」には、二通りの意味があるにも関わらず、混同して使われる言葉だからです。

サーバーとは、「Server」の名のとおり、「何かサービス(Service)を提供(Serve)するもの」を指します。そして、この言葉は、「何かの機能を提供するもの」という役割の名前であり、その機能を提供する物理的なマシンの名前でもあります。

機能としてのサーバーと、物理的なマシンとしてのサーバー

いわゆる「今日は、ウェブサーバーのメンテです」「メルサバ(メールサーバー)が死んだ!」と会話で出てきたときの「サーバー」は、機能(役割)としてのサーバーを指しています。

「○○サーバー」というのは、「○○機能を提供する」という意味なので、「ウェブサーバー」ならば、「ウェブ機能を提供するサーバー」という意味ですし、「メールサーバー」なら、「メール機能を提供するサーバー」という意味です。他に、データベースサーバーや、ファイルサーバーなどもありますが、同じです。ですから「ビールサーバー」はビールを提供するものですし、「にゃんこサーバー」なら、「にゃんこ機能を提供する」という意味になります。

(出典)『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』 p.54

一方、「ちょっと部屋の模様替えをするから、そのサーバー動かすよ」だとか、「この間、社長がサーバーにささっていたLANケーブルを引っこ抜いちゃってさ」と言ったときは、物理的なマシンとしてのサーバーです。

この二つは、現場で、あまり区別されずに使われています。

「わざわざ区別しなくても、サーバーはサーバーでしょ」と思われるかもしれませんね。なぜこのような話をするかといえば、従来はあまり意識しなくても良かった違いですが、AWSやDockerが使われるようになった現在では、「機能と物理的なものは、必ずしも一心同体ではない」ことを念頭にサーバー設計をしないと、本質を掴み損ねることになりかねないからです。

 

機能としてのサーバーは、ソフトウェアで提供される

「機能としてのサーバー」は、その機能のソフトウェアで提供されます。

例えば、Webサーバーを作りたいならば、Apacheのようなウェブサーバー用ソフトを入れますし、メールサーバーを作りたいなら、Postfixのようなメールサーバー用ソフトをマシンに入れます。

「○○機能用」ソフトを入れれば、そのパソコンは○○サーバーになるのです。つまり、「にゃんこサーバーを作ること」は、「○○用ソフトを入れて、その機能を持たせること」と同義だと考えて良いでしょう。

サーバー用のマシンというと、なんだか特別なもののような感じがするかもしれませんが、その正体は普通のパソコンと変わりません。もちろん、スペックや求められるものは違いますが、基本的な仕組みは同じです。普段使っているパソコンと同じようにOSが動いており、その上でソフトウェアが動きます。

つまるところ、サーバー機能とは、ただのソフトウェアに過ぎないので、一つのパソコンにWordとExcelを入れるように、一つの物理的なマシンに複数のサーバーを同居させることができます。

 

代表的なサーバーとその動き

サーバーとは、「サービスを提供するもの」であるのに対し、サービスを受ける側のコンピューターを「クライアント(client)」といいます。普段使っているパソコンや、スマートフォンなどがこれにあたります。

多くのサーバーは、サーバーの機能を使うのに、クライアントからアクセスして使用します。

今回は4種類のサーバーを例に、どのような動きをしているのか見ていきましょう。

ウェブサーバー

ウェブサーバーは、ウェブ機能を提供するサーバーです。「ウェブ機能」という言葉が若干曖昧な感じもしますが、要はウェブサイトやウェブページを提供するサーバーです。

サーバーには、HTMLファイルや、画像ファイル、プログラムファイルなどのコンテンツが置かれており、クライアントがアクセスしてくると、要求に応じてファイルを渡します。

これらのファイルはバラバラに存在し、クライアント側のウェブブラウザーが組み立てて表示します。

ポイントは、「ウェブサーバーは、要求に応じてファイルを渡すだけ」という点です。

代表的なソフトウェア:Apache、Nginx、IIS

(出典)『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』 p.67

メールサーバー

メールサーバーの仕組みは、やや複雑です。

まず、メールの送受信は「SMTPサーバー」が担当します。すこし詳しい方は、「SMTPって、送信するサーバーであって、受信はPOP3じゃないの?」と思われるかもしれませんが、それは正確ではありません。

・メールを送信する場合

送信する場合は、まず、メールソフトに設定しているSMTPサーバーに送られます。このSMTPサーバーは、自分や会社のプロバイダーです。SMTPサーバーは、メールを受け取ると、キューに貯めたのちに、宛先にあたる相手プロバイダーのサーバにメールを転送します。相手プロバイダーが誰であるかは、メールアドレスの「@」より後ろの部分(ドメイン)で判別します。

メールが送られてきた相手プロバイダーは、メールアドレスのユーザー名の部分を確認し、そのユーザーのメールボックス(サーバー上の、そのユーザー専用のディスク領域)に保存します。ここまでがメールの送信操作です。

・メールを受信する場合

受信する場合、ユーザーは、サーバーに接続して、このメールボックスを読み出します。メールは、「受信」という言葉からも、なんとなく勝手に送られてくるイメージがあるかもしれませんが、そんなことはありません。自分から取りにいっているんですね。SMSはまた仕組みが違いますが、おおまかには、このような流れです。

メールボックスの読み出しには、SMTPではなく、POP3やIMAP4などのプロトコルが使われます。POP3はダウンロードして読み出すもの、IMAP4はサーバーに置いたまま操作するものです。

代表的なソフトウェア:Postfix、Sendmail、Dovecot

(出典)「空飛ぶエンジニア用語図鑑」より

データベースサーバー

データベースサーバーは、データベース機能を提供するサーバーです。

データベースとは、特定の基準で集められたデータのカタマリのことです。

ただのカタマリなので、それ自体では何もできません。倉庫のダンボールみたいなもので、自分では動けませんし、ダンボールの中身も取り出せません。そこで、誰かがダンボールを運んだり、並び替えたりするわけですが、そのお世話係がいわゆる「データベースソフト(DBMS=データベースマネジメントシステム)」です。

開発現場では、「データベースはMySQLです」などと、「データベース=ソフトウェア」のような言い方をしますが、正確ではありません。MySQLやPostgreSQLは、あくまでDBMSであり、データベースそのものではないのです。DBMSは、SQL(データベースを操作する言語)で書かれた命令に従ってデータベースを操作します。SQLは、人間がサーバーにログインして、直接命令を入力することもありますが、多くは、プログラムに組み込んで命令します。

現代のシステムでは、データベースを使っているものがほとんどであり、プログラムや、ウェブサーバーとセットで、データベースサーバーが使われます。

なお、データベースは、サーバーの形ではなく、個人のパソコン内でのみ使われることもあります。そのようなデータベースとして代表的なのが、Microsoft Office Accessです。

代表的なソフトウェア:MySQL、PostgreSQL、MariaDB、SQL Server、Oracle Database

(出典)『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』 p.201

DNSサーバー

DNSサーバーは、DNS機能を提供するサーバーです。

DNS(Domain Name System)とはドメイン名を解決する仕組みです。ドメイン名とは、URI(URL)のうち、例えば「www.mofukabur.com」の部分のことです。

インターネットの世界では、IPアドレスがサーバーの住所ですから、「このサイトを見たい!」と思った場合、「104.22.58.xxx」のようなIPアドレスを直に打ってアクセスするのが本来の仕組みです。

しかし、これは人間には識別しづらいので、実際には、「http://www.mofukabur.com」のようなドメインが使われています。ドメインは、言わば、住所のニックネームのようなものです。DNSサーバーが、ドメイン名とIPアドレスの紐付けをやっているので、我々はIPアドレスではなく、「http://www.mofukabur.com」でアクセスできるのです。

DNSの仕組みとしては、閲覧者が「www.mofukabur.com」とブラウザーなどに入力すると、まずは、使っているプロバイダのDNSサーバーに問い合わせ、ルートDNSサーバー(世界に13箇所しかない一番上のレベルのDNSサーバー)などを経由して、次々にバケツリレーのようにDNSサーバーを辿り、ドメインに対応するIPアドレスを解明します。この情報によって、閲覧者は、アクセスしたいサーバに辿り着くのです。

実際には、DNSキャッシュ(ドメインとIPアドレスの組み合わせを一時的に保管する仕組み)なども活用されるので、もう少し、スムーズですが、新しくサイトを立ち上げた時などは、このようなことが行われています。

最近では、DNSサーバーを自社で構築する機会が減っていますが、仕組みは知っておくと良いでしょう。

(出典)『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』 p.64

ニャゴロウ先生のまとめ
「サーバーとは何か」 押さえるべきポイントは、ソフトウェアでその機能が実装されているということ。そして、サーバーの種類によって、動きは違うということです。「クライアントからの要求に応える」という点では同じですがが、内部では色々とやっているのです。

次回は、Linuxについて解説していきます。お楽しみに!