1 / 44

TechStyle Onsite Seminar

TechStyle Onsite Seminar. Apache2 新機能とその詳細. TechStyle.jp 早川 仁 hykw@techstyle.jp cz8cb01@linux.or.jp. 目次. APR MPM Filtering Multi-Protocol. APR. 多数の OS に対応している Apache. Apache が稼動する OS 各種 UNIX Windows Netware OS/2 UnixWare ...etc. OS ごとに異なる処理が必要. ファイルを開く. Unix. OS/2. Windows.

denton
Download Presentation

TechStyle Onsite Seminar

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TechStyle Onsite Seminar Apache2新機能とその詳細 TechStyle.jp早川 仁hykw@techstyle.jpcz8cb01@linux.or.jp

  2. 目次 • APR • MPM • Filtering • Multi-Protocol

  3. APR

  4. 多数のOSに対応しているApache • Apacheが稼動するOS • 各種UNIX • Windows • Netware • OS/2 • UnixWare • ...etc... OSごとに異なる処理が必要 ファイルを開く Unix OS/2 Windows 多数のOS依存ルーチン

  5. Apache1.3.xのOS依存部分 • ひとつの関数に依存部分が混在 関数名() { 共通処理 Windows? Windows依存処理 それ以外のOS その他OSの処理 共通処理 } →対応OSが増えていくと収拾がつかなくなる

  6. APRとは • APR = Apache Portable Run-time • OSを仮想化してくれるライブラリ Apache ファイルを開く APR API Windows 共通 Unix APR

  7. APR関数例 • apr_file_open()の場合 UNIX Windows apr_file_open() { ・ ・ ・ open() ・ ・ } apr_file_open() { ・ ・ Unicode系のOS?(CE/NT/2000/XP) ファイル名をUTF-8->UCS-2に変換 CreateFileW() それ以外 CreateFileA() ・ ・ }

  8. APRの提供機能 • APR core ・・・・・・ OS依存部分 • ファイルの読み書き • 文字コード変換 • メモリ関係の処理 • ...など • APR util ・・・・・・共通処理 • URI関係 • DBMの操作 • XMLの操作 • hook関係 • BASE64の処理 • 暗号化(SHA1)

  9. APRを利用する利点 • OS依存処理を考慮しなくてもよくなる • OSに実装されていない機能をAPRが吸収 • モジュールからOS依存部分を無くせる • 他のOSへの移植・対応が容易 • Apache2.0 • Subversion • mod_webapp(Tomcat connector) • Flood

  10. MPM

  11. bash free プロセスとは • 実行中のプログラムを抽象化したもの • コンテキストと言うこともある $ free freeをfork

  12. プロセスABCD → 時間 プロセスのスケジューリング • 1CPUは同時に一つのプロセスしか実行できない 一定時間ごとに切り替えを行い、同時に実行されてるようにみせる

  13. プロセスの状態遷移 • 「実行可能」なプロセス以外はスケジューリングの対象とならない 実行中 ブロッキング 実行可能 $ cat foo | grep hogehoge

  14. プロセスABCD → 時間 プロセスのスケジューリング(改) • IO待ち(ブロッキング)プロセスはスケジューリングされない。 バランスよく動作できれば、CPU使用率が100%に近づく

  15. プロセス 使用メモリアドレス tty カレントディレクトリ 親プロセス ルートディレクトリ ...など プロセスの中身 →動作によっては複数プロセス間で  (不要にもかかわらず)同一の内容を持つことになる

  16. 使用メモリアドレス tty カレントディレクトリ 親プロセス ルートディレクトリ ...など スレッドとは プロセス 共有 スレッド スレッド スレッド 1つのスレッドがおかしくなった場合、他のスレッドもその影響をうける

  17. Apache1.3.xのリクエスト処理 親プロセスは子プロセスの作成(fork)とリクエストの転送だけ 親プロセス 子 子 子 1リクエストを1プロセスが処理  →同時に100リクエストを処理するには100プロセスが必要となる →プロセスのfork時間も考慮する必要がある

  18. MPMとは • MPM=Multi-Processing Modules • リクエスト処理のコア部分の総称 • リクエストのディスパッチ • リクエストの処理 • 特定プラットフォーム用に最適化

  19. ApacheとMPM Apacheコア MPM NT用MPM スレッド対応MPM 従来型MPM →MPMはconfigure時に選択

  20. MPMの種類 • winnt • prefork • perchild(2.0.36から公式にexperimentalに落ちた) • worker • threadedやpthreadと呼ばれていたこともある • leader(experimental) 2.0.36で新登場 • threadpool(experimental) 2.0.36で新登場

  21. 親プロセス 子プロセス スレッド スレッド スレッド mpm_winnt • NT専用MPM • リクエストはスレッドが処理 • 負荷に応じ、スレッドが増減 • At this time, support for Windows 95, 98 and ME is incomplete. Apache 2.0 is not expected to work on those platforms at this time

  22. 親プロセス 子プロセス 子プロセス 子プロセス mpm_prefork • 従来型MPM • リクエストはプロセスで処理 • 負荷に応じ、プロセスが増減 • プロセスが死んでも影響を受けるのはそのコネクションだけ

  23. 子プロセス 子プロセス スレッド スレッド スレッド スレッド スレッド スレッド mpm_perchild(experimental) • スレッド型MPM • リクエストはスレッドが処理 • 負荷に応じ、スレッドが増減(プロセス数固定) • 子プロセスごとに異なるUIDを設定可能Apache 2.0 is a production release, but the Perchild MPM isn't. It was decided a while ago that Perchild wouldn't hold up a production release. 親プロセス

  24. 子プロセス 子プロセス スレッド スレッド スレッド スレッド スレッド スレッド mpm_worker • ハイブリット型MPM • リクエストはスレッドが処理 • 負荷に応じ、プロセスが増減(スレッド数固定) 親プロセス

  25. デフォルト設定値でのベンチマーク

  26. prefork(1.3.24も同様) StartServers 5MinSpareServers 5MaxSpareServers 10MaxClients 150MaxRequestsPerChild 0 perchild NumServers 5StartThreads 5MinSpareThreads 5MaxSpareThreads 10MaxThreadsPerChild 20MaxRequestsPerChild 0 worker StartServers 5MaxClients 150MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 0 デフォルト設定値と測定方法 ■設定値 ■測定方法 $ ./apachectl stop; sleep 3; ./apachectl start$ ab –n 1000 –c 10(50/500/1000) http://localhost:10080/ ■マシンスペック CPU: PentiumIII 1.0GHzMemory: 512MBIDE: 17GB (IBM IC35L020AVER07-0) Debian woody(Kernel 2.2.19)

  27. 1.3.24 2.0.35 X=10, Y=3 50.07KB/s 370.0KB/s X=1000, Y=10 52.19KB/s 342.01KB/s WindowsNTの場合 • ab がないため、ネットワーク経由で測定 $ ab –n X –c Y http://IPアドレス/

  28. 設置値変更後のベンチマーク

  29. prefork(1.3.24も同様) StartServers 5MinSpareServers 5MaxSpareServers 10MaxClients 100MaxRequestsPerChild 0 perchild NumServers 5StartThreads 1MinSpareThreads 1MaxSpareThreads 10MaxThreadsPerChild 20MaxRequestsPerChild 0 worker StartServers 5MaxClients 50MinSpareThreads 1MaxSpareThreads 10ThreadsPerChild 2MaxRequestsPerChild 0 変更後の設定値 ■設定値

  30. Filtering

  31. Output Filter Output Filter reply フィルタとは • 入出力ストリームを変換するもの Input Filter Input Filter Apache core request →入力/出力データの変換が可能になる

  32. フィルタ対応のモジュール(の一部) • mod_include • mod_cgi • mod_ext_filter(experimental) • mod_echo(サンプル)

  33. Output Filter mod_include reply Output Filter mod_include/mod_cgi mod_cgiもほぼ同様 mod_cgi Output Filter

  34. mod_ext_filter(experimental) Output Filter mod_ext_filter 外部プロセス reply Output Filter 外部プロセスとの通信はstdin/stdoutを利用  →cat/sort/gzip/シェルスクリプト/...etc.外部プロセスのforkによる時間やメモリなどのコストが問題にならない状況であれば非常に便利

  35. フィルタの組み合わせ Output Filter mod_ext_filter mod_include Output Filter

  36. mod_echo(サンプル) Input Filter mod_echo Output Filter ProtocolEcho On Input Filterからの入力をOutput Filterに出力するだけ →Multi-protocolの例にはならない

  37. 携帯 各Web サーバ フィルタによるWAP対応の実現 携帯 WAPG/W キャリアのネットワーク Input Filter mod_wap mod_proxy Output Filter → HTTP の延長のプロトコルはフィルタだけで実現可能

  38. Multi-Protocol

  39. ブラウザ Web サーバ クライアント POP3サーバ Multi-ptorocol対応時の問題点 • HTTPはステートレス • POP3/FTPなどはステート情報の管理が必要 GET / HTTP/1.0 <!DOCTYPE HTML PUBLIC..... USER hoge +OK User name... PASS ****** +OK Mailbox open...

  40. 管理構造 server_rec ServerRootなど 1.3.x conn_rec リモートのIPやポート番号など request_rec メソッド、ステータス、ユーザ名など server_rec conn_rec 2.0.x state_rec 「認証前」「認証後」などの状態 request_rec 実際にはrequest_recが包含 → 実装例は httpd-pop3 を参照

  41. 最後に

  42. アプリケーションの対応状況 • php4.2.0 • experimental(とりあえず動く) • sapi_apache2.c(php_input_filter/php_output_filter) • modperl-2.0_20020507103951.tar.gz • experimental(とりあえず動く) • modperl_filter.c(modperl_input_*/ modperl_output_*) • perchildやworkerだと動かない • cannot use threaded MPM without ithreads enabled Perl

  43. Apache2に(いつ)移行すべきか?

  44. Resources • Writing Filters for Apache 2.0 http://www.onlamp.com/lpt/a//apache/2001/08/23/apache_2.html • Writing Apache 2.0 Output Filters http://www.onlamp.com/lpt/a//apache/2001/09/13/apache_2.html • Writing Input Filters for Apache 2.0 http://www.onlamp.com/lpt/a//apache/2001/09/20/apache_2.html • Writing Filters for Apache 2.0 http://www.ntrnet.net/~rbb/presentation/preso/filters/index.htm • httpd_pop3 http://cvs.apache.org/viewcvs.cgi/httpd-pop3/

More Related