Varnish4.0
のいろいろ
2014/04/29
いわなちゃん
あんただれ
注意事項
なるだけ正確な記述には心がけてますが
コード上での確認で実動作の確認をしていない情報もあります
間違ってたらすいません
Varnish4.0での変更点
Client/Backendのスレッド分離
clientとbackendのスレッド分離
ストリームのフルサポート
バックグラウンドでのfetch対応(grace)
VSL Query Expressions
VSL Query Expressions
VSLのグルーピング
■Version3ログ例
13 RxHeader b Content-Length: 20
13 RxHeader b Connection: close
13 RxHeader b Content-Type: text/html; charset=UTF-8
13 Fetch_Body b 4(length) cls 0 mklen 1
13 Length b 20
13 BackendClose b default
11 SessionOpen c 192.168.1.199 35936 :80
11 ReqStart c 192.168.1.199 35936 549986251
11 RxRequest c GET
11 RxURL c /date.php
11 RxProtocol c HTTP/1.0
11 RxHeader c User-Agent: Wget/1.12 (linux-gnu)
11 RxHeader c Accept: */*
11 RxHeader c Host: 192.168.1.44
11 RxHeader c Connection: Keep-Alive
11 VCL_call c recv lookup
VSLのグルーピング
各グループの関係性
session
* << Session >> 65539
- Begin sess 0 HTTP/1
- SessOpen 192.168.1.199 60878 :80 192.168.1.45 80 1398350189.793820 12
- Link req 65540 rxreq
- SessClose RESP_CLOSE 0.013
- End
** << Request >> 65540
-- Begin req 65539 rxreq
lv=1
lv=2
lv=1
lv=2
request
* << Request >> 2
- Begin req 1 rxreq
- Timestamp Start: 1398350630.794942 0.000000 0.000000
- Timestamp Req: 1398350630.794942 0.000000 0.000000
…
** << BeReq >> 3
-- Begin bereq 2 fetch
-- Timestamp Start: 1398350630.795294 0.000000 0.000000
-- BereqMethod GET
lv=1
lv=2
lv=1
lv=2
vxid
* << BeReq >> 3
- Begin bereq 2 fetch
- Timestamp Start: 1398350650.914294 0.000000 0.000000
- BereqMethod GET
- BereqURL /es1.html
* << BeReq >> 5
- Begin bereq 4 fetch
- Timestamp Start: 1398350650.917951 0.000000 0.000000
lv=1
lv=1
lv=1
lv=1
raw
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1398308779 1.0
3 Begin b bereq 2 fetch
3 Timestamp b Start: 1398308778.129624 0.000000 0.000000
3 BereqMethod b GET
3 BereqURL b /date.php
VSLグルーピングのまとめ
VSL Query
{レベル}タグ:レコードのPrefix[フィールド]
{2+}Timestamp:Resp[2]
{レベル}タグ:レコードのPrefix[フィールド]
{2+}Timestamp:Resp[2]
{レベル}タグ:レコードのPrefix[フィールド]
{2+}Timestamp:Resp[2]
{レベル}タグ:レコードのPrefix[フィールド]
{2+}Timestamp:Resp[2]
演算子
値
論理演算子
クエリ例
VCLの変更
VCLの変更
V3とV4のVCLアクションの比較
変数の流れ
各アクションでアクセス可能な変数
V3まで便利につかえていたreq.http.*が使えなくなっているのに注意が必要
コード上はbackend_responseでreq.esiにアクセスできるような表記あるけどassertエラーになるので注意
各アクションでreturnした際に次に呼ばれるアクション/挙動
文法/動作上の変更点
文法/動作上の変更点
文法/動作上の変更点
変数の変更点
変数の変更点
変数の変更点
Directorの変更
backend ws01_imgw {.host="192.168.1.100";}
backend ws02_imgw {.host="192.168.1.101";}
director ws random {
{.weight = 5;.backend=ws01_imgw;}
{.weight = 5;.backend=ws02_imgw;}
}
sub vcl_recv{
set req.backend = ws;
...
vcl 4.0;
import directors;
backend ws01_imgw {.host="192.168.1.100";}
backend ws02_imgw {.host="192.168.1.101";}
sub vcl_init{
new ws = directors.random();
ws.add_backend(ws01_imgw, 1.0);
ws.add_backend(ws02_imgw, 1.0);
}
sub vcl_recv{
set req.backend_hint = ws.backend();
...
Directorの変更
起動オプションの変更
起動オプションの変更
起動オプションの変更
起動オプションの変更
起動オプションの変更
起動オプションの変更
起動オプションの変更
ほか
セキュリティ対策
累積バグが解消されている
いろいろ書いてきましたが
やっぱり使ってみないとわからないよね
Varnish4をとあるサイトに導入
Varnish4の安定性について
Expiresの計算が楽に
varnishstatコマンドがめっちゃ見やすく
パラメータの説明が
出るように(一部)
コマンド関連
コマンド関連
レスポンスタイムとか
3.0.5
4.0.0
レスポンスタイムとか
3.0.5
4.0.0
テストURLのみで絞り込み
persistentストレージのio負荷軽減
3.0.5
4.0.0
write時のリクエストサイズが大きくなりiops低減
persistentストレージの動作変更
directorのハッシュ分散が同じにならない
beresp.ttlの罠
beresp.uncacheableの罠
確認しているバグっぽいやつ