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