【Fastly】調査メモ

Fastly 触りながら調べた内容を随時追記します。
該当箇所のリファレンスを貼り付ける形式にします。（時間節約＆信憑性確保のため）

## CDN について
Fastly は CDN (Content Delivery Network) サービスの1つです。

CDN は、各地に配置されたキャッシュサーバからコンテンツを配信することで「高速配信」と「バックエンド負荷軽減」を実現。
>CDN（コンテンツ・デリバリー・ネットワーク）は、高度に分散されたサーバーネットワークです。サーバーとユーザー間の物理的な距離を縮めることで、ウェブページコンテンツの読み込み遅延を最小限に抑えます。その結果、読み込み速度の低下なしで、世界中のユーザーが同一レベルの高品質なコンテンツを見ることができます。
CDN がないと、コンテンツのオリジンサーバーは、それぞれすべてのエンド・ユーザー・リクエストに応答しなければなりません。オリジンへのトラフィックとそれに続く負荷が大きく増加してトラフィックのスパイクが突出した場合や、永続的に負荷がかかる場合に、オリジン側で障害が発生する可能性が増します。
オリジンに代わり、物理的に近いネットワークでエンドユーザーのリクエストに応答することで、CDN はコンテンツサーバーのトラフィックをオフロードしてウェブの応答性を高め、コンテンツプロバイダーとエンドユーザーの双方にメリットをもたらします。
https://www.akamai.com/jp/ja/cdn/what-is-a-cdn.jsp


### ユーザはどこへアクセスする？
ユーザは、オリジナルを持つサーバではなく、ネットワーク的に近いサーバへアクセスする。
>一般的に CDN は、世界中のデータセンターにキャッシュを保持します。エンドユーザーが CDN を利用しているサイトにアクセスすると、実際にはオリジナルのコンテンツを保持しているサーバーではなく、ネットワーク的に近くのキャッシュサーバーにアクセスします。 これにより、例えばヨーロッパのユーザーがアメリカのサイトからコンテンツを取得する場合、200ミリから500ミリセカンド程度早くコンテンツを取得出来ることになります。
https://docs.fastly.com/ja/guides/how-caching-and-cdns-work

### どうやってキャッシュする？

① オリジンからオブジェクトを取得
>Fastly キャッシュがコンテンツオブジェクトへのリクエストを初めて受け取ると、適切なオリジンサーバーからオブジェクトを取得します。

② オブジェクトのコピーを保存
>コンテンツオブジェクトが取得されると、キャッシュはそのコピーを保存し、エンドユーザーへのレスポンスを転送します。

③ 同じコンテンツに対するリクエストが来たらコピーを返す
>同じコンテンツオブジェクトへのエンドユーザーからの初回リクエストごとに、Fastly キャッシュはストレージ (またはメモリ) からキャッシュされたコピーを取得し、すぐにエンドユーザーに配信することでリクエストに応えます。オリジナルコピーの取得手順は、コンテンツオブジェクトが期限切れまたは無効になるまで繰り返されません。
https://docs.fastly.com/ja/guides/how-fastlys-cdn-service-works


### どんなコンテンツをキャッシュする？
基本的には、リクエストによって内容が変化することのない静的コンテンツ。
>CDN は、静的なリソース（CSS ファイル、Javascript、アニメーション GIF など）のキャッシュを管理するのに適しています。また、ビデオやオーディオメディアなどの配信に負荷のかかるファイルをオフロードするためにもよく利用されます。
https://docs.fastly.com/ja/guides/how-caching-and-cdns-work#キャッシュ可能なオブジェクト

### キャッシュの期間はどのくらい？
HTTP ヘッダで期間を指定できる。
>どのコンテンツをキャッシュして、どこで、どのくらいの期間保持するかはどのように管理すればよいでしょうか？ポリシーを設定することで、キャッシュされたデータを制御することが出来ます。 ほとんどのキャッシュポリシーは、Web サーバーによってコンテンツと共に送信される（ Web サーバーの設定、またはアプリケーションで指定されている）一連の HTTP ヘッダーの内容をもとに設定されます。
https://docs.fastly.com/ja/guides/how-caching-and-cdns-work#キャッシュの管理



## Fastly について
### Service
Fastly の設定単位。ドメインやバックエンドなどの設定をバージョンを切って更新することができる。
>サービスは、Fastlyを介して提供されるWebサイト、アプリ、API、またはその他すべての構成を表します。サービスには多くのバージョンを含めることができ、それを介してバックエンド、ドメインなどを構成できます。
https://developer.fastly.com/reference/api/services/service/

### Domain
ドメイン名。1つのサービスに複数のドメインを紐付けられる。
>ドメインは、訪問者がコンテンツを取得するために使用するドメイン名を表します。サービスには複数のドメインが存在する可能性があります。
https://developer.fastly.com/reference/api/services/domain/

### Backend
オリジンサーバのこと。
>バックエンド（オリジンサーバーとも呼ばれる）は、IPアドレスまたはホスト名で識別されるサーバーであり、そこからFastlyがコンテンツをフェッチします。サービスに複数のバックエンドを接続できますが、各バックエンドは1つのサービスに固有です。
https://developer.fastly.com/reference/api/services/backend/

### Health Check

>ヘルスチェックは、バックエンドをすばやくチェックする方法をカスタマイズするために使用されます。ヘルスチェックのためにオリジンサーバーが異常とマークされた場合、Fastlyはサーバーへのリクエストの送信を停止します。すべてのオリジンサーバーが異常とマークされている場合、Fastlyは古いサービスを提供しようとします。使用可能な古いオブジェクトがない場合、503がクライアントに返されます。
https://developer.fastly.com/reference/api/services/healthcheck/

### POP
キャッシュサーバを配置する拠点のこと。
>Fastly の POP (配信拠点) は、世界中のインターネットエクスチェンジポイントの中でトラフィックが最も集中する場所に戦略的に配置されています。
https://docs.fastly.com/ja/guides/fastly-pop-locations



## Varnish について
キャッシュサーバを構成するためのソフトウェア。Fastly は、Varnish で作られている。
>Varnish Cacheは、キャッシングHTTPリバースプロキシとも呼ばれるWebアプリケーションアクセラレータです。HTTPを話すサーバーの前にインストールし、コンテンツをキャッシュするように構成します。
https://varnish-cache.org/intro/

### VCL (Varnish Configuration Language)
Fastly の挙動を設定するための言語 （Varnish を設定するための言語）。
>Fastly の Edge Cloud サービスでは、スクリプト言語である Fastly Varnish Configuration Language (VCL) を使用して Varnish キャッシュにロジックを設定、追加します。Fastly VCL では、Fastly サービスに対する変更を生成してコンパイルできます。これらの変更は、メンテナンス時間またはサービスダウンタイムを必要とせずに世界中のすべての Fastly キャッシュに配布、ロード、有効化できます。
https://docs.fastly.com/ja/guides/guide-to-vcl

### Fastly VCL
Fastly 上で扱う VCL は、厳密には「Fastly VCL」と呼ばれる模様。
>Fastly VCLは、Fastlyのプラットフォームアーキテクチャの一部であるVarnishプロキシキャッシュから派生したドメイン固有言語です。意図的に範囲を制限しているため、非常に高速に実行し、Fastlyを通過するすべてのリクエストで利用できるようにし、Fastlyネットワークのセキュリティを維持できます。
https://developer.fastly.com/learning/vcl/using/

### VCL の構成要素
>
宣言
関数
演算子
正規表現
ステートメント
サブルーチン
タイプ
変数
https://developer.fastly.com/reference/vcl/

### サブルーチン
Fastly 独自のサブルーチンが定義されている。
>次のサブルーチンは、構成で定義されている場合、Fastlyによってトリガーされます。
https://developer.fastly.com/learning/vcl/using/#the-vcl-request-lifecycle

### ローカル変数
サブルーチン内でユーザ定義の変数を宣言可能。
> カスタム変数は、使用する前、通常はサブルーチンの先頭、ステートメントの前に宣言する必要があります。それらは、それらが宣言されているのと同じサブルーチンでのみ使用できます。Fastly VCLはブロックスコープを提供しません。変数がブロック内で宣言されている場合でも、宣言はサブルーチンのスコープ全体に適用されます。
https://developer.fastly.com/reference/vcl/variables/