mod_perlで動くアプリをどう置くか尾形 鉄次 (OGATA Tetsuji)Twitter: @xtetsuji2013/6/15 Hachioji.pm#29 LT
自己紹介• 尾形 鉄次 (OGATA Tetsuji)• Twitter: @xtetsuji• Blog: http://post.tetsuji.jp/• Apache mod_perlの研究がライフワーク?
テーマ:ホスティング
あんまりよくわからない
ISPの伝統芸能• 10年以上前を思い返す• 共用ホームページスペース• 「Perl CGIが動きます」• あれの原理はどうだったんだろう
ISPの伝統芸能• chroot• suEXEC• Perl CGI• FTP• …•ヤバい黒魔術ばかりだ!!!
「伝統芸能」が進化しなかった理由• より自由度の高いレンサバやPaaSの台頭• ASP型サービスやSNSのような出来合いのものに興味が移る→自分で作る意味合いがなくなる• そしてISPもそこにコストをかけなくなった
mod_perlのホスティングを考えてみる• Perl CGI高速化環境で見た場合、先ほどと同じ伝統芸能をするハックが大変• Perl CGI高速化環境(Registryファミリー)は内部で仮想的な名前空間を作成するから、Apache内でユーザ...
コア部分を見る• ModPerl::RegistryCooker (mod_perl2)• Perl CGI高速化環境を提供しているRegistryファミリーのスーパークラス• 実際はVirtualHostと絶対パスのURLから仮想的な名前空間...
sub make_namespace {my $self = shift;my $package = $self->namespace_from;# Escape everything into valid perl identifiers$p...
みんな大好きPlackではどうなっているかな?• PlackではPlack::Utilが *.psgi のコンパイルを行っている• 手法としてはmod_perlとまるで同じ!• sprintf部分を見てください!• Plack/Util.pmの...
sub _load_sandbox {my $_file = shift;my $_package = $_file;$_package =~ s/([^A-Za-z0-9_])/sprintf("_%2x", unpack("C",$1))/...
伝統芸能 meets Plack?• VirtualHostとURLで動的にapp.psgiを読み込んでユーザ切り分けするPlack環境は可能か?• mod_perlのPerl CGI高速化環境と同様の理由で切り分けは難しい• Perl(Pla...
セキュリティ的には• インタプリタが読んだ「パッケージ」を読み出せればセキュリティ崩壊• %INCで簡単にいけるんじゃない?• PerlRun読み捨て環境でもモジュールについてはmod_perlは同じ事情
前回のPerlBeginnersで• mod_perl2環境上でPlackを使ってapp.psgiを動作させる方法の質問があって意外• Plack::Handler::Apache2 を使う• ウェブを検索してもplackupしてポートをリバー...
_人人人人人人人人人_> 根強いplackup信仰 < ̄^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
Plack and mod_perl• とはいえ、知られていないことは結構意外だった。個人的に。• mod_perl思想(ModPerl::RegistryCooker)がPlack(Plack::Util)にも活きている感動• plackup...
Plack and mod_perl• plackupしたらポート開いてサーバ起動• インフラ担当者「誰がどう監視するんですか?落ちたらどうするですか?」• Apacheだけで完結するとインフラ担当者を せる効果的に説得できる
_人人人人人人人人人_> 根強いApache信仰 < ̄^Y^Y^Y^Y^Y^Y^Y^Y^
Tribute of Mr. Miyagawa• Miyagawaさん自身、超mod_perl Hacker• 20世紀からmod_perl1のApache::RegistryによるPerl CGIの高速化についてトークしている• 当時のSle...
Plack and mod_perl• mod_perlのPerl CGIがISPに見放されたのと同じ理由でPlackのISPホスティングは技術的に難しいというか面倒• ファイルベースで app.psgi を読み込むPlack::Handler...
最近のApacheでは• VirtualHostごとにpreforkの子プロセスを分ける方法もある(らしい)• ユーザごとにサブドメインを動的生成する仕組みを用意すればイケる?• とはいえ興味深い仕事ではないなぁ…
お役立ち情報です• 大人が直面する「環境の縛りプレイ」• Plack入れる→インフラ担当者が不機嫌になる超大量の依存関係• 根強いApache(mod_perl)信仰を利用してModPerl::PSGIを作成中です!
ModPerl::PSGI• 単に個人的な勉強という観点から、PSGIの仕様書だけから書きだしてみた• 車輪の再発明回避と驚き最小の原則を考えPlack::Handler::Apache2を大いに参考とするように方針転換した
Plack::Handler::Apache2からの改善点• ModPerl::PSGIはPlack::*の依存関係は無い• URIとURI::Escape依存をApache2のC APIで置き換えたので早くなっているはず• まだ(怖くて)Gi...
mod_perl大好き• 最後のほう、ホスティングの話を放置してmod_perlの宣伝をする身勝手さ• Plack⊃PSGIであってPlack≠PSGIだよ• ModPerl::PSGIの成果は実績が出来たらPlackへcontribute予定
おがた先生の次回作にご期待ください
ご清聴ありがとうございました
mod_perlで動くアプリをどう置くか #hachiojipm
Upcoming SlideShare
Loading in …5
×

mod_perlで動くアプリをどう置くか #hachiojipm

1,772 views

Published on

「ホスティング」というテーマをもとに、2013/06/15開催された Hachioji.pm#29 で発表したLTのスライドに若干の手直し(不備の修正)をしたものです。

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,772
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

mod_perlで動くアプリをどう置くか #hachiojipm

  1. 1. mod_perlで動くアプリをどう置くか尾形 鉄次 (OGATA Tetsuji)Twitter: @xtetsuji2013/6/15 Hachioji.pm#29 LT
  2. 2. 自己紹介• 尾形 鉄次 (OGATA Tetsuji)• Twitter: @xtetsuji• Blog: http://post.tetsuji.jp/• Apache mod_perlの研究がライフワーク?
  3. 3. テーマ:ホスティング
  4. 4. あんまりよくわからない
  5. 5. ISPの伝統芸能• 10年以上前を思い返す• 共用ホームページスペース• 「Perl CGIが動きます」• あれの原理はどうだったんだろう
  6. 6. ISPの伝統芸能• chroot• suEXEC• Perl CGI• FTP• …•ヤバい黒魔術ばかりだ!!!
  7. 7. 「伝統芸能」が進化しなかった理由• より自由度の高いレンサバやPaaSの台頭• ASP型サービスやSNSのような出来合いのものに興味が移る→自分で作る意味合いがなくなる• そしてISPもそこにコストをかけなくなった
  8. 8. mod_perlのホスティングを考えてみる• Perl CGI高速化環境で見た場合、先ほどと同じ伝統芸能をするハックが大変• Perl CGI高速化環境(Registryファミリー)は内部で仮想的な名前空間を作成するから、Apache内でユーザごとの厳密な環境の切り分けができない
  9. 9. コア部分を見る• ModPerl::RegistryCooker (mod_perl2)• Perl CGI高速化環境を提供しているRegistryファミリーのスーパークラス• 実際はVirtualHostと絶対パスのURLから仮想的な名前空間を生成してコードのコンパイル結果を入れているだけ
  10. 10. sub make_namespace {my $self = shift;my $package = $self->namespace_from;# Escape everything into valid perl identifiers$package =~ s/([^A-Za-z0-9_])/sprintf("_%2x", unpack("C",$1))/eg;# make sure that the sub-package doesnt start with a digit$package =~ s/^(d)/_$1/;# prepend root$package = $self->namespace_root() . "::$package";$self->{PACKAGE} = $package;return $package;}
  11. 11. みんな大好きPlackではどうなっているかな?• PlackではPlack::Utilが *.psgi のコンパイルを行っている• 手法としてはmod_perlとまるで同じ!• sprintf部分を見てください!• Plack/Util.pmの該当部分を見てみよう
  12. 12. sub _load_sandbox {my $_file = shift;my $_package = $_file;$_package =~ s/([^A-Za-z0-9_])/sprintf("_%2x", unpack("C",$1))/eg;local $0 = $_file; # so FindBin etc. workslocal @ARGV = (); # Some frameworks might try to parse@ARGVreturn eval sprintf <<END_EVAL, $_package;package Plack::Sandbox::%s;{my $app = do $_file;if ( !$app && ( my $error = $@ || $! )) { die $error; }$app;}END_EVAL}
  13. 13. 伝統芸能 meets Plack?• VirtualHostとURLで動的にapp.psgiを読み込んでユーザ切り分けするPlack環境は可能か?• mod_perlのPerl CGI高速化環境と同様の理由で切り分けは難しい• Perl(Plack)が使えるPaaSが増えてほしい
  14. 14. セキュリティ的には• インタプリタが読んだ「パッケージ」を読み出せればセキュリティ崩壊• %INCで簡単にいけるんじゃない?• PerlRun読み捨て環境でもモジュールについてはmod_perlは同じ事情
  15. 15. 前回のPerlBeginnersで• mod_perl2環境上でPlackを使ってapp.psgiを動作させる方法の質問があって意外• Plack::Handler::Apache2 を使う• ウェブを検索してもplackupしてポートをリバースプロキシする情報ばかりなので仕方が無いかなぁ∼
  16. 16. _人人人人人人人人人_> 根強いplackup信仰 < ̄^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  17. 17. Plack and mod_perl• とはいえ、知られていないことは結構意外だった。個人的に。• mod_perl思想(ModPerl::RegistryCooker)がPlack(Plack::Util)にも活きている感動• plackupせずmod_perl上でapp.psgiを実行するための利点もある
  18. 18. Plack and mod_perl• plackupしたらポート開いてサーバ起動• インフラ担当者「誰がどう監視するんですか?落ちたらどうするですか?」• Apacheだけで完結するとインフラ担当者を せる効果的に説得できる
  19. 19. _人人人人人人人人人_> 根強いApache信仰 < ̄^Y^Y^Y^Y^Y^Y^Y^Y^
  20. 20. Tribute of Mr. Miyagawa• Miyagawaさん自身、超mod_perl Hacker• 20世紀からmod_perl1のApache::RegistryによるPerl CGIの高速化についてトークしている• 当時のSledgeは、数少ないmod_perl教材だったくらい(お世話になりました)
  21. 21. Plack and mod_perl• mod_perlのPerl CGIがISPに見放されたのと同じ理由でPlackのISPホスティングは技術的に難しいというか面倒• ファイルベースで app.psgi を読み込むPlack::Handler::Apache2::Regsitry もあるけど、これを超ハックする?うーん
  22. 22. 最近のApacheでは• VirtualHostごとにpreforkの子プロセスを分ける方法もある(らしい)• ユーザごとにサブドメインを動的生成する仕組みを用意すればイケる?• とはいえ興味深い仕事ではないなぁ…
  23. 23. お役立ち情報です• 大人が直面する「環境の縛りプレイ」• Plack入れる→インフラ担当者が不機嫌になる超大量の依存関係• 根強いApache(mod_perl)信仰を利用してModPerl::PSGIを作成中です!
  24. 24. ModPerl::PSGI• 単に個人的な勉強という観点から、PSGIの仕様書だけから書きだしてみた• 車輪の再発明回避と驚き最小の原則を考えPlack::Handler::Apache2を大いに参考とするように方針転換した
  25. 25. Plack::Handler::Apache2からの改善点• ModPerl::PSGIはPlack::*の依存関係は無い• URIとURI::Escape依存をApache2のC APIで置き換えたので早くなっているはず• まだ(怖くて)GitHubにアップしていませんが、近日アップ予定、期待してね!
  26. 26. mod_perl大好き• 最後のほう、ホスティングの話を放置してmod_perlの宣伝をする身勝手さ• Plack⊃PSGIであってPlack≠PSGIだよ• ModPerl::PSGIの成果は実績が出来たらPlackへcontribute予定
  27. 27. おがた先生の次回作にご期待ください
  28. 28. ご清聴ありがとうございました

×