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

Backends For Frontends(BFF)をプロダクションレディするまでの取り組み

EnKUMA
July 28, 2021

Backends For Frontends(BFF)をプロダクションレディするまでの取り組み

ZOZO Tech Meetup〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜
にて登壇した際のスライドです

EnKUMA

July 28, 2021
Tweet

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC基盤本部/SRE部
 ECプラットフォームSRE
 三神 拓哉
 twitter:

    @EnKUMA_
 2019年5月にZOZOテクノロジーズへ中途入社
 前職ではオンプレミスの動画配信システムを担当していまし た
 現在はZOZOTOWNリプレイスプロジェクトにてSREとして参 画しています
 6月に札幌へ引越をしました
 2
  2. © ZOZO Technologies, Inc. https://zozo.jp/
 4 • 日本最大級のファッション通販サイト
 • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月

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

  3. © ZOZO Technologies, Inc. アジェンダ
 • はじめに
 • ZOZOTOWNにおけるBFF
 •

    BFFをプロダクションレディするまでの取り組み
 5
  4. © ZOZO Technologies, Inc. はじめに
 • 本セッションで話す事
 ◦ ZOZOTOWNのBFF構成
 ◦

    BFFをプロダクションレディにするために実施したこと
 • 本セッションで話さない事
 ◦ なぜBFFを導入したのか?
 ◦ ZOZOTOWNのBFFアプリケーション仕様
 7 次のセッション『ZOZOTOWNトップページの裏側』をお楽しみに!!
  5. © ZOZO Technologies, Inc. 10 改めてBFFとは?
 BFFはBackends For Frontendsの略であり、アーキテクチャ設計パターンの1つです。
 フロントエンドのリクエストに応じて各種のAPIコールをしたり、バックエンドから取得した内容を加工してフロントエンドに返

    却したりするフロントエンド専用のサーバーを用意するアーキテクチャ設計パターンです。
 
 https://samnewman.io/patterns/architectural/bff/
 『Building Microservices』の著者であるSam Newmanさんの記事を是非ご覧ください
  6. © ZOZO Technologies, Inc. 12 設計したBFF構成 オンプレ IIS (Web) DB

    推薦API ID認証API パーソナライズAPI モジュールAPI DB DB etc. AWS GCP ストアド ストアド ストアド IIS (API) API Gateway Aggregation API(BFF) 商品情報API 検索API BFFも独立したAPIとしてAPI Gateway 配下に設置   = マイクロサービスの1つとして実装
  7. © ZOZO Technologies, Inc. 15 プロダクションレディにおける重要なこと
 • 安定性
 • 信頼性


    • パフォーマンス
 • 監視
 • スケーラビリティ
 • 耐障害性と大惨事への対応
 • ドキュメント

  8. © ZOZO Technologies, Inc. 16 プロダクションレディにおける重要なこと
 • 安定性
 • 信頼性


    • パフォーマンス
 • 監視
 • スケーラビリティ
 • 耐障害性と大惨事への対応
 • ドキュメント
 ここを満たすためには監視・分析ができている状態作る必要がある • 正常に動いているかどうか、動いていないときそれはどこに原因があるか • パフォーマンスが良いか悪いか、ボトルネックはどこか • etc
  9. © ZOZO Technologies, Inc. 20 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client マイクロサービス間通信の観測が重要
 BFFに問題が発生 BFFの動作に 問題が? バックエンドの サービスに問題 が? 通信経路に異常 が?
  10. © ZOZO Technologies, Inc. 21 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client マイクロサービス間の通信を観測する事が重要 マイクロサービス間通信の観測が重要
 BFFに問題が発生 BFFの動作に 問題が? バックエンドの サービスに問題 が? 通信経路に異常 が?
  11. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 22
  12. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 23
  13. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 29
  14. © ZOZO Technologies, Inc. 30 試験
 負荷試験 • レスポンスタイム確認 •

    1podの最大 req/s確認 • ボトルネック調査 • パフォーマンスチューニング • etc 障害試験 • pod回復性確認 • 障害影響確認 • 通信制御設定確認 • etc
  15. © ZOZO Technologies, Inc. 31 試験
 負荷試験 • レスポンスタイム確認 •

    1podの最大 req/s確認 • ボトルネック調査 • パフォーマンスチューニング • etc 障害試験 • pod回復性確認 • 障害影響確認 • 通信制御設定確認 • etc BFFは特に辛い
  16. © ZOZO Technologies, Inc. 32 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client 最終的に各バックエンドサービスも含めた試験が必要
  17. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 33
  18. © ZOZO Technologies, Inc. 34 単体負荷試験
 BFFのアプリケーションに関して以下を確認 • レスポンスが目標秒数以内に終わっているか •

    pod1台あたりの捌ける req/s • podを増やした際に捌ける req/s は線形に増加するか • バックエンドの負荷を考慮しなければ何podで 想定req/s を超えられるか • etc
  19. © ZOZO Technologies, Inc. 35 商品 サービス (mock) 検索 サービス

    (mock) 推薦 サービス (mock) BFF API Gateway Client 単体負荷試験準備
 関連システムのmockを使って試験実施 • 各システムのリクエストパターンを精査 • それぞれのパターンにて静的なレスポンスを行うNginxのpodを作成 各バックエンドサービスの試験用mockを作成
  20. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 36
  21. © ZOZO Technologies, Inc. 37 結合負荷試験
 BFF全体に関して以下を確認 • レスポンスが既定値以内に終わっているか •

    pod1台あたりの捌ける req/s • podを増やした際に捌ける req/s は線形に増加するか • 負荷をかけた場合のボトルネックがどこになるか • 負荷をかけた際のバックエンドサービスの負荷状況 • etc
  22. © ZOZO Technologies, Inc. 38 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client 結合負荷試験準備
 • 結合試験環境の各backendを増強依頼 ◦ 結合試験環境の費用が高騰する • 他案件の試験とスケジュール調整が必要 各バックエンドサービスの試験環境も増強
  23. © ZOZO Technologies, Inc. 39 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client 結合負荷試験のポイント
 バックエンドサービス側がボトルネックになっている場合もある • 一部エンドポイントのレスポンス遅延がボトルネックである事を発見 ◦ 該当サービスの担当者へチューニングの相談等の対応が必要になる
  24. © ZOZO Technologies, Inc. 40 商品 サービス 検索 サービス 推薦

    サービス BFF API Gateway Client 結合負荷試験のポイント
 • 一部エンドポイントのレスポンス遅延がボトルネックである事を発見 ◦ 該当サービスの担当者へチューニングの相談等の対応が必要になる メトリックも問題解決の重要な要素 バックエンドサービス側がボトルネックになっている場合もある
  25. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 42
  26. © ZOZO Technologies, Inc. 43 障害試験
 BFFのアプリケーションにて以下を確認 • Podの回復性確認 ◦

    セルフヒーリング ◦ ローリングアップデート ◦ グレースフルシャットダウン • 各バックエンドサービスの障害影響を受けない • アプリのリトライ・タイムアウト制御が想定通りに動作している • etc
  27. © ZOZO Technologies, Inc. 44 商品 サービス (mock) 検索 サービス

    (mock) 推薦 サービス (mock) BFF API Gateway Client 障害試験
 
 • バックエンドサービス停止を複数回行うのでmockで実施 • retryやtimeoutも含めた『障害時の動作』をチェック 各バックエンドの障害も想定した試験が必要 mockコンテナの強制停止
  28. © ZOZO Technologies, Inc. 47 • Istioによるサービスメッシュの導入 ◦ https://speakerdeck.com/akitok_/how-to-setup-production-ready-istio •

    Canaryリリースの仕組みを導入 ◦ ビッグバンリリースをしない • etc 今後も様々な取り組みをしていきます その他 プロダクションレディのための取り組み

  29. © ZOZO Technologies, Inc. 48 まとめ
 • マイクロサービスは複雑なサービス間連携があるため可観測性が重要
 • 可観測性を担保するために多面的にデータを収集し、分析ができる状態に

    する必要がある • APMやダッシュボードは非常に有効な手段である
 • マイクロサービスは関連サービスの障害やパフォーマンス低下に起因した 問題が発生しうるため、結合試験や関連サービスを含めた負荷試験、障害 試験が重要となる

  30. © ZOZO Technologies, Inc. 私たちと一緒にマイクロサービス基盤を開発しませんか?
 49 Kubernetes, AWS が大好きなエンジニアを募集しています!
 募集職種名 ZOZOTOWN

    SRE(マイクロサービス)
 
 
 業務内容 ZOZOTOWNのマイクロサービスプロジェクトのSREを担当
 ・サーバー、ネットワークの設計/構築/運用
 ・IaCおよびCI/CDによる構築、デプロイ自動化
 ・サービス監視の設計/運用
 ・セキュリティ関連の設計/運用
 ・パフォーマンスチューニングを含むSite Reliability向上のための実装
 ・障害発生時の原因調査、サービス復旧作業
 採用ページはこちら