woshidan's blog

あいとゆうきとITと、とっておきの話。

Webアプリケーションを動かすサーバの三層のソフトウェアについてメモ

サーバ作業書く前にちょっと悩んだのでメモ。

ググればググるほどに用語がいろいろずれている気がする。

Webサーバ用ソフトウェアがアプリケーションサーバとしての機能を備えていることが多かったり、1つのサーバの中にWebサーバとアプリケーションサーバを両方(個人でやるとDBサーバも一緒だったりしますね)入れるので、両方合わせてアプリケーションサーバと呼んでいたりすることがあるそうで。

あと、元々はアプリケーション層の機能しか持っていなかったけれど、バージョンアップでWebサーバ層の機能も持ったのでスタンドアロンで使えるバージョンも出てます、とか。

 

お前らいったい何者だ。

 

とりあえず、基本的な三層(Web/App/DB)についてメモしたことをまとめる。

 

WEBサーバ

WEBサーバ(ウェブサーバ)は、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、
HTMLやオブジェクト(画像など)の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。 広義には、クライアントソフトウェアとHTTPによる通信を行うプログラム及びコンピュータ(wikipedia先生より)。

ソフトウェアはapacheとかnginxとかWEBrickとか
Apaxche+phpとかWEBrick+Railsとかの例を考えると、
アプリケーションサーバとしての機能を持っていたりするから話がややこしいのだけど、
とりあえずここではWEBサーバソフトウェアとよぶ。

問題あったら教えてください。

 

http://www.atmarkit.co.jp/ait/articles/0012/01/news001.html
などから、この層の機能だけを指すとすれば、
webブラウザとwebサーバで動くプログラムの間での値のやり取りのサポートを行った(CGI Common Gateway Interface)り、
HTML中に埋め込まれた特別な命令を実行し、HTMLを動的に変化させる(SSI Server Side Includes)の機能が主らしい。

 

ところで、SSIって初耳でした。
サーバサイド等のスクリプトを<script src="~~">で読み込んできたりすることだろうか、と
思ったのですが、どちらかというとシェルのコマンドに似ていて、
<!--#exec cmd="/bin/ls" -->
などのコメントを書いておくと、webサーバがそれを読み取って、コメントをコメント内のコマンドの結果に書き換えていたりするらしい。
(参考: http://www.tohoho-web.com/wwwssi.htm)
実際はアプリケーション側でHTMLを動的生成するコードを書いて、SSIを使ってHTMLの書き換えを使うことはなさそう。

 

Applicatonサーバ

ビジネスロジックなどを実装したアプリケーションソフトウェアを実行することを専門とするコンピュータネットワーク上のサーバコンピュータ、
もしくはそのようなコンピュータ上でのアプリケーションの実行を管理補助するミドルウェアのこと。
(wikipedia先生より)
ソフトウェアで言うとunicornとかPassengerとかのことを言い、Rubyphpで書いたプログラムを動かす役割を持つ。
ぶっちゃけるとApacheWEBrickがここの機能も持っている(風に素人目には見えている)から理解しづらい。

(というか、Passengerもスタンドアロンで動くVerありますし……。)
ここの層のソフトがないと、Railsコンソールじゃないけれどいちいちクラス名とかで指定して実行させるようにしなきゃいけないのだろう。

 

DBサーバ

他と違って、DBサーバソフトウェア……という言い方はしない。
DBMS(データベースマネジメントシステム)というのが一般的だと思う。
Oracle(Oracle)、IBM(DB2)、Microsoft(SQL Server)、PostgreSQLMySQLなど。