今回のポイント
・サーバーについて理解する
・LAMPという環境を知る
・レンタル・サーバーの知識

 Web+DBシステムの設計や仕様が決定したら,実装という段階に進みます。ここまでが机上作業であったのに対して,実際にプログラムとしての構築やテストが始まるわけです。実装を進めるためには「サーバー」が必要です。今回はWeb+DBシステムを設置するサーバー環境についての基礎知識と,サーバー選択のポイントについてです。

サーバーってどういう機械?

 設計や仕様決定がなされると,案件は「実装」というステップに入ります。ここまで机の上の理論でできてきたシステムを,実際に“動くもの”に作り上げていく作業です。プログラマが仕様書に基づいてコーディングといわれるプログラム作成作業に入ります。実装作業はサーバー上で行われます。

 サーバーと言われても,具体的にどういう機械なのかというイメージは漠然としているかと思います。ハードウエアとしてのサーバーから見てみます。実はサーバーも構造で言うと普通のPC(パソコン)と大差はありません。CPUがあってメモリーがあってハードディスクがあってというコンピュータです。

 ただし一般的なPCと比較したときに,24時間365日稼働しなくてはならないという役割を担うので,全体的に堅牢性の高いパーツを使用しています。サーバーの故障はすなわちシステムの停止であり,これは業務の停止を意味します。しょせんは機械ですから故障は避けられません。だからこそ,できるかぎり故障しないことを主眼に組み立てられているコンピュータといえます。

 運用の頻度や負荷によっては,一般向けPCをサーバーとして利用することもできます。しかし,Web+DBシステムでは,データベースで扱うデータが業務上のクリティカル・データである可能性があり,一般向けPCの使用はお勧めできません。

 サーバーは常時稼働が条件となりますが,故障や障害の対策として次のような付加装置や仕組みが付属します。

・バックアップ・システム
 定期的にハードディスクのバックアップをとり,緊急時には障害からの復旧に使用されます。問題が発生しなければ使用されないものですが,障害は発生するものと考えて絶対に外さないでください。

・無停電装置
 停電や自然災害で電源供給が停止した場合にも数分~数時間システムを稼働させます。電源供給復帰前にバックアップを取ったり,システムをシャットダウンするまで稼働させるために使用されます。誤解されがちですが停電からの復帰まで動作させることが目的ではありません。

・冗長化
 例えばハードディスクを2台用意して,常にミラーリング(複製)しておき,片方のハードディスクに障害が出てもデータの損失を防止するといった事前対策を冗長化といいます。障害を検知した場合は問題のあるハードディスクを外して,新品と差し替えることで常に冗長化されているように維持する必要があります。大規模なシステムではハードディスク単位ではなく,サーバー本体を複数用意して,1台がダウンしても別のサーバーでカバーするといった冗長化が組まれます。

 このほかに,サーバーはWebを介したサービスを提供することになりますのでインターネット接続環境が必要です。ネットワーク環境についてはセキュリティともかかわってきますので,別に機会を設けてセキュリティ解説のときにもう少しつっこんだお話を書いてみたいと思います。

OSとソフトウエア

 ハードウエアとしてはPCと構造的な差が少ないサーバーですが,このハードウエアに導入されるソフトウエア群はサーバー独特の構成になります。代表的な構成が「LAMP」です。LAMPというのはWeb+DBシステムを構築する際の基本ソフトウエア群の頭文字を並べた略語です。それぞれのアルファベットは次のものをさします。

L:Linux=OS
A:Apache=Webサービスを提供するソフト
M:MySQL=データベース・サービスを提供するソフト
P:PHP/Perl=開発言語

図1●LAMPの概念。OS(Linux)の上でApacheがユーザーに応答し,必要に応じてMySQLからデータを取り出すためにPHPプログラムを使用する

 一般的なPCとの大きな差は,まずOSがWindowsではなくLinuxであるということです。Windowsにもサーバー用OSとしてWindows Server(最新版はWindows Server 2003)というバージョンが存在しますが,一般的なWeb+DB案件でWindowsをOSとしたサーバーが使用されることは非常に稀です。

 LinuxとWindowsの優劣についてはここで語るべきこととも思えませんので省略しますが,大多数のWeb+DBシステムがLinuxベースで稼働しているということは,そこに見えざる何かがあるんだと考えていただいていいでしょう。なおサーバーのOSが何であるのかについては,Web+DBシステムを外部からブラウザで見る限り差としては現れません。

 OSはLinuxと一言でいいますが,Windowsと違ってLinuxには多数のパッケージが存在します。狭義にLinuxと言う場合は,OSのコアになる部分だけを指します。付帯するソフトウエア群をまとめてパッケージとして配布する場合「ディストリビューション」と呼ばれます。有名なディストリビューションとして「RedHat Lunux」(RHL)や「SUSE Linux」などがあります。OSとしてのLinuxそのものはフリーですが,ディストリビューション・パッケージは製品として販売--つまり有料--されているものもあり,販売品の場合はサポートも受けられます。

 このLinuxというOSの上で残りの“A”“M”“P”を動作させます。

 ApacheはWebサービス(あるいはWebサーバー,HTTPサーバーともいう)と呼ばれる部分を担当します。外部からのURLリクエストに対して返答するシステムです。ブラウザでどこかのサイトに接続して,何らかのページが表示されるというのはWebサービスによって実現しています。ApacheはWebサービスの中でもシェア世界一位で,事実上別の選択肢はありません。

 MySQLはデータベース・サービスを提供します。ここまでの回で説明してきたようなデータの蓄積を行います。データベース・ソフトとしては他にPostgreSQL,Firebird,Oracleなどがあります。MySQLは次に説明するPHPという言語との相性がよく,またデータベースとして動作が高速であるということもあって,Web+DBシステムでは広く利用されています。検索サイトの定番であるGoogleのシステムもMySQLです。この一点からでもMySQLには十分な実績があるといえます。

 最後に“P”です。PHPあるいはPerl,もう少し拡大解釈してPythonを含む場合があります。これらのソフトは開発言語です。Apacheの上で動作するプログラムの作成に使用され,MySQLやPostgreSQLといったデータベースとの連携が容易であることから,Web+DBシステムの開発環境の定番になっています。現在のトレンドはPHPです。

 ApacheとMySQLは単独で動作しているだけでは全く連携が取れません。Apacheで外部からの要求に応え,要求されたデータをMySQLから取り出したり,MySQLに新データとして蓄積するのがプログラムの役割です。そのプログラムを組み立てて,実行させているのがPHPという言語環境であるというわけです。

 プログラマにはそれぞれ得意の言語や環境というのがあります。言語を強く指定するとプログラマを選ぶことになります。特に強い理由がない場合は,どの言語を使用してシステムを作るのかはプログラマ任せにしたほうがいいでしょう。「言語によってページの外見をこういう風にすることはできない」ということはなく,あくまでも内部処理の違いだけが発生します。

 LAMP環境は基本的にオープンソースで,導入に当たって購入費用は発生しません。ただしRHLやSUSEのようにディストリビューション・パッケージとして販売されているものを購入する場合には費用が発生します。完全に無償でサーバーを構成することもできますが,無償のディストリビューションを使用した場合には誰も保証やサポートをしてくれない点には注意してください。

 ハードウエアにLAMP環境を搭載して,これでやっと「サーバー」と呼べる機械になります。一般的なWindows PCは,サービスを受ける側(クライアント)であって提供する側(サーバー)ではありません。そのためApacheやMySQLといったサービスが導入されていないわけです。一方,サーバーは提供専門に構成されています。同じようなコンピュータですが,構成によって役割が変わっているというわけですね。

 「Webサーバー」「データベース・サーバー」という単語をよく耳にしますが,LAMP環境では「Webサーバー=データベース・サーバー」です。基本的なシステム構成では,それぞれが独立した別のサーバー・マシンを使っているわけではなく,1台のサーバーの中にWebサーバー(Apache)としての機能と,データベース・サーバー(MySQL)としての機能を一緒に詰め込んでいます。

 データベースがあまりに巨大になる場合や,外部からのアクセスが一日に数十万~数百万件に達するようであればサーバーを分けて負荷分散を考えなくてはなりませんが,通常は「Webサーバー=データベース・サーバー」の環境でも動作が重くて使い物にならないということはありません。後述するようにサーバーは数百万円規模の機械ですから,簡単に2~3台購入してからシステムを作るというわけにはいきません。とりあえず1台でも動くので安心してください。

サーバーの設置について

 サーバーがどういうものかについてはなんとなくわかってきました。システムを作るということは,どこかにサーバーを設置しなくてはならないということです。設置について少し考えてみます。