本記事について
Fastly導入にあたり、Fastlyの仕組みについてまとめます。
こちらでは構築や設定方法については記載しません。
あくまでも概要理解のためにまとめます。
入門した理由
元々キャッシュは自前で用意したVarnishサーバーで運用していたのですが、
利用範囲の拡大により冗長化と拡張が必要になったため、導入を検討しました。
Varnishだと無料で複数サーバーのキャッシュ共有ができないことが一番の理由。
Fastly(ファストリー)とは?
CDN、画像の最適化、ビデオとストリーミング、クラウドセキュリティ、負荷分散などを提供してくれるサービス。
今回はCDN(キャッシュ)に焦点を当てて記載します。
Fastly CDNについて
上記の図の通り、ユーザー→Fastly→オリジンサーバーの順でFastlyを経由してオリジンサーバーにアクセスします。
Fastlyを経由することにより、2回目のアクセス(自分、他人含め)はFastly上のキャッシュがユーザーに返却されます。
Fastlyはユーザーに近いキャッシュサーバーを自動で選択してくれるため、例えばオリジンサーバーが日本にあったとしてもアメリカのユーザーはアメリカのキャッシュサーバーから配信されるため、より早くコンテンツを取得することができます。
オリジンシールドについて
Fastlyには オリジンシールド
という概念が存在します。
上記の例では ユーザー→Fastly(キャッシュサーバー)→オリジンサーバー
の経路でしたが、
オリジンシールドを配置すると以下のように構成が変わります。
図の通り、オリジンシールドはFastlyキャッシュサーバーとオリジンサーバーの間に配置します。
通常、キャッシュサーバーにキャッシュが存在しない場合はオリジンサーバーを参照に行きますが
オリジンシールドを配置した場合はキャッシュサーバーはオリジンシールドを参照します。
オリジンシールドにキャッシュが存在する場合はキャッシュが返り、存在しない場合は代理でオリジンサーバーに問い合わせします。
そうすることにより、どのキャッシュサーバー経由でアクセスしてもキャッシュがオリジンシールドに蓄えられるので
最寄りのキャッシュサーバーにキャッシュが存在しない場合でもオリジンシールドのキャッシュを利用することができます。
設定の管理方法について
執筆時点で以下の方法があります。
- VCL
- Compute@Edge
VCL
はVarnish同様、C言語っぽいVCL言語を使用して設定を記載します。
Compute@Edge
は執筆時点でRust、AssemblyScript、JavaScriptを使用して設定を記載します。
構成管理ツールにTerraformを使用することができます。
Terraformで構成を管理し、キャッシュの設定をVCLやCompute@Edgeで行うイメージです。
日本語のブログがあるので構築するときはこちら参照。
キャッシュについて
デフォルトでキャッシュされるHTTPステータス
以下以外(例えば500系)はデフォルトではキャッシュされません。
- 200
- 203
- 300
- 301
- 302
- 404
- 410
上記以外をキャッシュしたい場合は別途VCLで設定が必要。
逆に上記をキャッシュしたく無い場合も同様。
TTL(有効期限)
キャッシュのTTL(有効期限)を設定することでキャッシュを利用する期間を設定できます。
デフォルトは 3600秒
TTLの設定は複数パターンあり、以下の優先順位で適用されます。
-
Surrogate-Control: max-age
、Cache-Control: max-age
、Expires
ヘッダー - FastlyのコントロールパネルまたはVCLのTTL設定値
- デフォルト値 (3600秒)
つまり、VCLでTTLを設定してもヘッダーの設定で上書きすることが可能。
Grace modeについて
Grace mode
を使用すると、TTLが切れてからもユーザーには一定期間キャッシュを返却します。
[メリット]
- オリジンサーバーに障害が発生した場合、TTLが切れても一定期間キャッシュを返却できる
- TTLが切れた後、本来はユーザー→Fastly→オリジンサーバーの経路になるためレスポンスが遅れるが先にキャッシュが返るのでレスポンスが早い
[デメリット]
- コンテンツ更新時に明示的にPurge処理を行わないとしばらく古いコンテンツが表示される
最後に
まだまだ仕様理解できていないので多分書き足します。