はじめに
このシリーズでは、文系出身未経験入社の開発エンジニア2年目の自分が、
なんとなく分からずにモヤモヤしていた知識や疑問をざっくりと解説していきます。
ざっくりとなので、多少正確性を欠くことがありますが、もし誤った記載がありましたらご指摘いただけますと幸いです。
「サーバー」と聞いてピンとくる?
あなたは「サーバー」と聞いて、何を指しているのかピンときますか?
おそらく初心者エンジニアの方の多くは
「何回も聞いたことあるけど、なんかよく分からないんだよなぁ」
という印象だと思います。
「サーバーとは、何らかのサービスを提供するコンピューターのことです」
という説明もよく聞きますが、やっぱりピンと来ませんよね。
「サーバー」とは?
サーバーとは、
「コンピュータが、特定の役割を担った状態」
のことを指します。
「サーバー」には、以下のような種類があります。
- Webサーバー
- アプリサーバー(APサーバー)
- DBサーバー
- メールサーバー
などなど。
あなたのパソコンも「サーバー」になれる
あなたのパソコンにWebサーバーの役割の担うためのソフトウェア(Apacheなど)をインストールして実行すれば、
あなたのパソコンはWebサーバーになります。
同様に、もしあなたが画面上に"Hello World!"と表示させるだけのシンプルなアプリケーションを作成して実行すれば、
あなたのパソコンはアプリサーバーになります。
さらに、↑の2つを同時に実行すれば、
あなたのパソコンはWebサーバーでありアプリサーバーであるというわけです。
もしあなたが入社時の研修やインターン等で
LAMP環境(Linux,Apache,MySQL,PHP)を構築したことがあるのなら、
そのパソコンはwebサーバーでありDBサーバーでありアプリサーバーです。
「サーバー=物理的なコンピュータ1台」?
「サーバー=物理的なコンピュータ1台」というようなイメージがあるかもしれませんが、
当然ながら実際は、1台のコンピュータに複数の役割を持たせることも可能です。
そのため、必ずしも「サーバー=物理的なコンピュータ1台」とは限りません。
ただ、本番環境や本番環境を模して作られた検証環境は、沢山のユーザーがそのシステムを利用する想定で作られているため、
処理の負荷を分散させたり、役割一つ一つの責務をはっきりさせるために、
「このコンピュータはこの役割専用!」と決めてしまうことが多いです(「サーバー=物理的なコンピュータ1台」というようなイメージがあるのはこれが原因かもしれませんね)。
1台に沢山の役割を持たせた方がいい?
1台のコンピュータに沢山の役割を任せちゃえばいいじゃん!と思うかもしれませんが、これは目的によります。
例えばですが、
実装作業中:
性能面は置いておいて、とりあえず1台のパソコンで、
実際にユーザーが利用したときの一連の流れを検証しながら開発したい!
→この場合、1台のコンピュータに複数の役割を持たせた方が検証しやすい。
本番運用:
同時アクセスに耐えれて、重たい処理もできるだけ早く処理できるようにしたい!
何かエラーが起きたときは、すぐに原因を特定して復旧できるようにしたい!
→この場合、複数のコンピュータにそれぞれに1つずつ役割を与えて、
処理を分散させて性能を高めたり、
責務を分散させてエラー原因の特定や復旧作業がスムーズにできた方がよい。
というように、どちらが良いのかは目的によって異なります。
おわりに
体感ですが、IT業界で当たり前のように使われている用語や概念って、
なにを指しているのか曖昧だったり、分かりづらかったりすることが多い気がします。
特に未経験で入社すると、「これってどういう意味なんだろう?」と思って調べてみても、結局曖昧な理解のままになってしまい、
上司の指示がちゃんと理解できずに怒られ、結果としてITエンジニアという仕事に苦手意識を持ってしまう...というようなことも少なくないのではないでしょうか?
この記事が、そんな悩みを抱えている方の一助になることができれば幸いです。