2月 202010
 

以下の記事でもチラッと書いたのですがVarnishの現バージョンではESIのTTL指定がesi:includeタグからできません

VarnishでESIを使うときの注意するべき点

単純に考えるのであればvcl_fetchでそれぞれのURLで指定すればいいとも言えるのですが
ESIの利点を多少損なっている感もします
(個人的にはデザイナ側がこのパーツは10分キャッシュしてもユーザに影響しないよ!とか設定できるのが利点と思ってる)
じゃぁどうすればいいのでしょうか
あまりスマートではないですが解決方法があります

例えばdocument root直下にあるhello.htmlを
ESIでincludeしたい場合で10秒のTTLを指定する時に


<esi:include src="/esi/t/10s/hello.html"></esi:include>

こんな感じの記述でできるようになります
Continue reading »


2月 172010
 

軽めのネタで
varnishでVCL(設定ファイル)を作っているとすごく分割したくなります
たとえばACL(アクセス制限まわり)などの定義を書いてみると非常に冗長になったりして困ります
なんか分割方法ないかなーと探してたらありました


include "インクルードしたいファイル名";

ええそのまんまです
公式サイトでも一応書いてはあるのですが

Syntax overview

The VCL syntax is very simple, and deliberately similar to C and Perl. Blocks are delimited by curly braces,statements end with semicolons, and comments may be written as in C, C++ or Perl according to your own preferences.

In addition to the C-like assignment (=), comparison (==) and boolean (!, && and ||) operators, VCL supports regular expression and ACL matching using the ~ operator.
Unlike C and Perl, the backslash (\) character has no special meaning in strings in VCL, which use the (%xx) escape mechanism just like URLs, so it can be freely used in regular expressions without doubling.
Assignments are introduced with the set keyword. There are no user-defined variables; values can only be assigned to variables attached to backend, request or document objects. Most of these are typed, and the values assigned to them must have a compatible unit suffix.
VCL has if tests, but no loops.
The contents of another VCL file may be inserted at any point in the code by using the include keyword followed by the name of the other file as a quoted string.

VCL – Varnish configuation Language
とあって書いてるのですが非英語圏だとさくっと読み飛ばしそうです><
こういう所も参考記述があると助かるんですがね・・・
自分も読み飛ばした口なので自戒も込めて共有です

参考サイト
Poul-Hennings other homepage


2月 152010
 

HTTPでの要求でIMS(if-modified-since)というものがあります
ようはこんな感じのやりとりです

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「最新だからそれ使ってもいいよ」
 (304 Not Modified)

普通であればまったく問題ないやり取りです
ただトラフィックが非常に大きいサーバの場合深刻な問題になります
さっきのやり取りをもうちょい具体的にかくと

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「ちょっとまってね(HDDのファイルの更新日時を調べる・・・)最新だからそれ使ってもいいよ」
 (304 Not Modified)

もしくは

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「ちょっとまってね(HDDのファイルの更新日時を調べる・・・)古いからこれ使って」
 (200 OK で実ファイル転送)

いらないioが発生してしまいます
ioといってもファイルの更新日時程度なので少々ならまったく問題ないのですが非常に多いとそれだけでiowaitが大変なことに・・・
304で実ファイルは転送されないため見かけ上のトラフィックはさほど発生せずiowaitが発生してなんだろう?と悩むこともあるかも?

5/29にちょこっと修正しました(vcl_error追加)
Continue reading »


2月 082010
 

あんまり話題に上らないで個人的に悔しいVarnishのESI(Edge Side Include)ですが
非常に癖がありますのではまりやすいポイントをとりあえず自分用のメモ程度に

2010/06/23追記:Ver2.1.2では多少注意事項が変わっていますのでこちらも参照ください
そもそもESIってなに?

例えばTwitterのホーム画面で考えてみましょう

ページは様々な要素で構成されていますが大きく分けて二つに分かれます

表示される度に更新しなくてはいけないもの(広告・タイムライン)
表示される度に更新しなくてもいいもの(フォロワーなどの数)

別にフォロワー数を表示するためにPHPを動かして、DBかmemcacheにアクセスして整形して・・・
といった処理をしてもいいのですが
PVが多いWEBサイトの場合、毎回呼ばれる処理はできるだけしたくありません
PHP→memcacheとしても負荷が結構痛いです
そういう時にESIがあると、ページの構成要素ごと キャッシュを行い、Varnish側で組み立てて返却してくれます
PHPやDBまでアクセスがこないので負荷に強くなるとともに、そのキャッシュした構成要素を別の画面で再利用できます

PC向けの場合Ajaxなどもあるので、一概にESIがすごく有効とも言い辛いのですが(例でTwを上げましたがちょっと悪かったかも)
携帯向けなどJSが使えない環境で、毎回一枚のHTMLを出力しないといけない場合非常に効果的です
また転送速度が上がるのでPVが上がるかも しれませんしSEOにも効果がありそうです
(Googleはどれぐらいでページが表示されるかをSEOの評価としてるみたいです)

Continue reading »