Más contenido relacionado
La actualidad más candente (20)
Similar a tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方) (20)
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
- 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してるのとされていないのでそれぞ
れキャッシュしてましたがそれが一つですみます
- 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;
}
}
- 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で確認した呼び出されるパタンです
●
ただ正式版でいくつか見たところ変わらずぽいです
- 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'. バックエンドからのレスポンスを
順次ユーザにレスポンス
- 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だけで他の箇所は変更ありません
- 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
- 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);
} }
} }