Top Banner
VarnishではじめるESI 2012/03/29 いわなちゃんさん(@xcir)
28

VarnishではじめるESI

Jun 22, 2015

Download

Documents

Iwana Chan

WEBサーバ勉強会#5で発表した内容です
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: VarnishではじめるESI

VarnishではじめるESI

2012/03/29いわなちゃんさん(@xcir)

Page 2: VarnishではじめるESI

自己紹介

● いわなちゃん(さん) (@xcir)● ソーシャルゲームをやってる会社で

VarnishやらC#やらPHPやったり

● 六本木にいます● アルパカが好きです

● 会場がCAなのでアメーバ水が欲しいです!!

絡んでくれると喜びます!

Page 3: VarnishではじめるESI

キャッシュって要は静的コンテンツしか適用できないよね?

CSSとかJavascriptとか画像とか・・・

Page 4: VarnishではじめるESI

キャッシュって要は静的コンテンツしか適用できないよね?

いいえ(半分)違います。

Page 5: VarnishではじめるESI

そもそも静的コンテンツってなんだろう

HTML1枚のページ?

画像?

CSS?

Page 6: VarnishではじめるESI

そもそも静的コンテンツってなんだろう

LLで生成したページは動的?静的?

Page 7: VarnishではじめるESI

動的?静的?

ブログ名を変更するまで

静的

管理ページで変更するまで

静的

新しい投稿があるまで静的

新しい投稿があるまで静的

Page 8: VarnishではじめるESI

動的?静的?

実は多くの動的とされているコンテンツは静的コンテンツの

組み合わせが多い

Page 9: VarnishではじめるESI

動的?静的?ログインユーザごとに静的

Page 10: VarnishではじめるESI

動的?静的?

やっぱり静的の組み合わせ

Page 11: VarnishではじめるESI

動的?静的?

+ +

Aさんの要求するページ

+ +

Bさんの要求するページ

+ +

Page 12: VarnishではじめるESI

動的?静的?

ユーザによって出る内容が違うのなら

ページをキャッシュ出来ない?

Page 13: VarnishではじめるESI

動的?静的?

こういう場合はプログラム側でキャッシュしたりして組み立てたり

することが多いです(Memcacheとかで)

Page 14: VarnishではじめるESI

ESI! ESI! ESI!

ページ全体でキャッシュできないのなら

要素ごとにキャッシュすればいいじゃない!

Page 15: VarnishではじめるESI

ESIとは(Edege Side Includes)

2001年にAkamaiやOracleなどが策定Webページの要素を動的に構成する仕組み

http://www.w3.org/TR/esi-lang

特殊なタグをコンテンツに埋め込んで使う

<esi:include src=”url”>指定URLからコンテンツを取って埋め込む

などなどVarnishは一部のタグのみサポートしてます

Page 16: VarnishではじめるESI

VarnishでESI!

Aさんの要求するページ

Bさんの要求するページ

要素を結合

Page 17: VarnishではじめるESI

VarnishでESIを使ってみよう

default.vcl------------------------------------------backend default{ .host="localhost"; .port="81";}

sub vcl_fetch{ set beresp.do_esi = true;}

esi.html------------------------------------------<html><body>20sec <esi:include src=”/a.php”>2sec <esi:include src=”/b.php”></body></html>

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>

これだけで有効に

Page 18: VarnishではじめるESI

VarnishでESIを使ってみよう

Apache直Varnish経由

20secと2secの時刻がずれているのでキャッシュされているのがわかる

Page 19: VarnishではじめるESI

ねっ

簡単でしょ?

Page 20: VarnishではじめるESI

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>

などなど細かい制御が容易なVarnishがおすすめ!

VCLで拾ってTTL設定も簡単

Page 21: VarnishではじめるESI

ESIは銀の弾丸ではない

素晴らしいESIですが入れれば即100倍界王拳とは行きません

たとえばキャッシュができないコンテンツ(携帯での広告)

極端に更新間隔の短いコンテンツetc...

いろいろ適用が難しい場合もあります

キャッシュの一つの手段として考えてもらえば幸いです

Page 22: VarnishではじめるESI

VarnishでESIで使う際の注意

ESIの解釈が行われるためにはコンテンツの最初が「<」で始まる必要があります

もしこれ以外で行いたい場合は起動パラメータに

-p esi_syntax=0x00000001を付与してください

Page 23: VarnishではじめるESI

VarnishでESIで使う際の注意

ユーザー毎に出しわけをする要素を含む場合は

必ずvcl_hashでその値を追加してくださいでないと全てのアクセスで

同じ結果が出るという悲しい事態に・・・

Varnishはオブジェクトを特定するのにHashを使いますそのHashを生成するキーにユーザIDを含めるようなイメージです(クッキーから抽出とか)

Page 24: VarnishではじめるESI

VarnishでESIで使う際の注意

ESIの要素が複数ある場合今のバージョンのVarnishでは並列ではなく逐次取得します

(将来は対応するみたいです)

Page 25: VarnishではじめるESI

VarnishでESIで使う際の注意

ESIはセッションワークスペースをたくさん使用します

そのためデフォルト値(64k)では足りない可能性があるので大きめに指定すると良いです

例えば5MBとか指定しても100KBしか使わなければ実使用サイズは100KBです

Page 26: VarnishではじめるESI

VarnishでESIで使う際の注意

ESIの要素がエラーでアクセス出来ない場合に

こうならないようにエラー時の挙動を

制御したほうがよいです

Page 27: VarnishではじめるESI

VarnishでESIで使う際の注意

default.vcl------------------------------------------import std;backend default{ .host="localhost"; .port="81";}

sub vcl_fetch{ if(beresp.status>=400){ error(beresp.status); } set beresp.do_esi = true;}sub vcl_error{ synthetic std.fileread("/tmp/hoge.txt"); return(deliver);}

/tmp/hoge.txt------------------------------------------もう眠いです(:3[__])

たとえばこんな感じでエラーを埋め込むとか(VCL内でマルチバイト文字を入れると化けます)

Page 28: VarnishではじめるESI

ご清聴ありがとうございました