$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introducting the Fastly to TravelBook
Search
Masanori Iwakura
March 30, 2022
Technology
0
1.5k
Introducting the Fastly to TravelBook
トラベルブック(TrabelBook)のFastly導入事例
Masanori Iwakura
March 30, 2022
Tweet
Share
More Decks by Masanori Iwakura
See All by Masanori Iwakura
Ruby on RailsのJSON Serializer検討
masanoriiwakura
0
170
SHOROBAKOとエンジニアのお仕事
masanoriiwakura
0
73
Other Decks in Technology
See All in Technology
モバイルゲーム開発におけるエージェント技術活用への試行錯誤 ~開発効率化へのアプローチの紹介と未来に向けた展望~
qualiarts
0
660
ChatGPTで論⽂は読めるのか
spatial_ai_network
0
370
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
450
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
460
Snowflakeでデータ基盤を もう一度作り直すなら / rebuilding-data-platform-with-snowflake
pei0804
3
870
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
740
乗りこなせAI駆動開発の波
eltociear
1
1k
Microsoft Agent 365 を 30 分でなんとなく理解する
skmkzyk
1
1k
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
370
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
260
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
220
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
430
Featured
See All Featured
KATA
mclloyd
PRO
32
15k
GitHub's CSS Performance
jonrohan
1032
470k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Done Done
chrislema
186
16k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
How GitHub (no longer) Works
holman
316
140k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
A designer walks into a library…
pauljervisheath
210
24k
Designing for humans not robots
tammielis
254
26k
Transcript
トラベルブックの Fastly導入事例 トラベルブック株式会社 岩倉誠徳 (Masanori Iwakura)
アジェンダ - 自己紹介 - はじめに - 導入した経緯 - トラベルブックの構成紹介 -
設定例紹介 - 失効済みコンテンツの配信 - Brotliの設定 - HTTP/3(QUIC )の設定 - まとめ
自己紹介 岩倉 誠徳 (いわくら まさのり) バックエンドメインのWEBエンジニア GitHub: MasanoriIwakura 好きなFastlyの機能:失効済みコンテンツの配信 ※後述
はじめに 2021年11月、トラベルブックはFastlyを導入しました👏👏👏 Brotli, HTTP/3(QUIC)と言った比較的新しい技術も導入したので 最後までお付き合いいただけますと幸いです
導入した経緯 • 元々はVarnishをEC2に入れてキャッシュ管理 • 日に日にキャッシュ対象のパスやページが増加 • Varnishサーバーが単一障害点となるリスク 冗長化したい!!! スケールを自動化したい!!!
構成紹介
None
管理方法 構成管理:Terraform • AWSの構成管理でも使用している • サービスをソース管理したい サービス管理:VCL • Varnishで使用した実績がある •
Varnishからの移行が比較的容易そう
管理方法 死活・ログ監視:Datadog • 既存のシステムでも使用している • ログの表示がとても優秀
設定例紹介
Terraformを使用した管理 プロジェクト構成 • modules ◦ VCLの管理 ◦ ログフォーマット管理 ◦ (Compute@Edgeの導入も検討)
• production • staging
Terraformを使用した管理 参考: https://registry.terraform.io/providers/fastly/fastly/latest/docs • Fastlyの設定画面で行えることは、ほぼ可能 • 管理画面で存在するのにTerraformから行えない設定には遭遇していない
Datadogへのログ送信 TerraformでDatadogへの送信設定を追加 Fastlyの変数を埋め込み可能
Datadogへのログ送信 Fastlyからログを送信することにより、リアルタイムに状況を可視化 例として、 - 200系レスポンスの割合 - エラーレスポンスの割合 - キャッシュのヒット率 -
アクセスしているブラウザ OSの割合 などをダッシュボードで確認が可能
Datadogへのログ送信 フィルター機能で任意のIPで絞り込んだり、任意のパスで絞り込んだりすることが可能 リアルタイムにログを確認することができるため 障害発生時や攻撃を受けている時の調査に有効的
Staleについて Staleなし Staleあり TTL+Staleの期間内は常にキャッシュが返却される
Staleの設定で苦戦したポイント [苦戦ポイント] Staleの期間内なのにキャッシュがHITしない? [原因] 1. TTLの時間が3700秒未満に設定されていた 2. オリジンシールドのStaleを無効化し、POPだけでStaleを有効化していた メモリ持ちになってしまうため LRUが
発生しやすい
改善前の設定 アクセスするPOPによってキャッシュのHIT/MISSが変わる
改善後の設定 オリジンシールドのStaleが適用される
Purgeについて • All Purge →サービス全体のキャッシュ削除 • URL Purge →指定したURLだけキャッシュ削除 •
Surrogate-Key Purge →独自で指定したキーでキャッシュ削除
Purgeについて hotelのキーを指定→ホテルに関するページ全てのキャッシュを削除 hotel-item-1を指定→特定のページのみ削除
カスタムエラーページについて 参考:https://docs.fastly.com/ja/guides/creating-error-pages-with-custom-responses
カスタムエラーページの実現方法 AWSのS3に配置したHTMLを参照するように設定 Fastly側でHTMLを管理する必要なく、最小限の修正でカスタムエラーページを実現
失効済みコンテンツの配信
失効済みコンテンツの配信 参考:https://docs.fastly.com/ja/guides/serving-stale-content
失効済みコンテンツの配信 次のアクセス時には キャッシュが適用
失効済みコンテンツの配信 ユーザーにはエラーを 認識させない!!
Brotliの設定
Brotli(ブロトリ)とは • Googleが開発した圧縮方式 • 他の圧縮形式と比べて高い圧縮率 • Edge, Firefox, Chrome, Safariなど主要ブラウザで対応している
Brotliの実験 実際にどれくらい圧縮されるのか、トラベルブックのトップページで実験
Brotliの実験 ※curlコマンドで検証 圧縮なし Gzip圧縮 Brotri圧縮
Brotliの実験結果 約130KB 約19KB (86%圧縮) 約13KB (90%圧縮) 参考:https://tech.travelbook.co.jp/posts/introducing-fastly/ ページによって結果が異なる場合があるため、あくまでも参考 Brotliの勝利!!
Brotli設定手順 1. FastlyサポートにBrotliを有効化していただく 2. VCLでBrotli圧縮を有効化 対応ブラウザ以外では他の圧縮形式にし たいため、Accept-Encodingで判定して 未対応の場合はgzip圧縮
HTTP/3の設定
HTTP/3(QUIC)とは? • HTTP/2に続く新バージョン • Googleが開発したQUICを使用することで高速化(UDP通信)
HTTP/2(TCP+TLS)とHTTP/3(QUIC)の対比 やり取りが少ない!
HTTP/3の設定方法 1. FastlyサポートにHTTP/3(QUIC)を有効化していただく 2. Alt-SvcヘッダーをVCLで追加 → h3.alt_svc() 3. HTTP/3用のDNSに切り替え 0RTT
enabled? IPv4 and IPv6 dual stack routing IPv4-only routing Yes dualstack.n.sni.global.fastly.net n.sni.global.fastly.net No dualstack.m.sni.global.fastly.net m.sni.global.fastly.net
HTTP/3の設定確認 対応ブラウザからアクセスし、確認 h3(HTTP/3)になっている
まとめ
まとめ • Fastlyを導入することでVarnish冗長化問題を解決できた • 失効済みコンテンツの配信が素晴らしい • Datadogと連携したログ監視が素晴らしい • BrotliやHTTP/3(QUIC)に触れる機会を作れた •
Fastlyのサポートが神
ご静聴ありがとうございました!