Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apacheの展望とmod_perlの超絶技巧 #yapcasia

5,948 views

Published on

2013/09/20 YAPC::Asia Tokyo 2013 で発表したトーク資料です。

Published in: Technology
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yxufevpm } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Apacheの展望とmod_perlの超絶技巧 #yapcasia

  1. 1. Apacheの展望と mod_perlの超絶技巧 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/9/20YAPC::Asia Tokyo 2013
  2. 2. Attention for audience • This slide is mainly written by Japanese, and few English. In the future, I will write and share this slide of English version, perhaps. • I speach by Japanese language. • If you do not known Japanese language, please fun and feel from some Perl code and few English description on this slide.
  3. 3. 自己紹介 • 尾形 鉄次 (OGATA Tetsuji) • Twitter: @xtetsuji • Blog: http://post.tetsuji.jp/ • SlideShare: http://www.slideshare.net/xtetsuji • PAUSE: OGATA • GitHub,Twitter, etc.: xtetsuji
  4. 4. 自己紹介 http://tech.fonfun.co.jp/
  5. 5. YAPC::Asia Tokyo 2012 • 「モダンmod_perl入門」発表 • 昨年がmod_perlの入門と実践であった なら、今年は哲学と展望が主題 • 今後のApache HTTP Serverはどうなる? • mod_perlの未来はどうなる?
  6. 6. そんなことは言わせないぞ!
  7. 7. I.Apacheの展望
  8. 8. 他のサーバとの競争 • NginxやPerl製ウェブサーバの台頭 • しばらくはApache優勢の見込み • mod_perlが優勢かは別として、今後も デプロイ環境として残っていくはず
  9. 9. Netcraftのデータより http://news.netcraft.com/archives/2013/09/05/september-2013-web-server-survey.html より
  10. 10. 根強いApache信仰 • 受託現場に多く残る根強いApache信仰 • 今後数年はApacheへの信仰は揺らがな いだろう • Apacheのシェアを食っているのはNginx ではなくIISのほうが大きいのは意外
  11. 11. Apache/mod_perlが 抱える問題 • mod_perl2がApache2.4に未だに対応して いない問題 • Windowsでのサポートに苦慮している • Upstreamでは活発な開発が続けられて いるので、もうすぐリリースか?
  12. 12. Apache2.2にロックされた ディストロパッケージ • DebianやUbuntu stable等のLinuxディスト リビューションのapache2パッケージは 2.2がほとんど (Debian sid=jessieは2.4) • Apache2.4.1は2012年2月リリース • mod_perl2にロックされている説
  13. 13. Apache prefork MPMの 頭打ち問題(C10K問題)
  14. 14. Apacheの次の一手 • Apache2.6 • Apache2.5として現在開発中、Apache APIの大きな変更は無い見込み • event MPMの成熟に期待 • Apache3.0 • Apache2.0当時(2007年)から宣言されて いたが出てくる気配がない
  15. 15. Apache3.0? • Apache2.0登場当時から言われている • Apacheコア開発者の構想段階なのか • Apache APIの大胆な刷新を宣言している • mod_perl1→mod_perl2のようなある種 の「断絶」を経験するかもしれない
  16. 16. mod_perlの利便性 • Nginx&Perl製ウェブサーバ全盛時代でも mod_perlの利便性はある • 例えば大量のplackupがあるサーバでの ポート番号管理問題
  17. 17. mod_perlの利便性 ogata@languedechat:~/apps$ jobs [1] Running plackup -s Starlet --port=4001 app01.psgi & [2] Running plackup -s Starlet --port=4002 app02.psgi & [3] Running plackup -s Starlet --port=4003 app03.psgi & [4] Running plackup -s Starlet --port=4004 app04.psgi & [5] Running plackup -s Starlet --port=4005 app05.psgi & [6] Running plackup -s Starlet --port=4006 app06.psgi & [7] Running plackup -s Starlet --port=4007 app07.psgi & [8] Running plackup -s Starlet --port=4008 app08.psgi & [9] Running plackup -s Starlet --port=4009 app09.psgi & [10] Running plackup -s Starlet --port=4010 app10.psgi & [11] Running plackup -s Starlet --port=4011 app11.psgi & [12] Running plackup -s Starlet --port=4012 app12.psgi & [13] Running plackup -s Starlet --port=4013 app13.psgi & [14] Running plackup -s Starlet --port=4014 app14.psgi & [15] Running plackup -s Starlet --port=4015 app15.psgi & [16] Running plackup -s Starlet --port=4016 app16.psgi & [17] Running plackup -s Starlet --port=4017 app17.psgi & [18] Running plackup -s Starlet --port=4018 app18.psgi & [19]- Running plackup -s Starlet --port=4019 app19.psgi & [20]+ Running plackup -s Starlet --port=4020 app20.psgi &
  18. 18. mod_perlの利便性 <VirtualHost *:80> ServerName example.jp DocumentRoot /path/to/sites/example.jp ErrorLog /var/log/apache2/example.jp/error.log CustomLog /var/log/apache2/example.jp/access.log combined <Location /app01> SetHandler perl-script PerlResponseHandler Plack::Handler::Apache2 PerlSetVar psgi_app /path/to/apps/app01.psgi </Location> <Location /app02> SetHandler perl-script PerlResponseHandler Plack::Handler::Apache2 PerlSetVar psgi_app /path/to/apps/app02.psgi </Location> ... </VirtualHost>
  19. 19. mod_perlの利便性 • Copy on Write(CoW)が働く • app.psgiとパス・VirtualHostが対応する ので管理しやすい • Apache/mod_perlの堅牢性に依存できる (+Plack::Handler::Apache2)
  20. 20. mod_perlの情報収集 • 公式Subversionリポジトリ • 公式メーリングリスト http://mail-archives.apache.org/mod_mbox/ perl-modperl/ • Nabbleのmod_perlフォーラム http://old.nabble.com/mod_perl-f183.html • 書籍「mod_perl2 User’s Guide」
  21. 21. mod_perlの情報収集 • 日本語の情報は Twitter @mod_perl_info で時々流れている (私が中の人です) • http://modperl.info/ というサイトを作ろ うとしてまだ出来ていません • その他、日本語のmod_perl最新情報は 無いようなものなので出していきたい
  22. 22. 今後のmod_perl開発 • mod_perlハンドラを直接書いたりとい った場面は徐々に減っていくだろう • PSGIアプリデプロイの選択肢としては 根強いApache信仰の元、生き残りそう • 「Registry」によるPerl CGIの実行環境 としては優秀、レガシー資源の拠り所
  23. 23. Intermezzo. 「もうひとつの」本当に あったレガシーな話
  24. 24. とあるレガシーな話 • リモートメール http://rmail.jp/ • 1999年から運用開始、2003年に大改修 • 商用環境30万行弱のPerlソースコード • 数年前mod_perl1→2への移行を行った が、直接APIを叩いている一部分の移行 が大変だった
  25. 25. とあるレガシーな話 • mod_perl APIを直接叩いている場合の mod_perl1→2移行コストは結構かかる • mod_perl1を使っている場合の戦略 • CGI高速化のみなら簡単に2へ行ける • mod_perl2へ行くか別の道へ行くか
  26. 26. とあるレガシーな話 • OEM等の受託納品型の仕事もあるので 新しいものへの冒険がしづらい • 人が少ない、動くもの触らずの法則 • 新しく作った大きな機能はmod_perlを 直接叩くものであれば別サーバにして 同じネットワーク内でHTTP API化する
  27. 27. とあるレガシーな話 • mod_perl2いいよね!という社内合意は 得つつも、情勢に合わせてPSGIやNode を導入する考えもある • WAFは使用していないがCGI.pmの自社 継承モジュールが中心にあって、これ をPSGIに差し替える長期的計画もある
  28. 28. II. mod_perlの 超絶技巧
  29. 29. Echo Server • Echo Serverが書ければ何でも書けそう • とりあえず書いてみる • Apache2/mod_perl2のConnection APIには SocketとBucket Brigadeという2種類 があるが、簡単なSocketのほうで試す
  30. 30. Echo Server package MyApache2::EchoServer; # PerlProcessConnectionHandler MyApache2::EchoServer use strict; use warnings; use Apache2::Connection (); use APR::Socket (); use Apache2::Const -compile => qw(OK); use APR::Const -compile => qw(SO_NONBLOCK); use constant BUFF_LEN => 1024 * 4; sub handler { my $c = shift; my $sock = $c->client_socket; $sock->opt_set(APR::Const::SO_NONBLOCK => 0); while ( $sock->recv(my $buff, BUFF_LEN) ) { last if $buff =~ /^[rn]+$/; $sock->send($buff); } return Apache2::Const::OK; } 1; Listen 9000 <VirtualHost *:9000> PerlModule MyApache2::EchoServer PerlProcessConnectionHandler MyApache2::EchoServer </VirtualHost>
  31. 31. Echo Server • 長いか分からないけど、何か難しい • 受託現場で「AnyEvent…」って言って 「訳の分からない物はダメです」って 言われなければAnyEventで書いたほう が簡単に書けそうな気もする • AnyEvent版はどんな感じ?
  32. 32. Echo Server (AnyEvent) #!/usr/bin/env perl use strict; use warnings; use AnyEvent; use AnyEvent::Socket qw(tcp_server); use AnyEvent::Handle; use constant PORT => 9000; my $cv = AnyEvnet->condvar; my $echo_server = tcp_server undef, PORT, sub { my $fh = shift; my $hdl; $hdl = AnyEvent::Handle->new( fh => $fh, on_read => sub { $hdl->push_write(delete $hdl->{rbuf}); }, ); }; $cv->recv;
  33. 33. Two Echo Servers • AnyEvent版の方が若干シンプルか? • Apache版のほうは多少複雑だけど、 Apacheと同じ堅牢さを持つと言える • AnyEventの堅牢さをどう評価するか • 学習コストと対価の問題
  34. 34. SMTP Server • qpsmtpd (http://smtpd.github.io/qpsmtpd/) が大いに参考になるし、これの再発明 は大変そうだ • Apache::SMTPというCPANモジュールは 闇バージョン「mod_perl1.99」の産物 • 「mod_perl1.99」は使ってはいけない
  35. 35. Apache::Qpsmtpd package Apache::Qpsmtpd; use 5.006001; use strict; use warnings FATAL => 'all'; use Apache2::ServerUtil (); use Apache2::Connection (); use Apache2::Const -compile => qw(OK MODE_GETLINE); use APR::Const -compile => qw(SO_NONBLOCK EOF SUCCESS); use APR::Error (); use APR::Brigade (); use APR::Bucket (); use APR::Socket (); use Apache2::Filter (); use ModPerl::Util (); our $VERSION = '0.02'; sub handler { my Apache2::Connection $c = shift; $c->client_socket->opt_set(APR::Const::SO_NONBLOCK => 0); die "$ENV{QPSMTPD_CONFIG} must be given" unless $ENV{QPSMTPD_CONFIG}; my $qpsmtpd = Qpsmtpd::Apache->new(); $qpsmtpd->start_connection( ip => $c->remote_ip, host => $c->remote_host, info => undef, conn => $c, ); $qpsmtpd->run($c); $qpsmtpd->run_hooks("post-connection"); $qpsmtpd->connection->reset; return Apache2::Const::OK; } ...
  36. 36. qpsmtpd • qpsmtpdはPerl製のSMTPサーバだけど、 mod_perl以外でも実行が可能 • tcpserver(inetd/xinetd), async(Danga::Socket), forkserver, prefork • プラグインもPerlで書ける • シンプルだけど並列性等の実績も多数
  37. 37. mod_perl Router • mod_perlのHTTPハンドラはリクエスト とレスポンスの良い抽象化 • $r (Apache2::RequestRec object) • フレームワークが言うControllerの良い 先例の一つ
  38. 38. mod_perl Router • 以前 Hokkaido.pm の LT で書いたものが Gistに残っていた https://gist.github.com/ xtetsuji/3207493 • これは一から書いたもので不完全だし もっとモダンに書けないものか • そもそもLTの一発ネタでしかないし
  39. 39. mod_perl Router • ModPerl::Router として Router::Simple を 使って書きなおしてみた • https://github.com/xtetsuji/p5-ModPerl- Router • PSGIの$envをRouter::Simple用に作る • GitHub止まりだし、テストも不十分
  40. 40. mod_perl Router package MyApache2::Sample1; # SetHandler perl-script # PerlResponseHandler MyApache2::Sample1 use strict; use warnings; use Apache2::RequestRec (); use Apache2::Const -compile => qw(OK); sub handler { # $r is Apache2::RequestRec object my $r = shift; if ( uc $r->method eq 'GET' && $r->uri eq '/foo' ) { ...; return Apache2::Const::OK; } elsif ( ... ) { ...; } } 1; package MyApache2::Sample2; # SetHandler perl-script # PerlResponseHandler MyApache2::Sample2 use strict; use warnings; use Apache2::RequestRec (); use Apache2::Const -compile => qw(OK); use ModPerl::Router; get '/foo' => sub { # $r is Apache2::RequestRec object my $r = shift; ...; return Apache2::Const::OK; }; ...; 1; before after
  41. 41. KVS / memcached • Apache2/mod_perl2 で memcached??? • preforkとthreadのハイブリッドMPMの worker MPMの最大プロセスを1にして Perlのithreadを使って変数共有 • mod_perl2でConnectionフェーズを書く
  42. 42. KVS / memcached <IfModule worker.c> StartServers 1 MaxClients 64 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 64 MaxRequestsPerChild 0 ServerLimit 1 PerlInterpStart 1 PerlInterpMax 1 PerlInterpMinSpare 1 PerlInterpMaxSpare 1 PerlInterpMaxRequests 2 </IfModule> ogata@sid:/etc/apache2$ ps aux | grep "/usr/sbin/apache[2]" root 28935 0.0 0.9 80888 4608 ? Ss 23:56 0:00 /usr/sbin/apache2 -k start www-data 28938 0.0 0.7 690016 3992 ? Sl 23:56 0:00 /usr/sbin/apache2 -k start
  43. 43. (ヽ´ω`)
  44. 44. KVS / memcached • 作成途中だったのですが、時間切れで まだ出来ていません m(__)m • ModPerl::Memcached という名前で近い うちにGitHubに上げられる…はず! • HTTP KVS APIはmod_perl開発経験あり だったんですけど
  45. 45. 誰得なんですか? • 受託現場等で「memcached? ( ゚Д゚)ハァ?」 と言われれるケースは今も無くはない • でも「Apacheです( ー`дー´)キリッ」と言って おけばOKな場合がある (∩´∀`)∩ワーイ • 多様な実装例としても面白い
  46. 46. こんなのもやりたい • DNS (qpsmtpd的コンセプト) bindの代替 • POP3/IMAP4 • WebSocket → PocketIO, Mojolicious • SPDY HTTP/2.0 → Apache側が対応する? • その他、夢が広がるApacheのサーバ!
  47. 47. おわび • 超絶技巧成分が足りなくてすみません • 応募時タイトルを大仰にしてしまった • これからの活躍にご期待ください! • GitHub: xtetsuji • Twitter: @xtetsuji / @mod_perl_info
  48. 48. III. まとめ
  49. 49. まとめ(1/3) • mod_perlの学習コストは他のサーバと 同じくらいでApacheの信頼性に依れる • 今なら、書ける状況であればAnyEvent でサーバを書いたほうが汎用性がある という意見には賛成
  50. 50. まとめ(2/3) • Apache2.4問題の解決がいつになるか、 またevent MPMとの応用はどうなるか • Apache2.6は開発中であるがApache2 API は変わらない • Apache3.0という幻が具現化したとき、 APIを断絶するか?
  51. 51. まとめ(3/3) • 受託現場等で「新しいもの」が受け入 れられない場合、根強いApache信仰 を利用するmod_perl2開発はオイシイ • Apacheが培った堅牢性、その上に乗る ことができるAPIを使わない手は無い
  52. 52. Timeup? • 実は個人的には商用環境ではmod_perl の直接の使用を徐々に減らしている • とはいえmod_perlは面白い教材なので 今後は色々なレガシーに困っている人 のためにmod_perlを研究していきたい • Do you have any questions?
  53. 53. ご清聴 ありがとうございました

×