そもそもサーバって何なの?とかいう抽象的なお話
SEとかインフラとかプログラマーとか、IT企業のバイトとか。仕事についている人であれば常識であるサーバのお話。
そもそもサービスが「何を使っていて」「どのような仕組みで」提供されているのか。大学の情報系講義を受け優秀な成績を取っている人でも、実際に仕事についたり何かプロジェクトを作ろうとでもしない限りはなかなかに掴めません。
実際に、情報系の学部で成績"だけは"優秀である僕も、自分からプロジェクトに携わるまではそもそもサーバが何なのかすら知りませんでした。
「そもそもサーバって何なの?どこにあるの?」
「サーバとデータベースってどうやって連携するの?2つは同じ端末内にあるものなの?」
「一般的なアプリとかサービスってどんなサーバの仕組みを使っているの?」
「Webサーバって何なの?そもそもhttpって?」
今となっては馬鹿げた疑問なわけですが、当時は本気で知らなかったし、調べても欲しい情報は見つかりませんでした。
そこでこの記事では、僕が少し前まで「はまっていた」事柄について整理してみることにします。まずは「そもそもサーバって何なの?」というお話について。
サーバって何なの?
すごく、抽象的です...(震え声)
クライアントサーバ方式、という単語自体はいろいろな場面で使われます。大学の講義なんかでも通信の分野で嫌という程この単語を耳にしてきました。
「クライアント(利用者)が、サーバに物事を頼んで(データを送信、データ処理を頼む)その結果をクライアントに返す」
というものがクライアントサーバ方式というものです。ここまでは教科書だかWikipediaだかに書いてあるでしょう。
「じゃあどうやって実装するねん!!!」
そうなんです。実装の話となると全く触れられていない文献が大変多い。概念の仕組みだけやけに詳しくあーだこーだ書いてくれるのに、肝心の具体的実装例がカバーされていなくて、そこで詰まるんです。
これってクライアントサーバ方式の例だけに限らず、よくある学術的論文なんかでもみられます。実装コードを見せたくないからだと思うのですが、そのせいでイマイチ頭に入ってこないんですよね。コードがオープンソースで提示されているものもあることにはありますが、だいたいそういうものは大手のプロジェクトで莫大なソース量となっており、素人の参考にはなりません。
「さあ困った。」
まあ最終的には仕事に就くとか、そのことに詳しい人経由で知ることにはなるのでしょうが、なんだか釈然としませんね。ちなみに自分も、大学の先輩経由で色々と知識を提供していただき、やっと理解をしました。
ちょっと話が逸れちゃいましたね。話を戻します。
サーバと言ってもいくつか種類があります。
例えば
・Webサーバ
・ファイルサーバ
・メールサーバ
・FTPサーバ
などなど、一概にサーバと言っても色々あることに注意が必要です。
例えばメールサーバはその名の通り、メールのやり取りをするために使用されるサーバですね。ファイルサーバもその名の通り、ファイルを保存したりダウンロードしたりするのに使用されるサーバです。
この中でも
「Webサーバ」
アプリ開発をしたり、お仕事をしていく上で「サーバ」と言われたら、圧倒的にこれを指すことが多いです。このネット世界で上層部を占めているものは"Webサーバ"で間違い無いです。
とは言っても、そもそもサーバの種類分けというのも実は曖昧です。あるサーバでは
「Webサーバであり、アプリケーションサーバの役割もこなす」
とか、
「Webサーバ・アプリケーションサーバ・さらにはデータベースサーバでもある」
とか厳密に種類分けをしようとすると訳わかめ状態に陥るので注意です。
完璧主義者には辛いでしょうが、この世界はこういうことが多いのです。
では、どのようにしてサーバの種類が決まっていくのでしょうか。それは利用者が0から自由に決めることができます。
例えば、AWSなんかでサーバをレンタルしたとします。もしくは自分のいらないマシンをサーバにする、といったケースでもいいですね。
Webサーバとして使いたければ、Webサーバとなるために必要なソフトウェアをインストールするだけでWebサーバとなります。「Apache」とかが有名ですね。
そこにデータベースの機能も入れたければ、データベースを使用するためのソフトウェアをインストールすればデータベースが利用できるようになります。「MySQL」とかね。
こんな感じで、サーバの話って理解すればすごく簡単で単純なんです。なのにイマイチイメージが掴みづらくて「よくわからない」状況になっちゃうんです。
ここで一つ例を出しましょう。よくあるような「初心者でも簡単に作れるホームページ用レンタルサーバ!!」みたいなサービス。小中学生でも簡単に使えたりするのですが、ここで指すサーバとは
「既に必要なソフトがインストール済みであり、細かい設定もされているようなWebサーバ」のことです。ファイルをアップし、そのまま表示させることもできることから
「ファイルサーバ」でもありますね。しかしながらそのサーバを使ってメールシステムを作ることは難しいですし、データベースを使うことも難しいはずです。これが俗に言う「制限」です。
なんだか話がごちゃごちゃしてしまいました。
この記事の結論ですが、「サーバって何なの?」という質問に対する僕なりの回答は
「ネット使って通信して、データを受け取って処理して返すもの。そのほとんどはWebサーバと言われるものではあるが、サーバの種類は曖昧だからそれほど意識しなくて良い」
とさせていただきます。
次回はそんな、Webサーバに対する誤解のあれこれを取り上げよーかなと思います!
ではでは。
※記事に対する意見が何かあれば、遠慮なくコメントくださいね♪