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

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

35fa62e1944d634eb5cb7fabffb1d84d?s=47 EnKUMA
July 28, 2021

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

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

35fa62e1944d634eb5cb7fabffb1d84d?s=128

EnKUMA

July 28, 2021
Tweet

Transcript

  1. Backends For Frontends(BFF)をプロダクションレディするまでの取り組み
 ZOZO Tech Meetup
 〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜
 
 
 株式会社ZOZOテクノロジーズ


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

    @EnKUMA_
 2019年5月にZOZOテクノロジーズへ中途入社
 前職ではオンプレミスの動画配信システムを担当していまし た
 現在はZOZOTOWNリプレイスプロジェクトにてSREとして参 画しています
 6月に札幌へ引越をしました
 2
  3. © ZOZO Technologies, Inc. ZOZOテクノロジーズは日本全国から就業可能です!
 制度をフル活用して札幌ライフを満喫しています! 3

  4. © ZOZO Technologies, Inc. https://zozo.jp/
 4 • 日本最大級のファッション通販サイト
 • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月

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

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

    BFFをプロダクションレディするまでの取り組み
 5
  6. © ZOZO Technologies, Inc. 6 はじめに

  7. © ZOZO Technologies, Inc. はじめに
 • 本セッションで話す事
 ◦ ZOZOTOWNのBFF構成
 ◦

    BFFをプロダクションレディにするために実施したこと
 • 本セッションで話さない事
 ◦ なぜBFFを導入したのか?
 ◦ ZOZOTOWNのBFFアプリケーション仕様
 7 次のセッション『ZOZOTOWNトップページの裏側』をお楽しみに!!
  8. © ZOZO Technologies, Inc. 8 ZOZOTOWNにおけるBFF

  9. © ZOZO Technologies, Inc. ZOZOTOWNにてBFFを導入しました
 9 https://techblog.zozo.com/entry/zozo-aggregation-api-bff ZOZOテックブログも是非御覧ください!

  10. © ZOZO Technologies, Inc. 10 改めてBFFとは?
 BFFはBackends For Frontendsの略であり、アーキテクチャ設計パターンの1つです。
 フロントエンドのリクエストに応じて各種のAPIコールをしたり、バックエンドから取得した内容を加工してフロントエンドに返

    却したりするフロントエンド専用のサーバーを用意するアーキテクチャ設計パターンです。
 
 https://samnewman.io/patterns/architectural/bff/
 『Building Microservices』の著者であるSam Newmanさんの記事を是非ご覧ください
  11. © ZOZO Technologies, Inc. 11 ZOZOTOWNにおけるBFF

  12. © 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つとして実装
  13. © ZOZO Technologies, Inc. 13 リリース後4ヶ月、安定して運用できています
 月のエラーも数回程度 リクエスト内容が異常のパターンがほとんどでシステム的な障害は0 安定してリクエストを処理している レイテンシも比較的安定

  14. © ZOZO Technologies, Inc. 14 BFFをプロダクションレディにするまでの取り組み

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


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

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


    • パフォーマンス
 • 監視
 • スケーラビリティ
 • 耐障害性と大惨事への対応
 • ドキュメント
 ここを満たすためには監視・分析ができている状態作る必要がある • 正常に動いているかどうか、動いていないときそれはどこに原因があるか • パフォーマンスが良いか悪いか、ボトルネックはどこか • etc
  17. © ZOZO Technologies, Inc. 17 マイクロサービス化により複雑なサービス間連携が発生しているので障害 ポイントやパフォーマンスボトルネック等の調査が難しい
 マイクロサービスの辛み
 サービスA サービスB

    サービスC API Gateway サービスAの問題? サービスBの問題?
  18. © ZOZO Technologies, Inc. 18 マイクロサービス化により複雑なサービス間連携が発生しているので障害 ポイントやパフォーマンスボトルネック等の調査が難しい
 マイクロサービスの辛み
 サービスA サービスB

    サービスC API Gateway サービスAの問題? サービスBの問題? BFFは特に辛い
  19. © ZOZO Technologies, Inc. 19 関連要素が多い

  20. © ZOZO Technologies, Inc. 20 商品 サービス 検索 サービス 推薦

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

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


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


    ▪ 単体負荷試験
 ▪ 結合負荷試験
 ◦ 障害試験
 • その他
 23
  24. © ZOZO Technologies, Inc. 24 マイクロサービスでは複雑なサービス間連携が伴うため、障害発生時に問題の特定まで多くの時間 がかかる事があります。そのため可観測性(Observability)が必要であり、従来のログ・メトリクス監 視だけではなく多面的にデータを収集、分析する必要があります。 可観測性の代表的な要素 •

    ログ • メトリクス • トレーシング マイクロサービス監視では可観測性が重要

  25. © ZOZO Technologies, Inc. 25 マイクロサービスでは複雑なサービス間連携が伴うため、障害発生時に問題の特定まで多くの時間 がかかる事があります。そのため可観測性(Observability)が必要であり、従来のログ・メトリクス監 視だけではなく多面的にデータを収集、分析する必要があります。 可観測性の代表的な要素 •

    ログ • メトリクス • トレーシング マイクロサービス監視では可観測性が重要
 システム間の繋がり・関連性を見るための重要な要素であり、 APM(Application Performance Monitoring)で観測が可能
  26. © ZOZO Technologies, Inc. 26 兎にも角にもAPM
 APM様

  27. © ZOZO Technologies, Inc. 27 マイクロサービス間の繋がりをAPMで見る
 それぞれ異なるマイクロサービスへ接 続している

  28. © ZOZO Technologies, Inc. 28 マイクロサービス間の繋がりをAPMで見る
 エラーの際にどのサービスに向けた通信でエラーになったかがすぐに分かる

  29. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


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

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

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

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


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

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

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


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

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

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

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

    サービス BFF API Gateway Client 結合負荷試験のポイント
 • 一部エンドポイントのレスポンス遅延がボトルネックである事を発見 ◦ 該当サービスの担当者へチューニングの相談等の対応が必要になる メトリックも問題解決の重要な要素 バックエンドサービス側がボトルネックになっている場合もある
  41. © ZOZO Technologies, Inc. 41 BFFとバックエンドの負荷状況やエラー状況を同じ時系列で一気通貫して見れるダッシュボードが重要

  42. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


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

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

    (mock) 推薦 サービス (mock) BFF API Gateway Client 障害試験
 
 • バックエンドサービス停止を複数回行うのでmockで実施 • retryやtimeoutも含めた『障害時の動作』をチェック 各バックエンドの障害も想定した試験が必要 mockコンテナの強制停止
  45. © ZOZO Technologies, Inc. 45 障害時の動作が想定通りなのかを確認
 リトライ回数が設計した2回ではなく3回になっている等もリリース前に発見

  46. © ZOZO Technologies, Inc. • 監視(可観測性)
 • 試験
 ◦ 負荷試験


    ◦ 障害試験
 • その他
 46
  47. © ZOZO Technologies, Inc. 47 • Istioによるサービスメッシュの導入 ◦ https://speakerdeck.com/akitok_/how-to-setup-production-ready-istio •

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

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

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

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

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