その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

YAPC::Kansai 2017 OSAKAで喋ってきました

タイトルは「Webアプリケーションのキャッシュ戦略とそのパターン 」です.

speakerdeck.com

告知で書いたように,ここ1・2年は規模感のあるWebアプリケーションを開発していて,なおかつキャッシュ周りの設計・開発・運用をモリモリやっていたので,その関連で学んだこと,感じたことをまとめて発表したという感じです.聞きに来てくださった皆さんありがとうございます.内容についてはスライドをご覧いただければご理解頂けるかと存じます.

ところでトーク中に言い忘れたこととして,「ランキングの構造を返すJSON」みたいなものはえてして大きくなりがち,かつランキングをバッチで構築している場合は或る単位時間内に変化することが少ない (あるいは無い) ので Cache-Control を付けてJSONを返してしまうと負荷が大きく下がって便利,みたいな話題もありました.しっかりした原稿を作っていないとこういううっかりがあるものですね.反省します.

Varnishについて

トーク中に「Varnishを使ってないんですすみません」という話をしましたところ,懇親会等でVarnish周りで色々なフィードバックを頂戴することが出来てたいへん有益でした.
ざっくりとまとめると;

  • 古来,Varnishの利用に際して孕んでいた問題としてHTMLをゴリッとキャッシュして配信していると「他のユーザのログイン済み画面を誤って表示してしまう」と言うものがあり,このリスクが大きかった
  • 近年ではユーザがログイン済みかどうかはJSでハンドリングすることが出来る (そしてそういう手法を採ることが多い)
    • そして「ログイン済みの時に表示するコンテンツ」はJSがAPIを叩いて取得してくることが出来る (そしてそういう手法を採ることが多い)

という感じで,つまり

  • 大枠のコンテンツ (つまりあらゆるユーザに返しても問題のないコンテンツ) を持っているHTMLについてはVarnishで返してしまう
  • ログイン済みかどうか,あるいはどのユーザか,といったクライアント側に紐づくコンテンツに関しては別口でAPI越しに返してやる

といった手法が現代では可能なので,割と安全にVarnishを活用できるのだなあという認識に落ち着いてきました.あとはVCLが便利とか.Varnish自体に関しては利用できる箇所であれば利用したいところなので,今後適所に取り入れていきたいと思います.

トークをするとこういった情報が集まってきて嬉しいですね.ありがとうございます.