Your SlideShare is downloading. ×
  • Like
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua

  • 4,372 views
Published

Apache2.4とmod_luaについて

Apache2.4とmod_luaについて

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,372
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
9
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Apache 2.4系とmod_luaについて 第2回 松本勉強会 5月25日 京都大学 情報学研究科 松本 亮介 @matsumotory
  • 2. 今日の発表1. Apache 2.4 – 変更点概要 – Apache2.4と2.2とNginxの比較ベンチマーク2. mod_luaとは3. mod_luaサンプル4. まとめ 適宜、質問・指摘・アドバイス下さい!
  • 3. 1. Apache 2.4
  • 4. Apache 2.4 リリース• 2012年4月20日にリリース – 数年ぶりの安定板 – 実際にはML上で結構適当に多数決で決まっている• Nginxに対抗した実装に変更 – パフォーマンス改善 – メモリ使用量低減 – I/O多重化採用 – プロキシやキャッシュ周りの改善詳しくは・・・http://people.apache.org/~jim/presos/ACNA11/Apache_httpd_cloud.pdf
  • 5. Apache 2.4 変更点• 2.2から様々な新機能が追加・変更 – MPMがLoadableに – defaultのMPMが変更 • preforkからevent_mpmへ – 様々なモジュールや機能が追加・改善 • mod_sed、mod_lua、bufferedlogs、rotatelogs – <If><Elseif><Else>の記述が可能 – error_logのformat指定 – mod_cgiがmod_cgidへ ⇒ 性能改善してるのかベンチマークで確認
  • 6. Apache 2.4 vs Nginx vs Apache 2.2 (静的コンテンツ)
  • 7. Apache 2.4 vs Apache 2.2(動的コンテンツ) (2.4event vs 2.2 prefork)
  • 8. Apache 2.4 vs Apache 2.2 (動的コンテンツ) (2.4prefork vs 2.2 prefork)
  • 9. Apache 2.2 vs Apache 2.2(2.2prefork php5.1 vs 2.2 prefork php5.3)
  • 10. Apache 2.4 ベンチマーク• 結構もめました – 僕のベンチマークが世界に広まる – Apacheの人 vs Nginxの人が喧嘩 – Nginx側のベンチマーク(同時接続数重視)が出る • Nginxの方が性能いいと主張 • Apacheの人が環境設定等にケチをつける • Nginxの人は引き下がる(Apacheの人多過ぎ) • http://blog.zhuzhaoyuan.com/2012/02/apache-24-faster-than- nginx/⇒ ベンチマークはその環境だとその結果となる目安であって優劣を決めるものではない by Apacheコアの人
  • 11. 2. mod_luaとは
  • 12. mod_luaとは• Apache2.4の新機能(厳密には2.3から) – 軽量組み込みスクリプトLuaをApacheで動かす • Luaは非常に軽量で高速(スクリプト言語最速) • Webコンテンツとして扱う • Apacheモジュールの実装を支援する – Apacheモジュールの実装を支援に注目 • LuaスクリプトをApacheにフックさせるためのインターフェイス • Luaスクリプト内にApacheの内部処理を実装可能 • mod_perl、mod_ruby等より軽量で早い ⇒ Cでの実装不要で保守性高く開発の敷居も下がる
  • 13. 3. mod_luaサンプル
  • 14. mod_lua サンプル1. 単純なrewriteのような処理 – uri2file() – ある条件でアクセスファイルを変更2. 任意の時間帯のみ別のサーバへ負荷分散 – golden_balancer() – 19時から24時は別のサーバへリダイレクト3. mod_lalimitをLuaで書き換えてみた – load_checker() – 任意のロードアベレージを超えてていたら503を返す – Cで実装する場合と比べてどれくらいコード行数が減るか
  • 15. require "apache2" rewriteのような処理function uri2file(r) if string.match(r.uri, ".*¥.php") then r.filename = "/usr/local/apache2.4/htdocs/".. r.hostname .."/".. r.uri end return apache2.DECLINEDend 夜の19時から24時はfunction golden_balancer(r) サーバ分散する処理 ctime = os.date("%H") if ctime > 19 then if math.random() < 0.5 then r.headers_out["Location"] = "http://server2.example.com/".. r.uri return apache2.HTTP_MOVED_TEMPORARILY end else return apache2.DECLINED endend
  • 16. require "apache2"load_limit = 2 LoadAvgを取得function get_load() file = io.open(/proc/loadavg, r) state = file:read(*a) file:close() cload = string.match(state, (%d+¥.%d+)%s+.*) return cloadendfunction load_checker(r) if string.match(r.filename, "^.*¥.php$") then LoadAvgを比較 cload = tonumber(get_load()) if cload > load_limit then r:warn(r.filename .. “is CGI. current load(”.. cload ..“) is highter than load_limit(".. load_limi r:puts("Sorry. loadavg high!") return 503 else r:debug(r.filename .. "is CGI. current load(".. cload ..") is lower than load_limit(".. load_lim end end return apache2.OKend 900行が30行くらいに
  • 17. mod_lua 設定Loadmodule lua_module modules/mod_lua.soLuaHookTranslateName conf/extra/lua/mapper.lua uri2fileLuaHookTranslateName conf/extra/lua/mapper.lua golden_balancerLuaHookAccessChecker conf/extra/lua/access_checker.lua load_check • LuaのfunctionをApache内部でhook – Luaスクリプトを変更すれば即反映 – 誰でも簡単にApacheモジュールが作れる – 問題点 • Luaがインフラエンジニアには普及していない • モジュール支援としては実装できてない所が多い • Luaの仕様上スクリプトの都度state作成とコンパイル必要 • それでも他のスクリプトよりは十分早くて軽量
  • 18. 4. まとめ
  • 19. Apache 2.4 と mod_luaのまとめ• Apache2.4 – Nginxを意識し過ぎ? • 動的コンテンツの処理が遅くなるのは良くない • event_mpmがうまく動かなくなる事例もある • しばらく様子見 – 新機能は充実 • mod_luaでApacheモジュールの夢が広がる • BufferedLogsやrotatelogなどのLog周りも充実 • 監視、Log、分析が今後の流行り• mod_lua – 個人的には中途半端な印象 – mod_mrubyを開発中
  • 20. ご清聴ありがとうございました