SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
VarnishCache3 <3
    2011/06/18
  いわなちゃん(@xcir)
自己紹介
●   いわなちゃん(@xcir)
●
    携帯向けサイトやソーシャルゲームな会社で
    VarnishやらC#やらPHPやったり
●   Smalllightを最近触ってます
●
    六本木にいます
●
    自炊派なのでクックパッドさんの
    キッチンが羨ましくて困ります



      絡んでくれると喜びます!
VarnishCache3
    リリースおめでとうございます
●
    いろんな新機能が増えましたね
    ●   ESIでのgzipのサポート
    ●   よりスマートな拡張(VMOD)
    ●
        デフォルトパラメータがよくなった
    ●   varnishncsaでカスタムログ形式が使える!
    ●
        ログ系コマンドで正規表現を利用した絞り込み
    ●   vcl_init,vcl_finiの追加
    ●   Rangeリクエストのデフォルト有効
    ●
        ストリームサポート
    ●
        特定のストレージにオブジェクトを格納できる
    ●   Etc...
ESIでのgzipサポート
●   3.0以前ではgzipのオブジェクトを解凍できな
    かった
    ●   つまりESIのように合成を行う場合はすべての要素
        が
        圧縮されていない必要があった
●   3.0以降ではgzip圧縮/解凍ができる
    ●   要素がgzipされていても解釈できる
    ●   格納時にgzip圧縮が可能
        –   なおESIだけのgzip対応ではないので他にも応用できます
        –   例えば今まではgzipしてるのとされていないのでそれぞ
            れキャッシュしてましたがそれが一つですみます
ESIでのgzipサポート
●
    ただ効率的に使用するには
    要素は圧縮されていないのが望ましいです
     ●
          要素が圧縮されてる場合
            –   解凍→ESIコード解釈→その後の処理
     ●
          要素が圧縮されてない場合
            –   ESIコード解釈→その後の処理


    参考VCL
    sub vcl_miss {
         if (ESI処理を必要とするオブジェクト) {
                unset bereq.http.accept-encoding;
         }
    }

    sub vcl_fetch {
         if (ESI処理を必要とするオブジェクト) {
                 set beresp.do_esi = true;
               set beresp.do_gzip = true;
         }
    }
よりスマートな拡張(VMOD)




        @hmskさんが
詳しく説明してくれると思いますので飛ばしま
           す!
デフォルトパラメータが良くなった
●
    パフォーマンスがよくなるように設定されてい
    ます
●
    すでに色々調整されている方はあまり関係ない
    かもしれません
●   面白いのがcc_commandが変わりました
    ●   exec cc -fpic -shared -Wl,-x -o %o %s (3.0以前)
    ●   exec $PTHREAD_CC $OCFLAGS $PTHREAD_CFLAGS -fpic
        -shared -Wl,-x -o %o %s (3.0)
    ●   ここのコマンドはVCLのコンパイルに利用されるので色々調整す
        ると高負荷時に少し変わってきます
varnishncsaでカスタムログが使える!
●   -Fオプションでカスタムログが指定できるよう
    になりました
    ●   varnishncsa -F "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"

●   ・・・が%{XX}iで指定できるヘッダが限られて
    います
    ●   Referer,Host,X-Forwarded-For,User-agent
●   他にも%Dや%Tなどが使えないためApacheの記述そ
    のままとはいきませんのでちょっと注意が必要です
ログ系コマンドで
            正規表現を利用した絞り込み
●   Varnishlog/ncsa/hist/sizesで利用可能です
●
    トランザクション中でマッチするものがあれば出力します
    ●  Varnishlogの場合一致した行だけではなく
       そのトランザクション全部出力します
●   -m Tag:Regexの形式です
    ●   varnishlog -m "TxHeader:X-Cache: HIT"
        –   この場合ヒットしたオブジェクトのログを出力します
ログ系コマンドで
正規表現を利用した絞り込み
vcl_init,vcl_finiの追加
●   VCLがロードされたときにvcl_init
●   VCLがアンロードされたときにvcl_fini
●   β2で確認した呼び出されるパタンです
    ●
        ただ正式版でいくつか見たところ変わらずぽいです
Rangeリクエストのデフォルト有効
●   Rangeリクエストがデフォルトで有効になりま
    した
    (僕のような)携帯で動画を扱うサイトは嬉しいと思い
●




    ます
ストリームサポート
                                   ストリームOFF

       1                  2
            Varnish           バックエンド
        5                 3
                      4


1. ユーザからリクエスト
2. キャッシュがないのでバックエンドに問い合わせ
3. バックエンドがVarnishにレスポンス
4. バックエンドからのレスポンスを受けきるまで待つ
5. ユーザにレスポンス
ストリームサポート
                                ストリームON

       1               2
             Varnish       バックエンド
        3’             3




1. ユーザからリクエスト
2. キャッシュがないのでバックエンドに問い合わせ
3. バックエンドがVarnishにレスポンス
3'. バックエンドからのレスポンスを
   順次ユーザにレスポンス
ストリームサポート

            ストリームOFF




            ストリームON
ストリームサポート
                制限事項
●
    同一ファイルを同時にストリームはできません
    ●
        後続のストリームは保留されます
特定のストレージにオブジェクトを格納できる

●
    まず起動時にストレージの名前が指定できるよ
    うになりました
    ●   -s [ユニーク名=]ストレージタイプ[,opt]
         –   -s filestorage=file,/tmp/0,1G
         –   -s persistentstorage=persistent,/tmp/1,1G
         –   -s memorystorage=malloc,1G
●
    そして付けた名前を利用してどこに格納するか
    指定できます
    ●   set beresp.storage="persistentstorage";
その他の変更点
●   CLI接続してstatsができなくなりました
●   VCLのチェックが厳密になりました
    ●   同じ名前のbackendがある
    ●   Backend内のprobeのキーが重複
    ●   同じ名前のACL
    ●   ↑どれもVCLコンパイルの時に弾かれます
●   VCLのUnusedエラーを無視する起動オプション追加
    ●   -p vcc_err_unref=off
    ●   backendの定義はあるけど参照していない場合でも警告だけ
        でエラーは出ない
こんなにかわった3.0!




Let's enjoy Varnish Cache3.0!!
ちょっとまって!
パラメータの削除があるよ
起動パラメータの互換がない変更点
                          2.1→3.0

●
    削除された物
    ●   cache_vbe_conns
    ●   err_ttl
    ●   purge_dups
●
    名前が変わった物
    ●   http_headers → http_max_hdr
    ●   max_esi_includes → max_esi_depth
    ●   overflow_max → que_max
ちょっとまって!
結構VCL記述変わってるよ
VCL記述の変更点
                    2.1→3.0

●   (obj | beresp).cacheableの廃止
●   ESIを使うときの指定方法
●   vcl_fetchでのreturn(pass)が変更
●   req.hash += value;の記述変更
●
    文字列の結合の仕方が変わった(!)
●   LogメソッドがVMODに移動したよ
●   purge()がban()になったよ
●
    文字列中の%エスケープがなくなったよ
●   (obj | beresp).cacheableの廃止
●   Obj.cacheableとberesp.cacheableはなくなりました
●
    キャッシュするかどうかは以下のパラメータから判断
    ●   beresp.ttl
         – キャッシュ時間
    ●   beresp.grace
         – キャッシュが切れたときの猶予期間
ESIを使うときの指定方法
                     3.0以前                                            3.0以降

sub vcl_fetch {                                   sub vcl_fetch {
    if (req.url == "/test.html") {                    if (req.url == "/test.html") {
        esi;                                              set beresp.do_esi = true;
        set obj.ttl = 24 h;                               set obj.ttl = 24 h;
    } elseif (req.url == "/cgi-bin/date.cgi") {       } elseif (req.url == "/cgi-bin/date.cgi") {
        set obj.ttl = 1m;                                 set obj.ttl = 1m;
    }                                                 }
}                                                 }
vcl_fetchでのreturn(pass)が変更
                  3.0以前                     3.0以降

sub vcl_fetch {           sub vcl_fetch {
return(pass);             return(hit_for_pass);
}                         }




           vcl_fetchだけで他の箇所は変更ありません
req.hash += value;の記述変更
           3.0以前                3.0以降

req.hash += value;   hash_data(value);
文字列の結合の仕方が変わった
          (!)
           3.0以前              3.0以降

req.url"AAA"       req.url+"AAA"




          +演算子で結合するようになりました
LogメソッドがVMODに移動したよ
                3.0以前                      3.0以降

sub vcl_recv{              import std;
log req.url;               sub vcl_recv{
}                          std.log(req.url);
                           }




               logメソッドはvmod_stdに移動しました
purge()がban()になったよ
                3.0以前                                      3.0以降

purge("req.http.host == " req.http.host    ban("req.http.host == " + req.http.host +
              "&& req.url == " req.url);                 "&& req.url == "+ req.url);
文字列中の%エスケープがなくなった
           よ
               3.0以前                                  3.0以降
入力                                       入力
log "AAABBB:%67%67%67%67%67%67%67%67";   std.log("AAABBB:
                                         %67%67%67%67%67%67%67%67");
出力
                                         出力
13 VCL_Log   c AAABBB:gggggggg
                                         12 VCL_Log c AAABBB:
                                         %67%67%67%67%67%67%67%67
参考程度に2.0→2.1
        のアップデート方法
●
    2.0→3.0に上げるときは両方やれば問題ないで
    す
起動パラメータの互換がない変更点
                        2.0→2.1(参考)

●
    削除された物
    ●   accept_fd_holdoff
    ●   acceptor
    ●   backend_http11
    ●   client_http11
    ●   obj_workspace
    ●   purge_hash
    ●   srcaddr_hash
    ●   srcaddr_ttl
VCL記述の変更点
                                          2.0→2.1(参考)

    ●    vcl_fetchでobj.*が使えなくなりました
          ●   beresp.*に置換してください

    ●
         サブルーチン内でのアクションの取り扱い

                     2.1以前                                                     2.1以降

sub vcl_recv {                                       sub vcl_recv {

    if (req.request == "GET" && req.http.cookie) {       if (req.request == "GET" && req.http.cookie) {

        lookup;                                              return(lookup);

    }                                                    }
}                                                    }
あらためて



Let's enjoy Varnish Cache3.0!!

  ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?Sho Hashimoto
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall博文 斉藤
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsNaoki Sega
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについてMasahiro Saito
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepMinoru Nakamura
 
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedKernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedToshiaki Nozawa
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合hiboma
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略yoku0825
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜbasicinc_dev
 

Was ist angesagt? (20)

serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用Tips
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについて
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
 
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedKernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
 

Ähnlich wie tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
20180706_VxRailCC_ワークショップ編_NW
20180706_VxRailCC_ワークショップ編_NW20180706_VxRailCC_ワークショップ編_NW
20180706_VxRailCC_ワークショップ編_NWVxRail ChampionClub
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にYoshifumi Kawai
 
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案Keisuke Umeno
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
EchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxEchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxkeink
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理keki3
 
20101220 pixiv tech_meeting
20101220 pixiv tech_meeting20101220 pixiv tech_meeting
20101220 pixiv tech_meetingsemind
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorialkocha2012
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料cryks
 

Ähnlich wie tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方) (20)

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
20180706_VxRailCC_ワークショップ編_NW
20180706_VxRailCC_ワークショップ編_NW20180706_VxRailCC_ワークショップ編_NW
20180706_VxRailCC_ワークショップ編_NW
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
 
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
EchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxEchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptx
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
20101220 pixiv tech_meeting
20101220 pixiv tech_meeting20101220 pixiv tech_meeting
20101220 pixiv tech_meeting
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
 

tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)

  • 1. VarnishCache3 <3 2011/06/18 いわなちゃん(@xcir)
  • 2. 自己紹介 ● いわなちゃん(@xcir) ● 携帯向けサイトやソーシャルゲームな会社で VarnishやらC#やらPHPやったり ● Smalllightを最近触ってます ● 六本木にいます ● 自炊派なのでクックパッドさんの キッチンが羨ましくて困ります 絡んでくれると喜びます!
  • 3. VarnishCache3 リリースおめでとうございます ● いろんな新機能が増えましたね ● ESIでのgzipのサポート ● よりスマートな拡張(VMOD) ● デフォルトパラメータがよくなった ● varnishncsaでカスタムログ形式が使える! ● ログ系コマンドで正規表現を利用した絞り込み ● vcl_init,vcl_finiの追加 ● Rangeリクエストのデフォルト有効 ● ストリームサポート ● 特定のストレージにオブジェクトを格納できる ● Etc...
  • 4. ESIでのgzipサポート ● 3.0以前ではgzipのオブジェクトを解凍できな かった ● つまりESIのように合成を行う場合はすべての要素 が 圧縮されていない必要があった ● 3.0以降ではgzip圧縮/解凍ができる ● 要素がgzipされていても解釈できる ● 格納時にgzip圧縮が可能 – なおESIだけのgzip対応ではないので他にも応用できます – 例えば今まではgzipしてるのとされていないのでそれぞ れキャッシュしてましたがそれが一つですみます
  • 5.
  • 6. ESIでのgzipサポート ● ただ効率的に使用するには 要素は圧縮されていないのが望ましいです ● 要素が圧縮されてる場合 – 解凍→ESIコード解釈→その後の処理 ● 要素が圧縮されてない場合 – ESIコード解釈→その後の処理 参考VCL sub vcl_miss { if (ESI処理を必要とするオブジェクト) { unset bereq.http.accept-encoding; } } sub vcl_fetch { if (ESI処理を必要とするオブジェクト) { set beresp.do_esi = true; set beresp.do_gzip = true; } }
  • 7. よりスマートな拡張(VMOD) @hmskさんが 詳しく説明してくれると思いますので飛ばしま す!
  • 8. デフォルトパラメータが良くなった ● パフォーマンスがよくなるように設定されてい ます ● すでに色々調整されている方はあまり関係ない かもしれません ● 面白いのがcc_commandが変わりました ● exec cc -fpic -shared -Wl,-x -o %o %s (3.0以前) ● exec $PTHREAD_CC $OCFLAGS $PTHREAD_CFLAGS -fpic -shared -Wl,-x -o %o %s (3.0) ● ここのコマンドはVCLのコンパイルに利用されるので色々調整す ると高負荷時に少し変わってきます
  • 9. varnishncsaでカスタムログが使える! ● -Fオプションでカスタムログが指定できるよう になりました ● varnishncsa -F "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" ● ・・・が%{XX}iで指定できるヘッダが限られて います ● Referer,Host,X-Forwarded-For,User-agent ● 他にも%Dや%Tなどが使えないためApacheの記述そ のままとはいきませんのでちょっと注意が必要です
  • 10. ログ系コマンドで 正規表現を利用した絞り込み ● Varnishlog/ncsa/hist/sizesで利用可能です ● トランザクション中でマッチするものがあれば出力します ● Varnishlogの場合一致した行だけではなく そのトランザクション全部出力します ● -m Tag:Regexの形式です ● varnishlog -m "TxHeader:X-Cache: HIT" – この場合ヒットしたオブジェクトのログを出力します
  • 12. vcl_init,vcl_finiの追加 ● VCLがロードされたときにvcl_init ● VCLがアンロードされたときにvcl_fini ● β2で確認した呼び出されるパタンです ● ただ正式版でいくつか見たところ変わらずぽいです
  • 13. Rangeリクエストのデフォルト有効 ● Rangeリクエストがデフォルトで有効になりま した (僕のような)携帯で動画を扱うサイトは嬉しいと思い ● ます
  • 14. ストリームサポート ストリームOFF 1 2 Varnish バックエンド 5 3 4 1. ユーザからリクエスト 2. キャッシュがないのでバックエンドに問い合わせ 3. バックエンドがVarnishにレスポンス 4. バックエンドからのレスポンスを受けきるまで待つ 5. ユーザにレスポンス
  • 15. ストリームサポート ストリームON 1 2 Varnish バックエンド 3’ 3 1. ユーザからリクエスト 2. キャッシュがないのでバックエンドに問い合わせ 3. バックエンドがVarnishにレスポンス 3'. バックエンドからのレスポンスを    順次ユーザにレスポンス
  • 16. ストリームサポート ストリームOFF ストリームON
  • 17. ストリームサポート 制限事項 ● 同一ファイルを同時にストリームはできません ● 後続のストリームは保留されます
  • 18. 特定のストレージにオブジェクトを格納できる ● まず起動時にストレージの名前が指定できるよ うになりました ● -s [ユニーク名=]ストレージタイプ[,opt] – -s filestorage=file,/tmp/0,1G – -s persistentstorage=persistent,/tmp/1,1G – -s memorystorage=malloc,1G ● そして付けた名前を利用してどこに格納するか 指定できます ● set beresp.storage="persistentstorage";
  • 19. その他の変更点 ● CLI接続してstatsができなくなりました ● VCLのチェックが厳密になりました ● 同じ名前のbackendがある ● Backend内のprobeのキーが重複 ● 同じ名前のACL ● ↑どれもVCLコンパイルの時に弾かれます ● VCLのUnusedエラーを無視する起動オプション追加 ● -p vcc_err_unref=off ● backendの定義はあるけど参照していない場合でも警告だけ でエラーは出ない
  • 22. 起動パラメータの互換がない変更点 2.1→3.0 ● 削除された物 ● cache_vbe_conns ● err_ttl ● purge_dups ● 名前が変わった物 ● http_headers → http_max_hdr ● max_esi_includes → max_esi_depth ● overflow_max → que_max
  • 24. VCL記述の変更点 2.1→3.0 ● (obj | beresp).cacheableの廃止 ● ESIを使うときの指定方法 ● vcl_fetchでのreturn(pass)が変更 ● req.hash += value;の記述変更 ● 文字列の結合の仕方が変わった(!) ● LogメソッドがVMODに移動したよ ● purge()がban()になったよ ● 文字列中の%エスケープがなくなったよ
  • 25. (obj | beresp).cacheableの廃止 ● Obj.cacheableとberesp.cacheableはなくなりました ● キャッシュするかどうかは以下のパラメータから判断 ● beresp.ttl – キャッシュ時間 ● beresp.grace – キャッシュが切れたときの猶予期間
  • 26. ESIを使うときの指定方法 3.0以前 3.0以降 sub vcl_fetch { sub vcl_fetch { if (req.url == "/test.html") { if (req.url == "/test.html") { esi; set beresp.do_esi = true; set obj.ttl = 24 h; set obj.ttl = 24 h; } elseif (req.url == "/cgi-bin/date.cgi") { } elseif (req.url == "/cgi-bin/date.cgi") { set obj.ttl = 1m; set obj.ttl = 1m; } } } }
  • 27. vcl_fetchでのreturn(pass)が変更 3.0以前 3.0以降 sub vcl_fetch { sub vcl_fetch { return(pass); return(hit_for_pass); } } vcl_fetchだけで他の箇所は変更ありません
  • 28. req.hash += value;の記述変更 3.0以前 3.0以降 req.hash += value; hash_data(value);
  • 29. 文字列の結合の仕方が変わった (!) 3.0以前 3.0以降 req.url"AAA" req.url+"AAA" +演算子で結合するようになりました
  • 30. LogメソッドがVMODに移動したよ 3.0以前 3.0以降 sub vcl_recv{ import std; log req.url; sub vcl_recv{ } std.log(req.url); } logメソッドはvmod_stdに移動しました
  • 31. purge()がban()になったよ 3.0以前 3.0以降 purge("req.http.host == " req.http.host ban("req.http.host == " + req.http.host + "&& req.url == " req.url); "&& req.url == "+ req.url);
  • 32. 文字列中の%エスケープがなくなった よ 3.0以前 3.0以降 入力 入力 log "AAABBB:%67%67%67%67%67%67%67%67"; std.log("AAABBB: %67%67%67%67%67%67%67%67"); 出力 出力 13 VCL_Log c AAABBB:gggggggg 12 VCL_Log c AAABBB: %67%67%67%67%67%67%67%67
  • 33. 参考程度に2.0→2.1 のアップデート方法 ● 2.0→3.0に上げるときは両方やれば問題ないで す
  • 34. 起動パラメータの互換がない変更点 2.0→2.1(参考) ● 削除された物 ● accept_fd_holdoff ● acceptor ● backend_http11 ● client_http11 ● obj_workspace ● purge_hash ● srcaddr_hash ● srcaddr_ttl
  • 35. VCL記述の変更点 2.0→2.1(参考) ● vcl_fetchでobj.*が使えなくなりました ● beresp.*に置換してください ● サブルーチン内でのアクションの取り扱い 2.1以前 2.1以降 sub vcl_recv { sub vcl_recv { if (req.request == "GET" && req.http.cookie) { if (req.request == "GET" && req.http.cookie) { lookup; return(lookup); } } } }
  • 36. あらためて Let's enjoy Varnish Cache3.0!! ありがとうございました