$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Backends For Frontends(BFF)をプロダクションレディするまでの取り組み
Search
EnKUMA
July 28, 2021
Technology
1
5.8k
Backends For Frontends(BFF)をプロダクションレディするまでの取り組み
ZOZO Tech Meetup〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜
にて登壇した際のスライドです
EnKUMA
July 28, 2021
Tweet
Share
Other Decks in Technology
See All in Technology
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
110
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
1
150
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
250
計算機科学をRubyと歩む 〜DFA型正規表現エンジンをつくる~
ydah
3
150
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
100
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
280
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
710
知っていると得する!Movable Type 9 の新機能を徹底解説
masakah
0
330
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
260
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
0
440
Edge AI Performance on Zephyr Pico vs. Pico 2
iotengineer22
0
100
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
6
270
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
92
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
We Have a Design System, Now What?
morganepeng
54
7.9k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Optimizing for Happiness
mojombo
379
70k
Building Applications with DynamoDB
mza
96
6.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Bash Introduction
62gerente
615
210k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Transcript
Backends For Frontends(BFF)をプロダクションレディするまでの取り組み ZOZO Tech Meetup 〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜 株式会社ZOZOテクノロジーズ
SRE部 ECプラットフォームSRE 三神 拓哉 Copyright © ZOZO Technologies, Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ EC基盤本部/SRE部 ECプラットフォームSRE 三神 拓哉 twitter:
@EnKUMA_ 2019年5月にZOZOテクノロジーズへ中途入社 前職ではオンプレミスの動画配信システムを担当していまし た 現在はZOZOTOWNリプレイスプロジェクトにてSREとして参 画しています 6月に札幌へ引越をしました 2
© ZOZO Technologies, Inc. ZOZOテクノロジーズは日本全国から就業可能です! 制度をフル活用して札幌ライフを満喫しています! 3
© ZOZO Technologies, Inc. https://zozo.jp/ 4 • 日本最大級のファッション通販サイト • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月
末時点) • 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品 を掲載 • コスメ専門モール「ZOZOCOSME」や靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など
© ZOZO Technologies, Inc. アジェンダ • はじめに • ZOZOTOWNにおけるBFF •
BFFをプロダクションレディするまでの取り組み 5
© ZOZO Technologies, Inc. 6 はじめに
© ZOZO Technologies, Inc. はじめに • 本セッションで話す事 ◦ ZOZOTOWNのBFF構成 ◦
BFFをプロダクションレディにするために実施したこと • 本セッションで話さない事 ◦ なぜBFFを導入したのか? ◦ ZOZOTOWNのBFFアプリケーション仕様 7 次のセッション『ZOZOTOWNトップページの裏側』をお楽しみに!!
© ZOZO Technologies, Inc. 8 ZOZOTOWNにおけるBFF
© ZOZO Technologies, Inc. ZOZOTOWNにてBFFを導入しました 9 https://techblog.zozo.com/entry/zozo-aggregation-api-bff ZOZOテックブログも是非御覧ください!
© ZOZO Technologies, Inc. 10 改めてBFFとは? BFFはBackends For Frontendsの略であり、アーキテクチャ設計パターンの1つです。 フロントエンドのリクエストに応じて各種のAPIコールをしたり、バックエンドから取得した内容を加工してフロントエンドに返
却したりするフロントエンド専用のサーバーを用意するアーキテクチャ設計パターンです。 https://samnewman.io/patterns/architectural/bff/ 『Building Microservices』の著者であるSam Newmanさんの記事を是非ご覧ください
© ZOZO Technologies, Inc. 11 ZOZOTOWNにおけるBFF
© 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つとして実装
© ZOZO Technologies, Inc. 13 リリース後4ヶ月、安定して運用できています 月のエラーも数回程度 リクエスト内容が異常のパターンがほとんどでシステム的な障害は0 安定してリクエストを処理している レイテンシも比較的安定
© ZOZO Technologies, Inc. 14 BFFをプロダクションレディにするまでの取り組み
© ZOZO Technologies, Inc. 15 プロダクションレディにおける重要なこと • 安定性 • 信頼性
• パフォーマンス • 監視 • スケーラビリティ • 耐障害性と大惨事への対応 • ドキュメント
© ZOZO Technologies, Inc. 16 プロダクションレディにおける重要なこと • 安定性 • 信頼性
• パフォーマンス • 監視 • スケーラビリティ • 耐障害性と大惨事への対応 • ドキュメント ここを満たすためには監視・分析ができている状態作る必要がある • 正常に動いているかどうか、動いていないときそれはどこに原因があるか • パフォーマンスが良いか悪いか、ボトルネックはどこか • etc
© ZOZO Technologies, Inc. 17 マイクロサービス化により複雑なサービス間連携が発生しているので障害 ポイントやパフォーマンスボトルネック等の調査が難しい マイクロサービスの辛み サービスA サービスB
サービスC API Gateway サービスAの問題? サービスBの問題?
© ZOZO Technologies, Inc. 18 マイクロサービス化により複雑なサービス間連携が発生しているので障害 ポイントやパフォーマンスボトルネック等の調査が難しい マイクロサービスの辛み サービスA サービスB
サービスC API Gateway サービスAの問題? サービスBの問題? BFFは特に辛い
© ZOZO Technologies, Inc. 19 関連要素が多い
© ZOZO Technologies, Inc. 20 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client マイクロサービス間通信の観測が重要 BFFに問題が発生 BFFの動作に 問題が? バックエンドの サービスに問題 が? 通信経路に異常 が?
© ZOZO Technologies, Inc. 21 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client マイクロサービス間の通信を観測する事が重要 マイクロサービス間通信の観測が重要 BFFに問題が発生 BFFの動作に 問題が? バックエンドの サービスに問題 が? 通信経路に異常 が?
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 22
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 23
© ZOZO Technologies, Inc. 24 マイクロサービスでは複雑なサービス間連携が伴うため、障害発生時に問題の特定まで多くの時間 がかかる事があります。そのため可観測性(Observability)が必要であり、従来のログ・メトリクス監 視だけではなく多面的にデータを収集、分析する必要があります。 可観測性の代表的な要素 •
ログ • メトリクス • トレーシング マイクロサービス監視では可観測性が重要
© ZOZO Technologies, Inc. 25 マイクロサービスでは複雑なサービス間連携が伴うため、障害発生時に問題の特定まで多くの時間 がかかる事があります。そのため可観測性(Observability)が必要であり、従来のログ・メトリクス監 視だけではなく多面的にデータを収集、分析する必要があります。 可観測性の代表的な要素 •
ログ • メトリクス • トレーシング マイクロサービス監視では可観測性が重要 システム間の繋がり・関連性を見るための重要な要素であり、 APM(Application Performance Monitoring)で観測が可能
© ZOZO Technologies, Inc. 26 兎にも角にもAPM APM様
© ZOZO Technologies, Inc. 27 マイクロサービス間の繋がりをAPMで見る それぞれ異なるマイクロサービスへ接 続している
© ZOZO Technologies, Inc. 28 マイクロサービス間の繋がりをAPMで見る エラーの際にどのサービスに向けた通信でエラーになったかがすぐに分かる
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 29
© ZOZO Technologies, Inc. 30 試験 負荷試験 • レスポンスタイム確認 •
1podの最大 req/s確認 • ボトルネック調査 • パフォーマンスチューニング • etc 障害試験 • pod回復性確認 • 障害影響確認 • 通信制御設定確認 • etc
© ZOZO Technologies, Inc. 31 試験 負荷試験 • レスポンスタイム確認 •
1podの最大 req/s確認 • ボトルネック調査 • パフォーマンスチューニング • etc 障害試験 • pod回復性確認 • 障害影響確認 • 通信制御設定確認 • etc BFFは特に辛い
© ZOZO Technologies, Inc. 32 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client 最終的に各バックエンドサービスも含めた試験が必要
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 33
© ZOZO Technologies, Inc. 34 単体負荷試験 BFFのアプリケーションに関して以下を確認 • レスポンスが目標秒数以内に終わっているか •
pod1台あたりの捌ける req/s • podを増やした際に捌ける req/s は線形に増加するか • バックエンドの負荷を考慮しなければ何podで 想定req/s を超えられるか • etc
© ZOZO Technologies, Inc. 35 商品 サービス (mock) 検索 サービス
(mock) 推薦 サービス (mock) BFF API Gateway Client 単体負荷試験準備 関連システムのmockを使って試験実施 • 各システムのリクエストパターンを精査 • それぞれのパターンにて静的なレスポンスを行うNginxのpodを作成 各バックエンドサービスの試験用mockを作成
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 36
© ZOZO Technologies, Inc. 37 結合負荷試験 BFF全体に関して以下を確認 • レスポンスが既定値以内に終わっているか •
pod1台あたりの捌ける req/s • podを増やした際に捌ける req/s は線形に増加するか • 負荷をかけた場合のボトルネックがどこになるか • 負荷をかけた際のバックエンドサービスの負荷状況 • etc
© ZOZO Technologies, Inc. 38 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client 結合負荷試験準備 • 結合試験環境の各backendを増強依頼 ◦ 結合試験環境の費用が高騰する • 他案件の試験とスケジュール調整が必要 各バックエンドサービスの試験環境も増強
© ZOZO Technologies, Inc. 39 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client 結合負荷試験のポイント バックエンドサービス側がボトルネックになっている場合もある • 一部エンドポイントのレスポンス遅延がボトルネックである事を発見 ◦ 該当サービスの担当者へチューニングの相談等の対応が必要になる
© ZOZO Technologies, Inc. 40 商品 サービス 検索 サービス 推薦
サービス BFF API Gateway Client 結合負荷試験のポイント • 一部エンドポイントのレスポンス遅延がボトルネックである事を発見 ◦ 該当サービスの担当者へチューニングの相談等の対応が必要になる メトリックも問題解決の重要な要素 バックエンドサービス側がボトルネックになっている場合もある
© ZOZO Technologies, Inc. 41 BFFとバックエンドの負荷状況やエラー状況を同じ時系列で一気通貫して見れるダッシュボードが重要
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
▪ 単体負荷試験 ▪ 結合負荷試験 ◦ 障害試験 • その他 42
© ZOZO Technologies, Inc. 43 障害試験 BFFのアプリケーションにて以下を確認 • Podの回復性確認 ◦
セルフヒーリング ◦ ローリングアップデート ◦ グレースフルシャットダウン • 各バックエンドサービスの障害影響を受けない • アプリのリトライ・タイムアウト制御が想定通りに動作している • etc
© ZOZO Technologies, Inc. 44 商品 サービス (mock) 検索 サービス
(mock) 推薦 サービス (mock) BFF API Gateway Client 障害試験 • バックエンドサービス停止を複数回行うのでmockで実施 • retryやtimeoutも含めた『障害時の動作』をチェック 各バックエンドの障害も想定した試験が必要 mockコンテナの強制停止
© ZOZO Technologies, Inc. 45 障害時の動作が想定通りなのかを確認 リトライ回数が設計した2回ではなく3回になっている等もリリース前に発見
© ZOZO Technologies, Inc. • 監視(可観測性) • 試験 ◦ 負荷試験
◦ 障害試験 • その他 46
© ZOZO Technologies, Inc. 47 • Istioによるサービスメッシュの導入 ◦ https://speakerdeck.com/akitok_/how-to-setup-production-ready-istio •
Canaryリリースの仕組みを導入 ◦ ビッグバンリリースをしない • etc 今後も様々な取り組みをしていきます その他 プロダクションレディのための取り組み
© ZOZO Technologies, Inc. 48 まとめ • マイクロサービスは複雑なサービス間連携があるため可観測性が重要 • 可観測性を担保するために多面的にデータを収集し、分析ができる状態に
する必要がある • APMやダッシュボードは非常に有効な手段である • マイクロサービスは関連サービスの障害やパフォーマンス低下に起因した 問題が発生しうるため、結合試験や関連サービスを含めた負荷試験、障害 試験が重要となる
© ZOZO Technologies, Inc. 私たちと一緒にマイクロサービス基盤を開発しませんか? 49 Kubernetes, AWS が大好きなエンジニアを募集しています! 募集職種名 ZOZOTOWN
SRE(マイクロサービス) 業務内容 ZOZOTOWNのマイクロサービスプロジェクトのSREを担当 ・サーバー、ネットワークの設計/構築/運用 ・IaCおよびCI/CDによる構築、デプロイ自動化 ・サービス監視の設計/運用 ・セキュリティ関連の設計/運用 ・パフォーマンスチューニングを含むSite Reliability向上のための実装 ・障害発生時の原因調査、サービス復旧作業 採用ページはこちら
None