6月 232010
 

以前書いた記事(VarnishでESIを使うときの注意するべき点)で

Keep-AliveはOFFにするべき

ESI使用時はcontent-lengthがブラウザ側に返却されないようなのでOFFはほぼ必須です
どうしても使いたい場合はESIを使用するときのみkeep-aliveをOFFに・・・

直Varnishはやめた方がいい

Keep-aliveをオフにしても特定のクライアント(ab/wgetなど)で接続が維持されて5秒ほど待ってしまうことがあります
つまりKeep-Aliveが有効かつcontent-lengthがないときの挙動と同じになります
じゃぁどうすればいいか?
自分はフロントにNginxを置いてそこからVarnishにproxyしています

と書きましたがどうやら2.1.X系では改善されたようです

ということで比較してみます

VCLの設定は両バージョンともこのような感じです


backend default {
  .host = "127.0.0.1";
  .port = "80";
}
sub vcl_fetch{
esi;
}

単純にESIをやろうとしてるだけですね
ファイルの中身は以下のとおりです


[root@LIP-APP-03 html]# cat esi.html
<esi:include src="/a.html" />
<esi:include src="/b.html" />

[root@LIP-APP-03 html]# cat a.html
aaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@LIP-APP-03 html]# cat b.html
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

2.0.6の場合


[root@LIP-APP-03 html]# time wget -d http://localhost:6081/esi.html -O -
Setting --output-document (outputdocument) to -
DEBUG output created by Wget 1.11.4 Red Hat modified on linux-gnu.

--2010-06-23 00:43:54--  http://localhost:6081/esi.html
localhost をDNSに問いあわせています... 127.0.0.1
Caching localhost => 127.0.0.1
localhost|127.0.0.1|:6081 に接続しています... 接続しました。
Created socket 3.
Releasing 0x00000000159d1c20 (new refcount 1).

---request begin---
GET /esi.html HTTP/1.0
User-Agent: Wget/1.11.4 Red Hat modified
Accept: */*
Host: localhost:6081
Connection: Keep-Alive

---request end---
HTTP による接続要求を送信しました、応答を待っています...
---response begin---
HTTP/1.1 200 OK
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 22 Jun 2010 15:11:30 GMT
ETag: "630414-3d-4899fd6006c80"
Content-Type: text/html; charset=UTF-8
Date: Tue, 22 Jun 2010 15:43:54 GMT
X-Varnish: 1443753876
Age: 0
Via: 1.1 varnish
Connection: keep-alive

---response end---
200 OK
長さ: 特定できません [text/html]
`STDOUT' に保存中

    [<=>                                                                                                                                                                                                 ] 0           --.-K/s              aaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb


    [      <=>                                                                                                                                                                                           ] 62          --.-K/s 時間 4.8s

Closed fd 3
2010-06-23 00:43:59 (13.0 B/s) - `-' へ保存終了 [62]


real    0m5.048s
user    0m0.000s
sys     0m0.000s


Connection: keep-aliveなのにcontent-lengthがないためタイムアウトを待ってしまって大変遅いです。
ちなみに


sub vcl_deliver{
      set resp.http.Connection="close";
}

といった記述をVCLに追加したとしても一部クライアントではやっぱりタイムアウトを待ちます

2.1.2の場合




[root@LIP-APP-02 html]# time wget -d http://localhost:6081/esi.html -O -
Setting --output-document (outputdocument) to -
DEBUG output created by Wget 1.11.4 Red Hat modified on linux-gnu.

--2010-06-23 00:44:56--  http://localhost:6081/esi.html
localhost をDNSに問いあわせています... 127.0.0.1
Caching localhost => 127.0.0.1
localhost|127.0.0.1|:6081 に接続しています... 接続しました。
Created socket 3.
Releasing 0x000000001cefcc20 (new refcount 1).

---request begin---
GET /esi.html HTTP/1.0
User-Agent: Wget/1.11.4 Red Hat modified
Accept: */*
Host: localhost:6081
Connection: Keep-Alive

---request end---
HTTP による接続要求を送信しました、応答を待っています...
---response begin---
HTTP/1.1 200 OK
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 22 Jun 2010 15:21:01 GMT
ETag: "858400-65-4899ff8093140"
Content-Type: text/html; charset=UTF-8
Date: Tue, 22 Jun 2010 15:44:56 GMT
X-Varnish: 30445554
Age: 0
Via: 1.1 varnish
Connection: close

---response end---
200 OK
長さ: 特定できません [text/html]
`STDOUT' に保存中

    [<=>                                                                                                                                                                                                                                                                          ] 0           --.-K/s              aaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

00:44:56


    [ <=>                                                                                                                                                                                                                                                                         ] 72          --.-K/s 時間 0.005s

Closed fd 3
2010-06-23 00:44:56 (14.3 KB/s) - `-' へ保存終了 [72]


real    0m0.010s
user    0m0.000s
sys     0m0.004s

Connection: closeに変わっています(つまりkeep-aliveではない)
もちろんesiの記述がないファイルについてはkeep-aliveが有効となっているので
content-lengthを返却できないケース(つまりESI)ではcloseするようになったみたいです。

これでやっと使いやすくなったなーと個人的には思っています。


  One Response to “Varnish2.1.2でESIが使い易くなっていた件について(Varnish2.0.6と比較して)”

  1. […] This post was mentioned on Twitter by RtestR, \いわなちゃん/. \いわなちゃん/ said: [blog] Varnish2.1.2でESIが使い易くなっていた件について(Varnish2.0.6と比較して) http://bit.ly/bHGEOw #varnish #varnishjp […]

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください