3章サーバーの世界
サーバーとは
「サーバー」とは役割のこと
アプリのところで「サーバー」というコンピューターが出てきたけど、みんなどんなものだと思う?
見たことないからわかりませーん!
すごく大きいんじゃないかな? ニュースで見たスーパーコンピューターみたいな感じ?
実は構造や大きさはパソコンとそんなに変わらないんだ。というか、パソコンをサーバーにすることも可能だよ
前にSNSなどのサービスは「クライアントアプリ」と「サーバー」からなると説明しました。サーバー(Server)は、サービスを提供するプログラムのことを指します。パソコンやスマホにサーバー用プログラムをインストールすれば、サーバーコンピューターになります。
ただし、多数のクライアントと同時にやりとりする必要がありますから、それらを処理するのに見合った性能は必要です。
サーバー専用コンピューターもある
なんだ、パソコンでもいいんだ
じゃあ、TwitterとかFacebookの社内にはサーバー用のパソコンがたくさん積まれてるの?
それはちょっと違うんだな。パソコンから人間向けの部品を取り除いて消費電力を下げ、故障しにくいようにしたものが使われているぞ
サーバー用プログラムをパソコンにインストールすれば、パソコンもサーバーになるのは事実です。しかし、サーバーに使うコンピューターには、クライアントからのリクエストに常に対応しないといけないので、故障しにくく、安定した性能が求められます。また、サーバー用コンピューターは直接人間が操作しないため、ディスプレイやキーボードなどの人間のための部品が不要です。
そのためサーバー用コンピューターは、「机の引き出しにパソコンの部品を詰め込んだ」ような無骨な形をしており、大きな棚(ラック)に何台も設置して使用します。メモリやハードディスクなどの部品は、パソコンより信頼性が高いものが使われており、その分値段は高めです。
また、コンピューターは高温やホコリなどに弱いため、空調の効いた場所に設置されています。サーバー用コンピューターを置くための場所のことをデータセンターと呼びます。
サーバー用コンピューターはラック全体を見ると大きい。でも、実際は小型のコンピューター(といってもノートパソコンよりは大きい)の集まりなんだ
エアコンが効いた清潔なデータセンターで仕事なんて、人間よりいい身分だね~
まぁ故障したらサービスが止まるから大事にしないとね。データセンターは災害や停電が起きにくい場所に作られているよ。空調の消費電力を抑えるために、北海道に作られたデータセンターもあるんだ
サーバー用OS
サーバー用のプログラムをインストールすればサーバーコンピューターになるから、理屈の上ではどんなコンピューターでもサーバーになれる。プロセッサもOSも問わない
うーん、要するに何でもいいってことだよね?
でも、サーバーによく使われるOSはあるんだ
サーバー用OSは、ルール通りにクライアントに応答できればいいので、WindowsでもmacOSでも何を使ってもかまいません。ただし、Web上のサービスではLinux(リナックス)がよく使われています。LinuxにはWebサービスを作るためのプログラムが数多く用意されており、開発ノウハウも広く共有されているからです。
LinuxはOSの中核部分が書かれたソースコードのみを指し、それにさまざまな周辺プログラムを組み合わせたOSがいくつも作られています。これらのLinuxを中核とした配布物のことを、Linuxディストリビューション(distribution、配布または流通などの意味)と呼びます。
Linuxディストリビューションには、Debian(デビアン)、Ubuntu(ウブントゥ)、CentOS(セントオーエス)、Fedora(フェドラ)などがあります。
何でこんなにいっぱいあるの?
必要なものは人によってさまざまだからね。大まかな区分けではデスクトップ向けとサーバー向けがあり、さらに同梱するツールや、有料サポートの有無とかいろいろな違いがあるんだ
サーバーを動かす
サーバーは遠隔操作する
ところで、ディスプレイもキーボードもないコンピューターってどうやって動かすの?
開発者のパソコンからネットワークを介して遠隔操作で指示を出すんだ。だから近くに人がいる必要はないんだよ
サーバー専用コンピューターは、空調が効き、ホコリなどの故障原因が少ない環境で24時間動き続けています。その中に人間が入っていったら故障の原因になってしまかねません。そういう理由で、サーバー専用コンピューターは、遠くにあるパソコンからネットワーク経由で操作するのが一般的です。
遠隔操作にはSSH(Secure Shell、セキュアシェル)というものが使われる。詳しくは説明しないけど、通信が暗号化されて第三者から盗聴されないようになっているんだ
ふーん、じゃあハッキングとかされないんだね
いやいや、パスワードとか盗まれたらマズイよ。通信自体は強固に守られていても、鍵が盗まれたらダメってことだ
コマンドラインインターフェース
サーバーの遠隔操作について付け加えると、どうやって操作するんだと思う? パソコンではマウス、スマホではタッチで操作するけど、ちょっと違うんだ
何だろ? 音声で操作するとか?
おし……くはないね。一般的には「コマンドラインインターフェース」というものを使うんだよ。文字のコマンドで指示して、文字で結果をもらう
パソコンやスマホは、コンピューターの知識がない一般の人も使えるよう、操作できることを絞り、画面にボタンやアイコンなどを表示して、マウスや指で操作します。画像(グラフィック)を使って操作するので、GUI(グラフィカルユーザインタフェース)と呼びます。
それに対し、サーバーはコンピューターの知識を身に付けた人が操作するものです。なので操作方法も、より細かな操作が可能なCLI(コマンドラインインターフェース)というものになります。CLIでは文字の「コマンド」という命令で指示を出し、その結果も文字で表示されます。例えば、ファイルをコピーしたいときは、キーボードから「cp ファイル名」のように入力します。
何だか覚えるのが大変そうだなぁ。何でマウスで操作できるようにしないの?
GUIで細かな操作を行おうとすると、マウスでたくさん操作することになってかえって効率が悪いんだ。その点、CLIなら細かな操作をコマンド入力時に一度に行うことができたり、複数のコマンドをまとめて実行できたりと効率がいいんだ
シェルとカーネル
OSの中で、中核となる部分をカーネル(Kernel)、それを操作する部分をシェル(Shell)と呼びます。OSを使うユーザがシェルを通してカーネルにアクセスすることで、安全で快適なOS操作を可能としています。もしあなたがサーバー管理者になったら、1日の大部分をシェルと過ごすことになるでしょう。
サーバー管理者はサーバーの状態を監視したり、プログラムの優先度を変えたりとさまざまな作業を行うためにシェルを通してカーネルとやりとりしていきます。これらの操作を効率的に行えるようにするために、シェルにはいくつかのコマンドを組み合わせ複雑な操作を記述して実行する機能があり、記述したものをシェルスクリプトといいます。また、このシェルスクリプトを記述したファイルを作り、管理業務を自動化するシェルプログラミングというテクニックもあります。
ちなみにネットワークを介してサーバーを管理する場合など操作するシェルを、暗号化によって安全(セキュア)にしたSSH(Secure Shell)というのもあります。
サーバーを体験したい
サーバーそのものを体験したいということなら、パソコンにLinuxをインストールしてみるのがいいだろうね
失敗したらパソコン動かなくならない?
失敗したら動かなくなるよ。だから、仮想化ソフトウェアを導入してそこにOSをインストールするのが正解かな
仮想化技術はコンピューターの中に仮想のコンピューターを作る技術です。仮想のコンピューターは本物のコンピューターと同じように動くため、同じようにOSやアプリをインストールできます。VirtualBox(バーチャルボックス)などの仮想化ソフトウェアをパソコンにインストールします。
「仮想化技術」とは、実際のコンピューターと同じ反応をするプログラムを使って、コンピューターの中に違うコンピューターを作る技術だ。仮想のコンピューターだから故障を気にせずいろいろ試せるよ
実際のコンピューターの中の仮想のコンピューター……。現実の私が想像している理想の私みたいな感じだね
仮想化ソフトウェアをインストールしたら、次はLinuxをダウンロードします。Linuxはたくさんの種類があり、それぞれ特性がありますが、主なものとしてUbuntu(ウブントゥ)やCentOS(セントオーエス)が広く使われています。
サーバーアプリを開発するからといって、必ずしもサーバーを自分で構築しなければいけないわけではありません。現在人気のクラウド(5章で解説)では、OSやミドルウェアがインストール済みの環境も用意されています。しかし、トラブル発生時や一歩踏み込んだことをしたいときに、サーバーやOSの知識がないと困ることがあります。一度はOSのインストールから体験してみることをおすすめします。