Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Fastlyのパスベースルーティングで実現するWEARのゆるやかなクラウド移行/fastly-...

Avatar for masaki-nagao masaki-nagao
December 13, 2021

 Fastlyのパスベースルーティングで実現するWEARのゆるやかなクラウド移行/fastly-path-routing

Avatar for masaki-nagao

masaki-nagao

December 13, 2021
Tweet

Other Decks in Technology

Transcript

  1. © ZOZO, Inc. https://zozo.jp/
 3 • ファッション通販サイト
 • 1,500以上のショップ、8,400以上のブランドの取り扱い
 •

    常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商 品を掲載(2021年9月末時点)
 • ブランド古着のファッションゾーン「ZOZOUSED」や
 コスメ専門モール「ZOZOCOSME」、靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など

  2. © ZOZO, Inc. https://wear.jp/
 4 • ファッションコーディネートアプリ
 • 1,500万ダウンロード突破、コーディネート投稿総数は1,100万件以上 (2021年9月末時点)


    • ピックアップタグから最新のトレンドをチェック
 • コーディネート着用アイテムをブランド公式サイトで購入可能
 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加

  3. © ZOZO, Inc. パスベースルーティングの設定 - Edge Dictionaries
 19 table path_routing_dict

    {
 "/path1": "aws",
 }
 
 if (table.contains(path_routing_dict,req.url.path)) {
 set req.backend = backend1;
 } else {
 set req.backend = backend2;
 }
 

  4. © ZOZO, Inc. パスベースルーティングの設定 - 前方一致で判定
 20 if (req.url.path ~

    "^/path1/") {
 set req.backend = backend1;
 } else {
 set req.backend = backend2;
 }

  5. © ZOZO, Inc. Keep-Aliveの無効化
 31 sub vcl_miss {
 # 省略


    set bereq.http.connection = "close";
 }
 sub vcl_pass {
 # 省略
 set bereq.http.connection = "close";
 }
 sub vcl_pipe {
 # 省略
 set bereq.http.connection = "close";
 }

  6. © ZOZO, Inc. WEARの悩み
 37 
 
 • 不正なリクエスト
 ◦

    特定のコーディネートやユーザに大量のリクエストを送信
 ◦ サイト全体を定期的にクロール
 • オペレーションの負荷
 ◦ 監視
 ◦ 都度判断して手動でブロック

  7. © ZOZO, Inc. Edge Rate Limiting(Limited Availavility)
 38 
 


    • Edgeで設定できるRate Limit機能
 • サーバ/コンテナにクライアントを入れる必要がない

  8. © ZOZO, Inc. Rate Limitの設定
 40 
 
 60(window) *

    10(limit) / 1(delta) = 60秒間に600件以上同じIPアドレスからリクエストがきたら、 PenaltyBoxにentryの値が入る
 unset req.http.x-penalized;
 set req.http.x-penalized = ratelimit.check_rate(
 req.http.Fastly-Client-IP, # entry
 rc, # Rate Counter to be used
 1, # delta
 60, # window
 10, # limit
 pb, # Penalty Box to be used
 1m # The penalty box. must be between 1m to 1h
 );
 
 

  9. © ZOZO, Inc. Rate Limitの設定
 41 
 
 1分経ったらPenaltyBoxの値が解放される
 unset

    req.http.x-penalized;
 set req.http.x-penalized = ratelimit.check_rate(
 req.http.Fastly-Client-IP, # entry
 rc, # Rate Counter
 1, # delta
 60, # window
 10, # limit
 pb, # Penalty Box 
 1m 
 );
 
 

  10. © ZOZO, Inc. Rate Limitの設定
 42 
 
 RateLimitに引っかかった場合の動作
 if

    (req.http.x-penalized == "1") {
 error 404 "rl Not found";
 }
 
 

  11. © ZOZO, Inc. 絶賛採用活動中
 46 • Webフロントエンド(TypeScript / React)
 •

    Android
 • iOS
 • SRE
 
 https://corp.zozo.com/recruit/mid-career/