軽量 Web サーバー

用途に特化した HTTP アプリケーションで Apache や他のマーケット・リーダーを補完する

最近では、lighttpd や litespeed、mongrel など、興味深い Web サーバー実装が全盛です。これらの Web サーバーは、パフォーマンスや管理の容易さ、移植性、セキュリティー、その他関連する価値をさまざまに組み合わせ、独特の機能を誇っています。これから述べる工学研究では、軽量 Web サーバーの領域について調査し、皆さんの次期プロジェクトの技術要件を満足できそうな 1 台を見つけるために役立てたいと思います。

Cameron Laird (Cameron@Lairds.com), Vice President, Phaseit, Inc.

Photo of Cameron LairdCameronは、Phaseit, Inc. の常勤のコンサルタントです。オープン・ソースなどの技術的なトピックについて、数々の執筆や発言を行っています。Cameronのメール・アドレスはclaird@phaseit.net です。



2007年 7月 10日

lighthttpd litespeed mongrel などの「軽量」Web サーバーは、皆さんのプロジェクトに劇的な効果をもたらします。この記事では、それらの可能性について調べ、その応用方法を解説します。

Web サーバーであるためには何が必要か

最初に重要なことは、調査対象とする領域を明確に理解することです (詳細は「参考文献」を参照)。インターネット上での基本的なエンド・ユーザー・アクションは「ある Web ページに行く」ことです。これを上位レベルで見ると、いつかのアプリケーション間の連携を必要としています。

  • Web ブラウザー。Firefox や Internet Explorer などの Web ブラウザーは特定のページを要求し、受け取ったものを人間が読み取れる形式で表示します。
  • Web サーバー。通常はリモート・マシン上にあり、HTML コードあるいは類似のストリームのデータによるページ・リクエストに応答します。

すべての Web ユーザーはブラウザーと直接やり取りし、ユーザーによる選択や分析に応じて、あるレベルの興奮が生まれます。ただしサーバーは、そのサイトの技術スタッフからしか見ることができません。さらに、現在は非常にさまざまなサーバーが使われていますが、最近の Netcraft の調査によれば、Apache と IIS (Internet Information Server) の 2 つが、すべてのサイトの約 90% を占めています。これらはどちらも非常に洗練された製品であり、それらに備わっている技術機能の長々としたリストがある他に、本やアドオン、コンサルタントやコンサルタント会社、プロバイダーなどといった「アフターマーケット」も活況を呈しています。この特別な状況を一から作り直す必要があるのでしょうか。

答えは「イエス」です。Web サーバーを評価する際の重要な側面としては、次のようなものがあります。

  • パフォーマンス : サーバーはどのくらい高速にリクエストに応答できるか。
  • スケーラビリティー: 多くのユーザーが同時にアクセスした場合にも、サーバーは信頼できる動作を継続できるか。
  • セキュリティー : サーバーは本来必要なオペレーションのみを実行するか。ユーザーを認証し、トラフィックを暗号化するために、サーバーはどのようなサポートを提供しているか。このサーバーを使うことによって近くのアプリケーションやホストが脆弱にならないか。
  • 可用性 : サーバーにはどのような障害モードとインシデントがあるか。
  • 標準への準拠 : サーバーは適切な RFC を順守しているか。
  • 柔軟性 : サーバーは、負荷が重いリクエストや計算負荷が重い動的ページ、あるいはコストの高い認証などに対応するために調整可能か。
  • プラットフォーム要件 : どのような範囲のプラットフォームでサーバーを利用できるか。特定のハードウェア要求があるか。
  • 管理容易性 : サーバーは、設定と保守が容易にできるか。ログや監査、コストなどに関する組織の標準に準拠しているか。

Apache と IIS は、これらの多くの側面を同時に最適化することはできません。抽象的な言い方をすれば、これらの側面のうち少なくとも 1 つか 2 つに関して、ニッチ製品がマーケット・リーダーをしのぐ可能性があることは明白です。

軽量 Web サーバーが、興味深く、また (この記事のように) 調査に値するのは、軽量 Web サーバーの持つ単なる理論を越えた競争力のためです。注意深く調べてみると、軽量 Webサーバーが提供するものはたくさんあり、さまざまな一般的な状況でも Apache や IIS に匹敵するものがあります。マーケット・リーダーは、(例えば) パフォーマンスの面で実質的に他を圧倒するように最適化されていると考えられているのはもっともな話ですが、その一方、静的な Web ページの単純なサービスに関しては、Apache や IIS と対抗する多くの小さなサーバーの方が高速なのです。これらの Web サーバーを使って皆さん自身でテストを実行してみると、皆さんはまるで自分がカー・レースのコースにゴーカートで登場し、ポルシェやバイパーを追い抜くような気分を味わうはずです。それだけではありません。軽量 Web サーバーが、単純に本格的なサーバーに対抗できるだけではなく、それらを補完する場合もあります。たとえ Apache を使うことがわかっている場合であっても、軽量 Web サーバーと組み合わせて使うことで、Apache の能力を最大限に発揮できるかもしれません。場合によると、最適なソリューションは 2 台以上の Web サーバーの間の連携から得られることもあります。


Web サービスの軽量さ

この調査で注目する「軽量さ」は、「芸術」や「味わい」などのように、やや主観的な性質を持ちます。「軽量さ」は通常、単純でインストールしやすく、合理化されており要求事項が少なく、そして堅牢なことを意味します。つまり、大きな需要のあるマーケットを満足させるために過度に機能が盛り込まれた Apache や IIS よりも小さく、Apache や IIS ほど複雑ではありません。そうした視点から、Java Web Server、AOLserver、そして Zeus は優れた移植性とパフォーマンスは魅力なのですが、その複雑さと規模から、ここでは除外することにします。

十分に軽量なサーバーは、マーケット・リーダーや他の「重量級」サーバーでは対応できない領域にも可能性を開きます。例えば、サーバー全体が 1 つのファイルに収まるかもしれません。これは、生産的な作業をするためにすべてのツールを持ち運ぶ必要のある開発者にとって非常に便利です。実動のサーバーでは Apache を実行している場合であっても、ホテルの部屋に座って、数秒でインストールできる軽量サーバー上で新しい考えを実行して試すことができます。また、軽量サーバーは要件が非常に低いため、IIS の重い負荷にはとても耐えられないホスト上でも快調に動作します。

単一ファイルでのパッケージング

Apache は、多くのファイルがいくつものディレクトリーに広がっているため、インストールには注意が必要です。この先で説明する Web サーバーのいくつかは 1 つの実行可能ファイルに収まるため、Apache とは非常に対照的です。実は、私が勤務する会社 (Phaseit) が専門とする領域の 1 つがデプロイメントとパッケージングであり、私達は Apache のインストールが通常よりも単純に見えるようにできる技術を持っています。ただし私達が最善をつくしたとしても、Apache あるいは IIS と軽量サーバーとの間には、「フットプリント」に大きな差があります。前者はとにかく大量のスペースを占有するのです。

小さくて軽量の Web サーバーは、処理能力の低いホストでも非常に快適に動作します。私達の会社 (Phaseit、「囲み記事」を参照) では、リモート環境や、過酷な環境、あるいは処理能力の不足した環境に置かれた産業用コンピューター上で専用のハードウェアを実行しています。こうした状況では、処理能力やディスク・スペースをほとんど要求しないアプリケーションで Web ページをサービスできることは、非常に大きな利点です。つまり、Apache のための開発や Apache を処理するための能力のオーバーヘッドなしに、Web ベースの管理コンソールの中に私達のマシンを構築できるということです。

ほとんどすべての軽量 Web サーバーは、何らかのレベルでオープン・ソースです。ある Web サーバーに特別な動作が必要な場合にも、下記に紹介するサーバーは非常に小さいため、ごく少数の例外を除いて容易に理解でき、従って機能強化も容易に可能です。これらの Web サーバーは、特別なハードウェアの中であれ、あるいは汎用のコンピューターで実行するように設計された特定のアプリケーションの中であれ、Web サービスを組み込んだプロジェクトにとって最適の構成部品となります。また軽量サーバーは、次のような従来型と思える Web サイトにも広く使われています。

  • YouTube は、アーカイブされたコンテンツ (ビデオなど) を高速に提供するために lighttpd に依存しています。
  • cdServe は「German Woodworking Machinery and Tools」という CD を実行しています。
  • LiteSpeed は、www.funnyoride.com や www.airliners.com、WordPress.com、fanfiction.com、SlashGear、www.forumactif.com その他の有名な Web サイトで重要な役割を果たしています。
  • OpenSUSE や RubyOnRails、MarkaBoo その他いくつかの有名なサイトは Mongrel に依存しています。
  • thttpd は、demon.net や bluelight.com、mtv.com、The Drudge Report、garfield.com その他の役に立っています。
  • その他

軽量サーバーが開発者にとって便利な例は、次の通りです。私達の会社では、オフィスの電話に関するソリューションを提供する特殊用途のハードウェアに取り組んでいます。このハードウェアは、通常の Linux® アプリケーションとして実行する、カスタマイズされたソフトウェアをベースにしています。たった 1 つファイルを追加し、少し init.d 構成をいじるだけで、ハードウェアとソフトウェアに管理インターフェースを提供する、非常に高機能の「Web コンソール」を簡単に追加することができます。エンド・ユーザーは彼らのマシンを任意のブラウザーからモニターしたり構成したりできるようになり、しかも特別なハードウェア接続やその他、かつての「専用」ハードウェアには一般的だった面倒な作業は必要ありません。

SOA (service-oriented architecture) は、難しく、扱いにくいと言われています。私達の経験では、そうした困難の少なくとも一部は、適切な Web サービスに関わるものです。私達は軽量 Web サーバーを利用することで、手軽な SOA をデモ用に設定しました。

軽量サーバーは、上記の有名なサイトを含め、実動のデータセンターやその他のところでも役割を果たすことができます。非常にハイパフォーマンスのサイトでは、キャッシングやプロキシー動作などを最大限に利用するためにオペレーションをセグメント化します。例えば Apache ベースのサイトでは、専用のファイルシステムから最小限の Web サーバーを通して、ゆっくりと変化する画像を提供するアーキテクチャーを採用しているかもしれません。その結果エンド・ユーザーは、実際には Apache と 1 台以上の 2 次 Web サーバーとが、それぞれが得意とする役割を果たしながら連携して動作する結果を見ることになります。こうした構成をとれば、最低限の計算コストで非常に高速に結果を提供することができます。


軽量サーバーを実現する手段と結果

軽量サーバー同士は多くの共通点がある一方、1 つのカテゴリーの中で見ると、さまざまな違いがあります。大部分のサーバーは C で作成されていますが、私が実験したサーバーでは、他のいくつかの実装言語も有効なことが実証されています。そうした言語には、Erlang や Java、Lisp、Lua、Perl、Python、Tcl があります。皆さんの好みの言語がある場合には、その言語でコーディングされた Web サーバーが、おそらくどこかにあるはずです。

「少数派」の言語に注目する理由は、次のようにいくつもあります。

  • 教育: 軽量 Web サーバーを扱うという目標は、本格的とは言え、手に負えないほどの目標ではありません。そのため、ある言語の経験を積むための機会としては最適です。
  • 協調: C コードによる軽量の Web サーバーは通常は 10キロバイトから 50 キロバイトに収まり、高級言語で作成されたランタイムは 100 キロバイトから数メガバイトですが、完全な Web サーバーのソースは、高級言語で作成すれば、数千バイト程度しか占有しないかもしれません。フットプリントがこのように小さいため、仲間の技術者と共有して作業する場合であっても、Apache にパッチを当てるよりもずっと簡単です。
  • 研究: 高級言語を使うことで、実験が容易にできます。例えば新しい HTTP/1.1 機能を追加する場合でも、ソースコードに数行追加するだけですむかもしれません。こうした軽量サーバーは、手軽に使える実験材料です。
  • 拡張: 既に高級言語でコーディングされた既存のアプリケーションに HTTP サーバーを追加しても、ソースに数行追加するだけの手間ですむかもしれません。

Athana は、これらのテーマを実証しています。Athana は Python でコーディングされた Web サーバーであり、HTTP のマルチパート (アップロード) やセッション、クッキーなどをサポートしています。Athana は、0.2.1 の時点でも相変わらず、適切に構成された 1 つのソース・ファイルにコーディングされています。

上の説明からわかるように、さまざまな軽量 Web サーバーの強みはそれぞれ異なりますが、そうした強みは使われている言語とほとんど無関係です。どの軽量 Web サーバーも、Apache よりも小さく、構成が容易です。いくつかの軽量 Web サーバーは Apache よりも高速であり、いくつかは、はるかに高速です。他の軽量 Web サーバーは、セキュリティーや、負荷が重い時の安定動作、拡張性、あるいはメモリーの節約などを強調します。どの場合にも、これらのサーバーを完全に理解しようとするのは無理な話ではありませんが、Apache の場合はそれはもはや現実的ではありません。

こうした可能性を実現する製品は、具体的にどのようなものでしょう。焦点を「軽量」サーバーに絞っても、気が遠くなるほど膨大な選択肢があります。そこでそれらを、サブ・カテゴリーの面から考えてみましょう。つまり超軽量、強力なセキュリティー、特定言語を特徴とする、といった面から考えるのです。

私はこれらのうち、特に超軽量の Web サーバー、つまり Apache よりもはるかに小さなものを気に入っています。これほど小さなアプリケーションであれば、1 人の人間の頭の中に収まります。そのため、それらのセキュリティーあるいはスケーラビリティーを実証するために、システマチックに、そして徹底的に考えることができます。超小型の Web サーバーには、次のようなものがあります。

  • Cheetah Server は 1000 行以下の C で作成されています。
  • DustMote は約 3000 バイトの 1 つの Tcl ソース・ファイルで実装された、非常に小型の Web サーバーです。
  • fnord はプラットフォームと構成次第で 20K 以下に収まります。この小さなサイズにもかかわらず、仮想ホスティングと CGI、キープアライブをサポートしています。
  • ihttpd は、(inetd) による CGI を含め、ページをサービスするために 800 行以下の C しか必要としません。
  • im-httpd は非常に小型で約 7 キロバイトしかなく、glibc に対してリンクされています。非常に高速でもあります。
  • mattows はたった 600 行の C で CGI をサポートします。
  • Scrinchy はサイズが小さく 30KB 以下ですが、Sy という特殊用途のスタック・ベースの言語をはじめとする、興味深いスクリプト言語をサポートしています。
  • ZWS は 500 行を少し上回る程度の、適切なコメントの付いた zsh で作成されたアプリケーション (この場合は HTTP 0.9+ サーバー) ですが、このようなアプリケーションでもいかに優れたものになりうるかを示しています。

小さいからと言って、これらのサーバーが本格的な用途に使えないというわけではありません。例えば fnord は、何千もの同時接続を処理することができます。

軽量サーバーがおそらく最も素晴らしい力を発揮するのは、次のようなハイパフォーマンス・サーバーのカテゴリーでしょう。

  • cghttpd は最小限の Web サーバーとして、2.6 シリーズの Linux カーネルにある非同期機能を使った実験として理解することができます。
  • darkhttpd は高速でシングル・スレッドの HTTP/1.1 サーバーです。
  • Gatling はハイパフォーマンス用に設計されており、機能としては FTP や IPv6、仮想ホスティング、CGI などがあります。
  • Kernux は HTTP デーモンを実装した Linux カーネル・モジュールです。
  • lighttpd は、最も使われている Web サーバーの上から 5 番目の地位を占めています (しかも、さらに広く使われるようになっています)。同時接続を多数行えるように最適化されており、「典型的なシナリオでは、静的コンテンツを任せるために lighttpd をオフロード・サーバーとして使います・・・」
  • LiteSpeed Web Server はパフォーマンスとセキュリティーを強調した商用の軽量 Web サーバーです。LiteSpeed Technologies Inc. によれば、静的コンテンツを 6 倍高速化できますが、解釈されるページについてはもう少し数字が小さくなります。
  • Miniature JWS (tjws としても知られています) は Java コードで作成された Web サーバーであり、サーブレットや JSP、そして何千もの同時接続を 77 キロバイトで処理します。このサーバーの作成者は、「Apache 2.x よりも 10% 高速」と宣伝しています。
  • Yaws は Erlang で作成されたハイパフォーマンスの HTTP/1.1 サーバーです。

いくつかの Web サーバーは、大規模なアプリケーションの中に組みこまれることを想定し、クラスあるいはライブラリーとして実装されています。このようなサーバーのうち、私が特に興味深いと思ったのは次の 2 つです。

  • EHS は「組み込み HTTP サーバー」、つまり大規模な C++ アプリケーションに組みこまれることを想定した C++ クラスです。
  • Embedded TCL Web Server は、SSL と基本認証 (Basic Authentication) をサポートする単純な Web サーバーであり、驚くほど高速です。この作成者の測定によれば、少なくとも lighthttpd や AOLserver と同じ程度に高速です。このサーバーは 100 行以下の Tcl で作成されています。

次のような変わったニッチ用途に適した、いくつかの Web サーバーでは、Web サーバーの実装言語として Python が使われています。

  • cdServer は、Python でコーディングされた小さくて単純な HTTP であり「CD-ROM から (静的な) コンテンツを提供するために設計されています」。動的コンテンツを提供する機能は限定されています。私達の抱えるいくつかのプロジェクトでは、破損不可能な「ライブ CD」を提供する必要があり、cdServer のようなツールは必須です。
  • edna は、HTTP で実装され Python でコーディングされた賢い MP3 サーバーです。

他にも、Perl や、あまり知られていない言語で実装された興味深い軽量 Web サーバーがあります。

  • Camlserv は、ocaml で作成された完全な Web サーバーであり、「対話性の高い Web ページ」をターゲットにしています。このサーバーは数千行の ocaml に収まっており、その大部分は MySQL と HTML の特別な処理を行っています。
  • dhttpd は、Apache と同じフォーマットでアクセスをログに記録します。組み込みの Perl インタープリターを持つ CGI や仮想ホスティング、IPv6、帯域幅管理、そしてセキュリティー機能をサポートしています。
  • DNHTTPD は UNIX® 用の Perl で作成されており、仮想ホストや SSL 接続、CGI その他をサポートしています。
  • Jellybean は HTTP をベースにした、Perl でコーディングされた Perl Object Server です。
  • lns.http は Common LISP HTTP/1.1 Web フレームワークです。
  • Mongrel は Ruby で作成された、HTTP 用のライブラリーとサーバーです。
  • Nanoweb は PHP で作成された高速で堅牢な Web サーバーです。豊富な機能を誇り、その中には完全な HTTP/1.1 準拠やアクセス・コントロール、認証、仮想ホスティング、SSL 準拠、その他があります。
  • Naridesh は Perl でコーディングされた Web サーバーです。
  • OpenAngel は Perl でコーディングされており、セキュリティーに焦点を絞っています。
  • Xavante は Lua でコーディングされた HTTP/1.1 Web サーバーです。
  • XSP は C# で作成されており、ASP.NET をホストします。

この他にも、あまり重要ではないけれども独特の強みを持つ、C でコーディングされたいくつかの軽量 Web サーバーがあります。皆さんもいつの日か、これらを必要とするかもしれません。

  • ABYSS は UNIX と Win32 の間で移植性があり、「HTTP/1.1 に完全準拠の Web サーバーを目標としています」。このサーバーは非常にわずかのメモリーしか使用しません。
  • Anti-Web HTTPD (あるいは「Anti-Web」、「awhttpd」、「AW」とも言われます) は、セキュリティーと単純さを強調する、シングル・プロセスで非スレッド型、CGI 対応のサーバーです。
  • MHTTPD は、外部ファイルあるいは LDAP サーバーから MHTTPD 基本認証をサポートします。
  • mini-httpd は、1 つのシステム・スレッドで複数の並行スレッドを処理しますが、メモリーや CPU の面では、ホストからほとんど何も要求しません。
  • Naken Web は他の多くの軽量サーバーと同じく基本認証や静的コンテンツなどをサポートしますが、この作成者は Webcam オペレーションをターゲットにしており、これを Gumstix や WRT54GL、OpenWrt などの革新的なプラットフォームで活用しています。
  • Null httpd は、マルチスレッドでありながら単純で移植性の高い Web サーバーです。
  • Seminole は、非常にメモリー要求が小さく、多くの機能を持つ商用 Web サーバーです。
  • thttpd は機能を限定し、chroot や基本認証などを行います。

まとめ

Web サーバーの世界には、Apache と IIS 以外にも非常に多くのものがあります。完全に理解できるほど小さく、しかも本格的なアプリケーション用としても十分に高速な、Apache と IIS に代わりうるサーバーが、健全な選択を行えるほど豊富にあります。そのうちの 1 つは、皆さんの次期プロジェクトを高速化してくれることでしょう。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source, Linux
ArticleID=246251
ArticleTitle=軽量 Web サーバー
publish-date=07102007