Apache 2.4系とmod_luaについて  第2回 松本勉強会 5月25日   京都大学 情報学研究科  松本 亮介 @matsumotory
今日の発表1. Apache 2.4  – 変更点概要  – Apache2.4と2.2とNginxの比較ベンチマーク2. mod_luaとは3. mod_luaサンプル4. まとめ       適宜、質問・指摘・アドバイス下さい!
1. Apache 2.4
Apache 2.4 リリース• 2012年4月20日にリリース  – 数年ぶりの安定板  – 実際にはML上で結構適当に多数決で決まっている• Nginxに対抗した実装に変更  –   パフォーマンス改善  –   メモリ使用量低減  –  ...
Apache 2.4 変更点• 2.2から様々な新機能が追加・変更 – MPMがLoadableに – defaultのMPMが変更   • preforkからevent_mpmへ – 様々なモジュールや機能が追加・改善   • mod_sed...
Apache 2.4 vs Nginx vs Apache 2.2       (静的コンテンツ)
Apache 2.4 vs Apache 2.2(動的コンテンツ)        (2.4event vs 2.2 prefork)
Apache 2.4 vs Apache 2.2 (動的コンテンツ)       (2.4prefork vs 2.2 prefork)
Apache 2.2 vs Apache 2.2(2.2prefork php5.1 vs 2.2 prefork php5.3)
Apache 2.4 ベンチマーク• 結構もめました – 僕のベンチマークが世界に広まる – Apacheの人 vs Nginxの人が喧嘩 – Nginx側のベンチマーク(同時接続数重視)が出る   •   Nginxの方が性能いいと主張   ...
2. mod_luaとは
mod_luaとは• Apache2.4の新機能(厳密には2.3から) – 軽量組み込みスクリプトLuaをApacheで動かす   • Luaは非常に軽量で高速(スクリプト言語最速)   • Webコンテンツとして扱う   • Apacheモジ...
3. mod_luaサンプル
mod_lua サンプル1. 単純なrewriteのような処理 –   uri2file() –   ある条件でアクセスファイルを変更2. 任意の時間帯のみ別のサーバへ負荷分散 –   golden_balancer() –   19時から24...
require "apache2"                                             rewriteのような処理function uri2file(r)  if string.match(r.uri, "....
require "apache2"load_limit = 2                                                          LoadAvgを取得function get_load()  fi...
mod_lua 設定Loadmodule lua_module modules/mod_lua.soLuaHookTranslateName conf/extra/lua/mapper.lua uri2fileLuaHookTranslateN...
4. まとめ
Apache 2.4 と mod_luaのまとめ• Apache2.4  – Nginxを意識し過ぎ?    • 動的コンテンツの処理が遅くなるのは良くない    • event_mpmがうまく動かなくなる事例もある    • しばらく様子見 ...
ご清聴ありがとうございました
Upcoming SlideShare
Loading in...5
×

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

5,258

Published on

Apache2.4とmod_luaについて

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,258
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Apache 2.4系とmod_luaについて 第2回 松本勉強会 5月25日 京都大学 情報学研究科 松本 亮介 @matsumotory
  2. 2. 今日の発表1. Apache 2.4 – 変更点概要 – Apache2.4と2.2とNginxの比較ベンチマーク2. mod_luaとは3. mod_luaサンプル4. まとめ 適宜、質問・指摘・アドバイス下さい!
  3. 3. 1. Apache 2.4
  4. 4. Apache 2.4 リリース• 2012年4月20日にリリース – 数年ぶりの安定板 – 実際にはML上で結構適当に多数決で決まっている• Nginxに対抗した実装に変更 – パフォーマンス改善 – メモリ使用量低減 – I/O多重化採用 – プロキシやキャッシュ周りの改善詳しくは・・・http://people.apache.org/~jim/presos/ACNA11/Apache_httpd_cloud.pdf
  5. 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. 6. Apache 2.4 vs Nginx vs Apache 2.2 (静的コンテンツ)
  7. 7. Apache 2.4 vs Apache 2.2(動的コンテンツ) (2.4event vs 2.2 prefork)
  8. 8. Apache 2.4 vs Apache 2.2 (動的コンテンツ) (2.4prefork vs 2.2 prefork)
  9. 9. Apache 2.2 vs Apache 2.2(2.2prefork php5.1 vs 2.2 prefork php5.3)
  10. 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. 11. 2. mod_luaとは
  12. 12. mod_luaとは• Apache2.4の新機能(厳密には2.3から) – 軽量組み込みスクリプトLuaをApacheで動かす • Luaは非常に軽量で高速(スクリプト言語最速) • Webコンテンツとして扱う • Apacheモジュールの実装を支援する – Apacheモジュールの実装を支援に注目 • LuaスクリプトをApacheにフックさせるためのインターフェイス • Luaスクリプト内にApacheの内部処理を実装可能 • mod_perl、mod_ruby等より軽量で早い ⇒ Cでの実装不要で保守性高く開発の敷居も下がる
  13. 13. 3. mod_luaサンプル
  14. 14. mod_lua サンプル1. 単純なrewriteのような処理 – uri2file() – ある条件でアクセスファイルを変更2. 任意の時間帯のみ別のサーバへ負荷分散 – golden_balancer() – 19時から24時は別のサーバへリダイレクト3. mod_lalimitをLuaで書き換えてみた – load_checker() – 任意のロードアベレージを超えてていたら503を返す – Cで実装する場合と比べてどれくらいコード行数が減るか
  15. 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. 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. 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. 18. 4. まとめ
  19. 19. Apache 2.4 と mod_luaのまとめ• Apache2.4 – Nginxを意識し過ぎ? • 動的コンテンツの処理が遅くなるのは良くない • event_mpmがうまく動かなくなる事例もある • しばらく様子見 – 新機能は充実 • mod_luaでApacheモジュールの夢が広がる • BufferedLogsやrotatelogなどのLog周りも充実 • 監視、Log、分析が今後の流行り• mod_lua – 個人的には中途半端な印象 – mod_mrubyを開発中
  20. 20. ご清聴ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×