• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
フラクタリスト技術知識共有会発表資料 090903
 

フラクタリスト技術知識共有会発表資料 090903

on

  • 2,322 views

フラクタリスト技術知識共有会 2009-09-03 プレゼン資料

フラクタリスト技術知識共有会 2009-09-03 プレゼン資料

Statistics

Views

Total Views
2,322
Views on SlideShare
2,149
Embed Views
173

Actions

Likes
1
Downloads
3
Comments
0

4 Embeds 173

http://techknowledge.ngigroup.com 102
http://techknowledge.fractalist.jp 59
http://webcache.googleusercontent.com 9
http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    フラクタリスト技術知識共有会発表資料 090903 フラクタリスト技術知識共有会発表資料 090903 Presentation Transcript

    • mod_perlで簡単Apacheモジュール開発
      Takayuki Hirayama
      1
      Copyright 2009  Fractalist inc. All rights reserved.
    • mod_perlって何者?
      よくある誤解
      CGIの高速なやつ×
      Apacheに組み込んだPerlインタープリタ(例:PHP)×
      ApacheのAPIにPerlでアクセスできるようにし、Apacheのモジュール(プラグイン)を
      Perlで開発できるようにするもの
      2
      Copyright 2009  Fractalist inc. All rights reserved.
    • mod_perlの要素
      mod_perlとmod_perl2がある
      mod_perl : Apache1.3系用
      mod_perl2 : Apache2.x系用
      Apacheから見たmod_perlハンドラ(mod_perl2)
      mod_perlハンドラ
      完全にApacheモジュールとして開発する
      パラメータなどは全てAPIを通じて取得する
      高速
      cgi-scriptハンドラ
      プログラム側からCGI風にパラメータ取得できる
      %ENVパラメータにパラメータ格納
      printで出力
      開発環境ではCGIとして開発できるので開発しやすい
      ModPerl::Registry レスポンスハンドラでCGIとして書かれたプログラムを動かせる
      ただしグローバル変数などの挙動に制約あり
      3
      Copyright 2009  Fractalist inc. All rights reserved.
    • httpd.conf
      mod_perlハンドラ
      LoadModuleperl_module modules/mod_perl.so
      # MyApp::Apache2::HelloWorldモジュールにハンドラを実装する
      # /somewhere/perl/lib 以下に.pmファイルを置く
      PerlSwitches-I/somewhere/perl/lib
      # 事前ロード
      PerlModuleMyApp::Apache2::HelloWorld
      # 特定ロケーションにハンドラを設定
      <Location /index>
      SetHandlermodperl
      PerlResponseHandlerMyApp::Apache2::HelloWorld
      </Location>
      cgi-script ハンドラ + ModPerl::Registry
      LoadModuleperl_modulemodules/mod_perl.so
      <Location “/index.cgi”>
      # perl-scriptセットハンドラを指定して、
      # PerlResponseHandlerにModPer::Registryを指定する
      SetHandlerperl-script
      PerlResponseHandlerModPerl::Registry
      </Location>
      4
      Copyright 2009  Fractalist inc. All rights reserved.
    • Apache2のHTTPリクエストライフサイクル
      デフォルトのハンドラを「上書きする」ハンドラをモジュールとして提供する
      ※ http://perl.apache.org/docs/2.0/user/handlers/http.html より引用
      5
      Copyright 2009  Fractalist inc. All rights reserved.
    • 何が作れるの?
      レスポンスハンドラ(PerlResponseHandler)
      パラメータに応じたレスポンス
      (通常のWebアプリケーション)
      プロトコルハンドラ
      カスタム認証ハンドラ(PerlAuthzHandler)
      カスタムログ出力(PerlLogHandler)
      Input/Output Filterハンドラ
      全てのリクエストに対し一定の処理をかける(PerlInputFilterHandler)
      全てのレスポンスに対し事後的に一定の処理をかける(PerlOutputFilterHandler)
      6
      Copyright 2009  Fractalist inc. All rights reserved.
    • ソースはどんな感じ?
      #file:/somewhere/perl/lib/MyApp/Apache2/HelloWorld.pm
      #----------------------
      package MyApp::Apache2::HelloWorld;
      use strict;
      use warnings;
      use Apache2::RequestRec ();
      use Apache2::RequestIO ();
      # 定数の宣言
      use Apache2::Const -compile => qw(OK);
      # ハンドラメソッドの宣言
      # これだけ!
      sub handler {
      my $r = shift; # Apache2::RequestRecObjectが引数に入ってくる
      $r->content_type(‘text/plain’); # HTTPヘッダの格納
      $r->print( “Hello World! ” ); # 出力結果の格納
      return Apache2::Const::OK;
      }
      1;
      7
      Copyright 2009  Fractalist inc. All rights reserved.
      クラスメソッドとして定義することもできる
      継承などが利用できるので開発効率大
      開発用のオートリロードも可能
    • 特徴1:高速+軽快!
      Apache起動時に実行イメージをロードする
      PHPでは基本的にインタプリタのみロード
      必要最小限のモジュールのみ使用するようにできるので、実行イメージが小さくなる
      必ずしも大きなWAFに頼る必要はない
      Ruby on RailsやCakePHPでは原則オールインワンで利用せざるを得ない
      ハンドラだけ定義できるので場合によっては限定的な影響範囲にのみ適用できる
      8
      Copyright 2009  Fractalist inc. All rights reserved.
    • 特徴2:高い開発効率
      C言語でなくPerlで記述できる
      リソースの垣根が低い
      枯れた技術/モジュール等資産の再活用
      多彩なCPANモジュールを利用できる
      CGI
      URI
      Encode
      Log::Log4perl
      HTTP::MobileAgent
      etc…
      ミドルウェアとの連携も容易
      memcached
      DBI
      9
      Copyright 2009  Fractalist inc. All rights reserved.
    • 特徴3:変数ライフサイクル
      Apache親プロセスと子プロセスでファイルロードタイミングなどを意識できる
      10
      Copyright 2009  Fractalist inc. All rights reserved.
      Apache
      親プロセス
      リクエスト
      Apache
      子プロセス
      fork(2)
      レスポンス
      Apache
      子プロセス
      Apache
      子プロセス
      Apache
      子プロセス
      Apache
      子プロセス
      Apacheのpreforkモデルのイメージ
    • まとめ
      利用シチュエーション
      広告配信
      カスタムログ収集
      その他小さいアプリケーションを短期間で開発したい場合
      まとめ
      11
      Copyright 2009  Fractalist inc. All rights reserved.
      Webアプリケーションの開発要件に応じて
      様々な形態から採用検討することが重要