Slide 1

Slide 1 text

Backends For Frontends(BFF)をプロダクションレディするまでの取り組み
 ZOZO Tech Meetup
 〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜
 
 
 株式会社ZOZOテクノロジーズ
 SRE部 ECプラットフォームSRE
 三神 拓哉 Copyright © ZOZO Technologies, Inc.

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC基盤本部/SRE部
 ECプラットフォームSRE
 三神 拓哉
 twitter: @EnKUMA_
 2019年5月にZOZOテクノロジーズへ中途入社
 前職ではオンプレミスの動画配信システムを担当していまし た
 現在はZOZOTOWNリプレイスプロジェクトにてSREとして参 画しています
 6月に札幌へ引越をしました
 2

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. ZOZOテクノロジーズは日本全国から就業可能です!
 制度をフル活用して札幌ライフを満喫しています! 3

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. https://zozo.jp/
 4 ● 日本最大級のファッション通販サイト
 ● 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月 末時点)
 ● 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品 を掲載
 ● コスメ専門モール「ZOZOCOSME」や靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 ● 即日配送サービス
 ● ギフトラッピングサービス
 ● ツケ払い など


Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. 6 はじめに

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. 8 ZOZOTOWNにおけるBFF

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

© ZOZO Technologies, Inc. 10 改めてBFFとは?
 BFFはBackends For Frontendsの略であり、アーキテクチャ設計パターンの1つです。
 フロントエンドのリクエストに応じて各種のAPIコールをしたり、バックエンドから取得した内容を加工してフロントエンドに返 却したりするフロントエンド専用のサーバーを用意するアーキテクチャ設計パターンです。
 
 https://samnewman.io/patterns/architectural/bff/
 『Building Microservices』の著者であるSam Newmanさんの記事を是非ご覧ください

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. 11 ZOZOTOWNにおけるBFF

Slide 12

Slide 12 text

© 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つとして実装

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 15 プロダクションレディにおける重要なこと
 ● 安定性
 ● 信頼性
 ● パフォーマンス
 ● 監視
 ● スケーラビリティ
 ● 耐障害性と大惨事への対応
 ● ドキュメント


Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 16 プロダクションレディにおける重要なこと
 ● 安定性
 ● 信頼性
 ● パフォーマンス
 ● 監視
 ● スケーラビリティ
 ● 耐障害性と大惨事への対応
 ● ドキュメント
 ここを満たすためには監視・分析ができている状態作る必要がある ● 正常に動いているかどうか、動いていないときそれはどこに原因があるか ● パフォーマンスが良いか悪いか、ボトルネックはどこか ● etc

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 19 関連要素が多い

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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


Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. 26 兎にも角にもAPM
 APM様

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. ● 監視(可観測性)
 ● 試験
 ○ 負荷試験
 ■ 単体負荷試験
 ■ 結合負荷試験
 ○ 障害試験
 ● その他
 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

© ZOZO Technologies, Inc. 32 商品 サービス 検索 サービス 推薦 サービス BFF API Gateway Client 最終的に各バックエンドサービスも含めた試験が必要

Slide 33

Slide 33 text

© ZOZO Technologies, Inc. ● 監視(可観測性)
 ● 試験
 ○ 負荷試験
 ■ 単体負荷試験
 ■ 結合負荷試験
 ○ 障害試験
 ● その他
 33

Slide 34

Slide 34 text

© ZOZO Technologies, Inc. 34 単体負荷試験
 BFFのアプリケーションに関して以下を確認 ● レスポンスが目標秒数以内に終わっているか ● pod1台あたりの捌ける req/s ● podを増やした際に捌ける req/s は線形に増加するか ● バックエンドの負荷を考慮しなければ何podで 想定req/s を超えられるか ● etc

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

© ZOZO Technologies, Inc. ● 監視(可観測性)
 ● 試験
 ○ 負荷試験
 ■ 単体負荷試験
 ■ 結合負荷試験
 ○ 障害試験
 ● その他
 36

Slide 37

Slide 37 text

© ZOZO Technologies, Inc. 37 結合負荷試験
 BFF全体に関して以下を確認 ● レスポンスが既定値以内に終わっているか ● pod1台あたりの捌ける req/s ● podを増やした際に捌ける req/s は線形に増加するか ● 負荷をかけた場合のボトルネックがどこになるか ● 負荷をかけた際のバックエンドサービスの負荷状況 ● etc

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

© ZOZO Technologies, Inc. 41 BFFとバックエンドの負荷状況やエラー状況を同じ時系列で一気通貫して見れるダッシュボードが重要

Slide 42

Slide 42 text

© ZOZO Technologies, Inc. ● 監視(可観測性)
 ● 試験
 ○ 負荷試験
 ■ 単体負荷試験
 ■ 結合負荷試験
 ○ 障害試験
 ● その他
 42

Slide 43

Slide 43 text

© ZOZO Technologies, Inc. 43 障害試験
 BFFのアプリケーションにて以下を確認 ● Podの回復性確認 ○ セルフヒーリング ○ ローリングアップデート ○ グレースフルシャットダウン ● 各バックエンドサービスの障害影響を受けない ● アプリのリトライ・タイムアウト制御が想定通りに動作している ● etc

Slide 44

Slide 44 text

© ZOZO Technologies, Inc. 44 商品 サービス (mock) 検索 サービス (mock) 推薦 サービス (mock) BFF API Gateway Client 障害試験
 
 ● バックエンドサービス停止を複数回行うのでmockで実施 ● retryやtimeoutも含めた『障害時の動作』をチェック 各バックエンドの障害も想定した試験が必要 mockコンテナの強制停止

Slide 45

Slide 45 text

© ZOZO Technologies, Inc. 45 障害時の動作が想定通りなのかを確認
 リトライ回数が設計した2回ではなく3回になっている等もリリース前に発見

Slide 46

Slide 46 text

© ZOZO Technologies, Inc. ● 監視(可観測性)
 ● 試験
 ○ 負荷試験
 ○ 障害試験
 ● その他
 46

Slide 47

Slide 47 text

© ZOZO Technologies, Inc. 47 ● Istioによるサービスメッシュの導入 ○ https://speakerdeck.com/akitok_/how-to-setup-production-ready-istio ● Canaryリリースの仕組みを導入 ○ ビッグバンリリースをしない ● etc 今後も様々な取り組みをしていきます その他 プロダクションレディのための取り組み


Slide 48

Slide 48 text

© ZOZO Technologies, Inc. 48 まとめ
 ● マイクロサービスは複雑なサービス間連携があるため可観測性が重要
 ● 可観測性を担保するために多面的にデータを収集し、分析ができる状態に する必要がある ● APMやダッシュボードは非常に有効な手段である
 ● マイクロサービスは関連サービスの障害やパフォーマンス低下に起因した 問題が発生しうるため、結合試験や関連サービスを含めた負荷試験、障害 試験が重要となる


Slide 49

Slide 49 text

© ZOZO Technologies, Inc. 私たちと一緒にマイクロサービス基盤を開発しませんか?
 49 Kubernetes, AWS が大好きなエンジニアを募集しています!
 募集職種名 ZOZOTOWN SRE(マイクロサービス)
 
 
 業務内容 ZOZOTOWNのマイクロサービスプロジェクトのSREを担当
 ・サーバー、ネットワークの設計/構築/運用
 ・IaCおよびCI/CDによる構築、デプロイ自動化
 ・サービス監視の設計/運用
 ・セキュリティ関連の設計/運用
 ・パフォーマンスチューニングを含むSite Reliability向上のための実装
 ・障害発生時の原因調査、サービス復旧作業
 採用ページはこちら

Slide 50

Slide 50 text

No content