SlideShare a Scribd company logo
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に対抗した実装に変更
  –   パフォーマンス改善
  –   メモリ使用量低減
  –   I/O多重化採用
  –   プロキシやキャッシュ周りの改善

詳しくは・・・
http://people.apache.org/~jim/presos/ACNA11/Ap
ache_httpd_cloud.pdf
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へ

 ⇒ 性能改善してるのかベンチマークで確認
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の方が性能いいと主張
   •   Apacheの人が環境設定等にケチをつける
   •   Nginxの人は引き下がる(Apacheの人多過ぎ)
   •   http://blog.zhuzhaoyuan.com/2012/02/apache-24-faster-than-
       nginx/


⇒ ベンチマークはその環境だとその結果となる目安で
あって優劣を決めるものではない by Apacheコアの人
2. mod_luaとは
mod_luaとは
• Apache2.4の新機能(厳密には2.3から)
 – 軽量組み込みスクリプトLuaをApacheで動かす
   • Luaは非常に軽量で高速(スクリプト言語最速)
   • Webコンテンツとして扱う
   • Apacheモジュールの実装を支援する


 – Apacheモジュールの実装を支援に注目
   • LuaスクリプトをApacheにフックさせるためのインターフェイス
   • Luaスクリプト内にApacheの内部処理を実装可能
   • mod_perl、mod_ruby等より軽量で早い


  ⇒ Cでの実装不要で保守性高く開発の敷居も下がる
3. mod_luaサンプル
mod_lua サンプル
1. 単純なrewriteのような処理
 –   uri2file()
 –   ある条件でアクセスファイルを変更
2. 任意の時間帯のみ別のサーバへ負荷分散
 –   golden_balancer()
 –   19時から24時は別のサーバへリダイレクト
3. mod_lalimitをLuaで書き換えてみた
 –   load_checker()
 –   任意のロードアベレージを超えてていたら503を返す
 –   Cで実装する場合と比べてどれくらいコード行数が減るか
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.DECLINED
end
                                               夜の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
  end
end
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 cload
end
function 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.OK
end                                     900行が30行くらいに
mod_lua 設定
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

 • LuaのfunctionをApache内部でhook
    – Luaスクリプトを変更すれば即反映
    – 誰でも簡単にApacheモジュールが作れる
    – 問題点
        •   Luaがインフラエンジニアには普及していない
        •   モジュール支援としては実装できてない所が多い
        •   Luaの仕様上スクリプトの都度state作成とコンパイル必要
        •   それでも他のスクリプトよりは十分早くて軽量
4. まとめ
Apache 2.4 と mod_luaのまとめ
• Apache2.4
  – Nginxを意識し過ぎ?
    • 動的コンテンツの処理が遅くなるのは良くない
    • event_mpmがうまく動かなくなる事例もある
    • しばらく様子見
  – 新機能は充実
    • mod_luaでApacheモジュールの夢が広がる
    • BufferedLogsやrotatelogなどのLog周りも充実
    • 監視、Log、分析が今後の流行り
• mod_lua
  – 個人的には中途半端な印象
  – mod_mrubyを開発中
ご清聴ありがとうございました

More Related Content

PDF
Mod mrubyについて
PPTX
Mod lua
PDF
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
PDF
成長を加速する minne の技術基盤戦略
PDF
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
PDF
Webサーバ勉強会03
PDF
MHA for MySQLとDeNAのオープンソースの話
PDF
Web技術勉強会23回目
Mod mrubyについて
Mod lua
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
成長を加速する minne の技術基盤戦略
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
Webサーバ勉強会03
MHA for MySQLとDeNAのオープンソースの話
Web技術勉強会23回目

What's hot (20)

PDF
Docker+CoreOS+GCEで自動スケール分散レイトレ
PDF
Chefを利用した運用省力化とDevOpsの取り組みについて
PDF
今日から使い始めるChef
KEY
Automation tech casual_talks_1_20120717
PDF
Webサーバのチューニング
PPTX
Linux Server 冗長化~リアルタイム同期でラクラク運用~
PDF
OpenJDK コミュニティに参加してみよう #jjug
PDF
Dockerと継続的インテグレーション
PDF
nginx入門
PDF
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
PPT
Using Windows Azure
PPTX
LINEのMySQL運用について 修正版
PDF
MaxScaleを触ってみた
PPTX
microPCFを使ってみよう
PDF
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PDF
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
PPTX
Apacheチューニング
PPTX
Appsody でnodejsのアプリを立ち上げよう!
Docker+CoreOS+GCEで自動スケール分散レイトレ
Chefを利用した運用省力化とDevOpsの取り組みについて
今日から使い始めるChef
Automation tech casual_talks_1_20120717
Webサーバのチューニング
Linux Server 冗長化~リアルタイム同期でラクラク運用~
OpenJDK コミュニティに参加してみよう #jjug
Dockerと継続的インテグレーション
nginx入門
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
Using Windows Azure
LINEのMySQL運用について 修正版
MaxScaleを触ってみた
microPCFを使ってみよう
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Apacheチューニング
Appsody でnodejsのアプリを立ち上げよう!
Ad

Similar to 第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua (20)

PDF
SDLoader SeasarCon 2009 Whire
PDF
qmake入門
KEY
Web Operations and Perl kansai.pm#14
PDF
Building production server on docker
ODP
Building production server on docker
PDF
lilo.linux.or.jp の話 (2017年8月)
PPTX
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
PDF
Using ngx_lua / lua-nginx-module in pixiv
PDF
Open stack reference architecture v1 2
PPTX
2019年度 CaaS ワークショップ @ NTTコム
PDF
SQL Server エンジニア のための コンテナ入門
PDF
SQL Server エンジニアのためのコンテナ入門
PDF
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
PPT
Apache Module
PDF
Version管理 1
PDF
Jjug springセッション
PDF
Rails解説セミナー: リリースノート解説編
PDF
DockerでAlmaLinux(web, php, pukiwiki)環境構築
PPTX
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
PDF
ECS-CLI in Action
SDLoader SeasarCon 2009 Whire
qmake入門
Web Operations and Perl kansai.pm#14
Building production server on docker
Building production server on docker
lilo.linux.or.jp の話 (2017年8月)
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
Using ngx_lua / lua-nginx-module in pixiv
Open stack reference architecture v1 2
2019年度 CaaS ワークショップ @ NTTコム
SQL Server エンジニア のための コンテナ入門
SQL Server エンジニアのためのコンテナ入門
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Apache Module
Version管理 1
Jjug springセッション
Rails解説セミナー: リリースノート解説編
DockerでAlmaLinux(web, php, pukiwiki)環境構築
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
ECS-CLI in Action
Ad

More from Ryosuke MATSUMOTO (6)

PDF
Saint2012 mod process security
PDF
軽量Ruby『mruby』について
PDF
20120525 mt websocket
PDF
第1回 松本勉強会 2012 05 11 - 公開版
PDF
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
PDF
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
Saint2012 mod process security
軽量Ruby『mruby』について
20120525 mt websocket
第1回 松本勉強会 2012 05 11 - 公開版
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ

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

  • 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. まとめ 適宜、質問・指摘・アドバイス下さい!
  • 4. Apache 2.4 リリース • 2012年4月20日にリリース – 数年ぶりの安定板 – 実際にはML上で結構適当に多数決で決まっている • Nginxに対抗した実装に変更 – パフォーマンス改善 – メモリ使用量低減 – I/O多重化採用 – プロキシやキャッシュ周りの改善 詳しくは・・・ http://people.apache.org/~jim/presos/ACNA11/Ap ache_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コアの人
  • 12. mod_luaとは • Apache2.4の新機能(厳密には2.3から) – 軽量組み込みスクリプトLuaをApacheで動かす • Luaは非常に軽量で高速(スクリプト言語最速) • Webコンテンツとして扱う • Apacheモジュールの実装を支援する – Apacheモジュールの実装を支援に注目 • LuaスクリプトをApacheにフックさせるためのインターフェイス • Luaスクリプト内にApacheの内部処理を実装可能 • mod_perl、mod_ruby等より軽量で早い ⇒ Cでの実装不要で保守性高く開発の敷居も下がる
  • 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.DECLINED end 夜の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 end end
  • 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 cload end function 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.OK end 900行が30行くらいに
  • 17. mod_lua 設定 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 • LuaのfunctionをApache内部でhook – Luaスクリプトを変更すれば即反映 – 誰でも簡単にApacheモジュールが作れる – 問題点 • Luaがインフラエンジニアには普及していない • モジュール支援としては実装できてない所が多い • Luaの仕様上スクリプトの都度state作成とコンパイル必要 • それでも他のスクリプトよりは十分早くて軽量
  • 19. Apache 2.4 と mod_luaのまとめ • Apache2.4 – Nginxを意識し過ぎ? • 動的コンテンツの処理が遅くなるのは良くない • event_mpmがうまく動かなくなる事例もある • しばらく様子見 – 新機能は充実 • mod_luaでApacheモジュールの夢が広がる • BufferedLogsやrotatelogなどのLog周りも充実 • 監視、Log、分析が今後の流行り • mod_lua – 個人的には中途半端な印象 – mod_mrubyを開発中