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

20
Apache 2.4系とmod_luaについて 2松本勉強会 525京都大学 情報学研究科 松本 亮介 @matsumotory

description

Apache2.4とmod_luaについて

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

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

Apache 2.4系とmod_luaについて

第2回 松本勉強会 5月25日

京都大学 情報学研究科

松本 亮介 @matsumotory

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

今日の発表

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

1. Apache 2.4

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

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

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

Apache 2.4 vs Nginx vs Apache 2.2 (静的コンテンツ)

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

Apache 2.4 vs Apache 2.2(動的コンテンツ) (2.4event vs 2.2 prefork)

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

Apache 2.4 vs Apache 2.2 (動的コンテンツ) (2.4prefork vs 2.2 prefork)

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

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

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

2. mod_luaとは

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

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

3. mod_luaサンプル

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

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

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

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

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

4. まとめ

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

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

ご清聴ありがとうございました