Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloudflare Workersで動的コンテンツをキャッシュする際の新たな選択肢

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Cloudflare Workersで動的コンテンツをキャッシュする際の新たな選択肢

Avatar for yoshitaka KOITABASHI

yoshitaka KOITABASHI

August 24, 2023
Tweet

More Decks by yoshitaka KOITABASHI

Other Decks in Technology

Transcript

  1. 2023/8/24 yoshii0110 2 KOITABASHI Yoshitaka @yoshii0110 Momento - community advocate

    KDDIアジャイル開発センター – software engineer Amazon EC2, AWS Fargate, AWS App Runner 🥷 🏢 💕
  2. モダンなフロントエンドのページレンダリング • Reactive Web Application • Client Side Rendering (CSR)

    => CSRでできたアプリが、Sigle Page Application (SPA) – React, Vue, Angular とかとか • Server Side Rendering (SSR) – Next, Nuxt とかとか • Static Site Generator (SSG) Jamstackな仕組み, Gatsby, Hugo, Next, Nuxt とかとか • Incremental Static Regeneration (ISR) – Next (9.4で追加された機能) 2023/8/24 yoshii0110 4
  3. 静的コンテンツのキャッシュ • 例えば、SSGで作成されたHTML, CSS, JS 画像などの 静的コンテンツを返却する応答時間を短くしたい場合に考える キャッシュ戦略として CDN(content delivery

    network) を使用する方法があります。 • CDNは、オリジンサーバーへのアクセス集中を防ぎ、地理的に 近いエッジロケーション(エッジサーバー)に誘導するイメージ。 • エッジロケーションは世界中に配置されており、 パブリッククラウドのリージョンにあるデータセンターよりも分散的に より多く設置されている。 2023/8/24 yoshii0110 8
  4. CDNのエッジサーバでアプリケーション実行 • 近年だとCDNのエッジ上でjavascriptなどが実行できるサービスに人気が出てま す。 • なぜ、そんな話をしているのかというと、エッジでアプリケーションが実行できると、 動的コンテンツのキャッシュに作用してくるからです。 • ユーザ起因のイベント、web サーバ起因のイベントなどを基に動的コンテンツを生

    成してクライアントに提供したり、静的コンテンツを変更、キャッシュの操作ができ る様になります。 • Cloudflare Workers • Vercel Edge Functions • AWS CloudFront Functions • AWS Lambda@Edge 2023/8/24 yoshii0110 12 引用: https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/
  5. 今回実現したいこと • Stale-While-Revalidate から着想された @yusukebe さんの “Dynamic Content Storing” を踏襲する

    • これをhonoとCloudflare Workers、momento cacheを利用して 実装していく 2023/8/24 yoshii0110 13 https://yusukebe.com/posts/2022/dcs/ https://datatracker.ietf.org/doc/html/rfc5861
  6. キャッシュ戦略: Stale-While-Revalidate • web ではキャッシュの制御にHTTPヘッダを用いてブラウザやプロキシを コントロールする。 • Stale-While-Revalidate は、そんなヘッダでキャッシュ制御する仕組みです。 •

    よくキャッシュの指定でCache-Control,Expires,Etag,Last-Modifiedなどの ものを利用すると思う。 • Stale-While-Revalidateを利用すると動きとして、コンテンツは キャッシュから表示するが、裏で非同期にキャッシュを更新しておく ような動きになります。 2023/8/24 yoshii0110 14 https://docs.fastly.com/ja/guides/serving-stale-content https://datatracker.ietf.org/doc/html/rfc5861
  7. Cloudflare Workers / honoとは? • Cloudflare Workers • Cloudflareのサーバレスサービス •

    AWS Lambda や Google Cloud Functions などとは異なり、 CDNのエッジサーバーでコードを実行する • V8エンジンのisolateを使い、各リクエストに対して独立した実行環境を提供 • hono • エッジ用に開発された小さく、シンプルかつ超高速な Web フレームワーク • repo: https://github.com/honojs/hono • docs: https://hono.dev/ 2023/8/24 yoshii0110 16
  8. Momento chache を利用したキャッシュ戦略 – 基本の動作シーケンス図 2023/8/24 yoshii0110 20 ①: ユーザがあるwebページを

    見たときに、Cloudflare workers はoriginではなく、momento cacheから動的コンテンツを取得 ②: momento cacheにコンテンツの キャッシュがなければ、originへ fetchする
  9. Momento chache を利用したキャッシュ戦略 – キャッシュ細かい流れに注目したシーケンス図 2023/8/24 yoshii0110 21 前提として、momento cacheには

    同じ動的コンテンツが2つキャッシュされている "fresh", "stale"というプレフィックスをつけたkeyで 同じレスポンスをキャッシュする “stale”の方のttlを 長めに設定 ①: まずは"fresh"というプレフィックスの keyでキャッシュしたvalueを返却 ②: "fresh"のキャッシュのTTLが切れたら、 "stale" の キャッシュを返し、 “fresh”はfetchし直したキャッシュと入れ替える
  10. Momento とCloudflareとの統合 • ブログ: https://www.gomomento.com/blog/momento-cache-is-now-accessible-at- the-edge • 公式ドキュメント: https://docs.momentohq.com/ja/develop/api-reference/http-api •

    公式ドキュメント: https://docs.momentohq.com/ja/develop/integrations/cloudflare • サンプルコード: https://github.com/momentohq/client-sdk- javascript/tree/main/examples/cloudflare-workers 2023/8/24 yoshii0110 24