Subsections
何週間も働いて作ったすてきなウェブサイトがあります。ついにそれを世界に見せる用意ができました。
しかし、どのようにそれを配置するかを決める必要があります。すなわち、それを製品用のPCなどの機材にどのようにセットアップするかということです。
ウェブサイトを開発している時は、ウェブサイトにアクセスする人はあなた一人(おそらく2、3人の他の開発者も)だけなので、サイト自体は高速もしくは強力である必要がありません。しかし製品版のウェブサイトでは、(もし好運なら)たくさんの人々があなたのウェブサイトにアクセスするでしょう。これは、高速かつ信頼性のあるサービスをユーザーに提供するために適切なCherryPyの設定を選択しなければならないということを意味します。
設定を選ぶ助けになる基準は以下を含んだものです:
- ホスティングプロバイダがあなたにしてくれるのは何か? もしPCなどの機材を共有している場合、あなたがしたいことができないかもしれません。例えば、CGIしかつかえないとか、ホスティングプロバイダがApache下でのバーチャルホストしか提供してないかもしれません。
- 計画で想定したトラフィックはどのくらいか? あなたは1日に数百あまりのユーザーを想定していますか、それとも1日に何万ものユーザーを想定していますか?
- あなたが持っている機材/プロセッサは何台ですか? (あなたはいくらお金を持っていますか) もし多くのトラフィックを想定している場合、何台ものマシン/プロセッサを使うかもしれません(お金がより掛かります)。
- ウェブサイトの面倒を見るウェブマスターはいるでしょうか? もしウェブサイトをずっと面倒を見てくれる人がいない場合、クラッシュ時に自動的にウェブサイトを再起動したいと思うかもしれません。
まずやるべき決定は、CherryPy HTTPサーバを直接使うか、Apacheなどの他のウェブサーバ下で動かすかということです。以下は各々の方法に対する利点を列挙したものです:
- より高速であり、使うリソースがすくなくて済む(Apacheのプロセスがなく、かつApacheとCherryPy間でのやりとりをする必要がない)
- セットアップがより簡単
- より強力になるかも
- 他のツールで分析できるログを吐く
- クラッシュした時にCherryPyを自動的に再起動するようにセットアップが可能
- 静的ファイル(画像など)の表示がより高速になる
- ホスティングプロバイダがアパッチを強制的につかわせるかもという時
CherryPyを直接つかうなり他のウェブサーバ下で使うなりをいったん決めても、まだいくつかの設定を決める必要があります。。。
以下のサブセクションはそれぞれ異なるオプションは何であるか、そしてそれらの長所/短所は何かを示します:
説明: これはCherryPy Httpサーバが単一のシングルスレッド/プロセスで実行することです。1つのリクエストを扱っている間は、同時に他のリスエストをつなぐことができません。
利点:
- 各リクエストに対し高速に応答できる(各リクエスト毎にスレッド/プロセスを生成する必要がない)
欠点:
結論: この方法はデフォルトの設定であり、開発のためであればうまく動きますが、製品となる場合、あなたのウェブサイトに何人かのユーザーが同時にアクセスしてきた場合に閉めだされてしまいます。
説明: この方法はCherryPy HTTPサーバが各リクエストを扱うために新規にプロセスを生成するものです。レスポンスが送り返された後、プロセスは破棄されます。
利点:
- 1回で複数のリクエストを扱うことができる
- マルチプロセッサのマシンでは、forking serverは複数のプロセッサの時に利点を持っています。
欠点:
- 各リクエストに対して新しくプロセスを生成するのはおそらく高くつきます(特に、各リクエストが非常に早くくる場合)。
- ForkingはWindows上では動きません
Forking doesn't work on Windows
:結論: この方法はもしウェブのトラフィックがそれほど多くない時に、Windowsマシンではない場合に使う事ができます。
説明: この方法はCherryPY HTTPサーバが各リクエストを扱うために新しいスレッドを生成するものです。レスポンスが送り返された後、スレッドは破棄されます。
利点:
- 一度に複数のリクエストを扱う事ができる
- 全てのプラットフォームで動く(Windowsも含む)
欠点:
- 各リクエストに対し新しくスレッドを生成するのは高くつきます(しかしプロセスの生成よりはましです)。特にリクエストが高速できた場合は。
- マルチプロセッサマシンでは、Threading serverは複数のプロセッサの利点を使いません (Pythonのグローバルインタプリタロックによる)。
結論: この方法はウェブサイトのトラフィックがそれほど多くない場合に使うことができます。
説明: この方法はCherryPy HTTPサーバーがスタートアップ時に固定された数のプロセスを生成します。そしてこれらのプロセスはずっと残ったままです。もし1つのプロセスがリクエストを扱っている最中に他のリクエストが来た場合、それは次のプロセスに回され、そこで扱われます。
利点:
- 1回で複数のリクエストを扱うことができます
- 高速です。なぜなら各リクエスト毎にスレッドやプロセスを生成する必要がないからです。
- マルチプロセッサマシンが持つ利点を生かすことができます
欠点:
- Windowsでは動きません
- 一度により多くのユーザーが来ても、それに応じてプロセス数を増やさない
結論: この方法はWindows以外のマシンで、一度に何百というユーザーを相手にはしないという場合に効果があります。
もしほんとに 多くのトラフィックになって、前述の方法では不十分であるとか、これらの方法を使うことができない(例えばWindowsを使っている)という場合には、genericなロードバランシングを使うことができます。これについてはドキュメントのHowToにあります。
いままでのセクションで述べてきた設定方法は全て他のウェブサーバ下のCherryPyを動かす時にも可能です。サードパーティーのウェブサーバはたいていマルチスレッドかマルチプロセスです。これを設定する説明のドキュメントはHowToにあります。
ここではどのようにCherryPyサーバを配置するかを指定するために使う設定ファイルオプションを列挙します。これらのオプション全ては設定ファイル(cf.「CherryPyを設定する」の章)の[server]セクションで使われます。
- socketPort: これはサーバがlistenするのはどのポートかを示します。例:
[server]
socketPort=80
- socketFile: これはUnixのみ使う事ができ、もし通常のAF_INETソケットの代わりにAF_UNIXソケットを使いたい時に使います。例:
[server]
socketFile=/tmp/mySocket.soc
- forking: もしforking serverにしたいならこれを1にセットしてください。例:
[server]
socketPort=80
forking=1
- threading: もしthreading serverにしたいならこれを1にしてください。例:
[server]
socketPort=80
threading=1
threadingはWindows上のPython2.1では動きそうもないことに注意してください。threadingにしたいなら、このプラットフォームではPython2.2以上を使う必要があります。
- fixedNumberOfProcesses: もし起動時にn個のプロセスを生成したいならば、これをn(n>1)にセットしてください。例:
[server]
socketPort=80
forking=1
- threading: もしthreading serverを使いたいならこれを1にセットしてください。例:
[server]
socketPort=80
threading=1
threadingはwindows上のPython2.1ではおそらく動かないことに注意してください。threadingをやりたいならば、このプラットフォームではPython2.2以上を使う必要があります。
- fixedNumberOfProcesses: 起動時にn個のプロセスを生成したならば、これをn(n>1)にしてください。
[server]
socketPort=80
fixedNumberOfProcesses=10
- sslKeyFile and sslCertificateFile: これはSSLサーバーを使います。これについてはドキュメントのHowToにあります。
- xmlRpc: これはXML-RPCサーバを使います。これについてはドキュメントのHowToにあります。
これらのオプションは機能が衝突するため、明らかに一緒には使えないものがあります:
- socketFile と socketPort は互いに衝突するのは明白です。
- threading, forking と fixedNumberOfProcesses はお互いに衝突するのは明白です。
Debian User
2003-10-13