More Related Content
Similar to VarnishではじめるESI (20)
VarnishではじめるESI
- 2. 自己紹介
● いわなちゃん(さん) (@xcir)
● ソーシャルゲームをやってる会社で
VarnishやらC#やらPHPやったり
● 六本木にいます
● アルパカが好きです
● 会場がCAなのでアメーバ水が欲しいです!!
絡んでくれると喜びます!
- 7. 動的?静的?
ブログ名を
変更するまで
静的
管理ページで
変更するまで
静的
新しい投稿が 新しい投稿が
あるまで静的 あるまで静的
- 11. 動的?静的?
+
+ +
+ + + +
Aさんの要求するページ Bさんの要求するページ
- 12. 動的?静的?
ユーザによって
出る内容が違うのなら
ページをキャッシュ出来ない?
- 15. ESIとは
(Edege Side Includes)
2001年にAkamaiやOracleなどが策定
Webページの要素を動的に構成する仕組み
http://www.w3.org/TR/esi-lang
特殊なタグをコンテンツに埋め込んで使う
<esi:include src=”url”>
指定URLからコンテンツを取って埋め込む
などなど
Varnishは一部のタグのみサポートしてます
- 17. VarnishでESIを使ってみよう
default.vcl esi.html
------------------------------------------ ------------------------------------------
backend default{ <html>
.host="localhost"; <body>
.port="81"; 20sec <esi:include src=”/a.php”>
} 2sec <esi:include src=”/b.php”>
</body>
sub vcl_fetch{ </html>
set beresp.do_esi = true;
}
a.php
------------------------------------------
これだけで有効に <?php header('Cache-Control: max-age=20');?>
<div>
<?php echo date('Y/m/d H:i:s');?>
</div>
b.php
------------------------------------------
<?php header('Cache-Control: max-age=2');?>
<div>
<?php echo date('Y/m/d H:i:s');?>
</div>
- 20. VarnishでESIを使う理由
今回のは明示的にmax-ageを指定しましたが
実際はテンプレートで
キャッシュ時間を指定したい!
(こんな感じで)
esi.html
------------------------------------------
<html>
<body>
20sec <esi:include src=”/a.php?ttl=120s”>
2sec <esi:include src=”/b.php?ttl=10s”>
</body>
</html>
VCLで拾ってTTL設定も簡単
などなど細かい制御が容易な
Varnishがおすすめ!
- 21. ESIは銀の弾丸ではない
素晴らしいESIですが
入れれば即100倍界王拳とは行きません
たとえば
キャッシュができないコンテンツ(携帯での広告)
極端に更新間隔の短いコンテンツ
etc...
いろいろ適用が難しい場合もあります
キャッシュの一つの手段として
考えてもらえば幸いです
- 23. VarnishでESIで使う際の注意
ユーザー毎に出しわけをする
要素を含む場合は
必ずvcl_hashでその値を追加してください
でないと全てのアクセスで
同じ結果が出るという悲しい事態に・・・
Varnishはオブジェクトを特定するのにHashを使います
そのHashを生成するキーにユーザIDを含めるようなイメージです(クッキーから抽出とか)