Slide 1

Slide 1 text

サーバーレスなAPIサービスの全容
 ZOZO Technologies Meetup
 〜ZOZOが提供するEC支援サービスの裏側〜
 株式会社ZOZOテクノロジーズ
 BtoB開発部 BtoB開発チーム
 杉田 尚弥 Copyright © ZOZO Technologies, Inc.

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 BtoB開発部
 BtoB開発チーム 杉田 尚弥
 2 '19 株式会社アラタナに新卒入社 バックエンドチームに配属後、 FBZの運用保守に従事 株式会社ZOZOテクノロジーズに転籍 '20 FBZのバックエンドを中心に開発

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件
 3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 3

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件
 3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 4

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. FBZ APIのサービス概要
 5 5 
 
 
 
 
 
 
 ZOZOBASE
 自社カート
 システム
 FBZ API
 商品在庫データ連携 データ連携 ZOZO
 TOWN
 出荷 入荷 ZOZOBASEの商品・在庫情報を解放

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. FBZ APIのサービス概要
 
 6 ZOZOBASE 【データ】 商品 在庫 注文 etc. FBZ API 自社 カートシステム ・ ・ ・ ・ ・ ・ マネージドサービスの みで構成 在庫確保 カート作成 商品検索

Slide 7

Slide 7 text

© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件
 3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 7

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. ● アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する
 ○ セール時期
 ○ 人気商品の販売
 FBZ APIに求められた要件 
 8

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. ● アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する
 ○ セール時期・加熱商品の販売
 FBZ APIに求められた要件 
 9 低い運用コストで実現したい!
 「サーバーレスアーキテクチャ」で実装しよう
 


Slide 10

Slide 10 text

© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件
 3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 10

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. FBZ APIにおけるアーキテクチャ 
 11 リアルタイム性を求められる処理 リアルタイム性が必要 リアルタイム性が不要 データ参照元 ZOZOBASE FBZ 処理の例 ・在庫取得 ・在庫確保 ・商品参照 ・注文参照 ● サーバーレスアーキテクチャ ● 季節で変動があるトラフィックに対応するため、設計を2つに分ける 


Slide 12

Slide 12 text

© ZOZO Technologies, Inc. ZOZOBASE 自社 カートシステム FBZ APIにおけるアーキテクチャ
 12 非リアルタイム 要リアルタイム 注文 / 在庫 注文 / 商品 (キャッシュ済み) IP制限 ユーザー 認証 ZOZOBASEから取得 共有処理

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. 要リアルタイムなAPI ・在庫情報取得・確保や注文作成などを行う
 13 自社 カートシステム ZOZOBASE 在庫情報取得 / 在庫確保 etc. 保存

Slide 14

Slide 14 text

© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 14 自社 カートシステム ・キャッシュ済みデータを参照 ・FBZ内部で処理が完結 注文 / 商品 etc. 商品ID:xxxxxxx 商品名:シャツ カラー:ホワイト サイズ:L

Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 15 各種 カートシステム 注文 / 商品 etc. Q キャッシュしているデータは どうやって作成されるのか?

Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 16 各種 カートシステム 注文 / 商品 etc. A バッチ処理によって 作成されています。

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. バッチ処理の概要
 17 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー 商品ID一覧を保存

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. バッチ処理の概要
 18 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー 商品ID一覧を保存 APIで参照していたデータ

Slide 19

Slide 19 text

© ZOZO Technologies, Inc. バッチ(商品同期)
 19 ZOZOBASE ① ② ③ ① 商品ID一覧をS3に設置 ② 商品ID一覧をパース ③ 商品情報を保存

Slide 20

Slide 20 text

© ZOZO Technologies, Inc. 商品同期(1/3)
 20 ② ③ ZOZOBASEから取得した 商品ID一覧をS3に設置 ZOZOBASE ①

Slide 21

Slide 21 text

© ZOZO Technologies, Inc. 21 ZOZOBASE 1. CloudWatch EventsをトリガーにLambdaが起動 2. ZOZOBASEから商品IDの一覧を取得 3. 取得したデータをS3のバケットに設置 ① 1. 2. 3.

Slide 22

Slide 22 text

© ZOZO Technologies, Inc. 商品同期(2/3)
 22 ZOZOBASE ① ③ ② 商品ID一覧を 1つずつキューに入れる

Slide 23

Slide 23 text

© ZOZO Technologies, Inc. 23 1. S3イベントをトリガーにLambdaが起動 2. Lambdaによりバケットの内容がSQSにキューイングされる ② 1. 2.

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. 商品同期(3/3)
 24 ① ② ZOZOBASE キューの情報を元に 商品情報を取得・保存 ③

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. 1. CloudWatch EventsをトリガーでLambdaが起動 2. SQSのメッセージの内容を取り出す 3. 取り出したメッセージを元に商品詳細を取得 4. 取得したデータをDynamoDBに保存 ③ ZOZOBASE 1. 2. 3. 4.

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. バッチ(商品同期)
 26 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー 商品ID一覧を保存

Slide 27

Slide 27 text

© ZOZO Technologies, Inc. ● S3イベント
 ● CloudWatch Events
 ● DynamoDB Streams
 使用しているイベントの例
 27

Slide 28

Slide 28 text

© ZOZO Technologies, Inc. ● S3イベント(オブジェクト作成)
 ● CloudWatch Events
 ● DynamoDB Streams
 使用しているイベントの例
 28 .json

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. ● S3イベント
 ● CloudWatch Events (cronやrate)
 ● DynamoDB Streams
 使用しているイベントの例
 29 1. cron(40 10 * * ? *) → 毎日午前10時40分 2. cron(0/10 * ? * MON-FRI *) → 平日の30分ごと 3. rate(30 minutes) → 30分ごと

Slide 30

Slide 30 text

© ZOZO Technologies, Inc. ● S3イベント
 ● CloudWatch Events
 ● DynamoDB Streams (DBの更新検知)
 使用しているイベントの例
 30 ・作成・更新・削除

Slide 31

Slide 31 text

© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件
 3. サービスで実現するサーバーレスアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 31

Slide 32

Slide 32 text

© ZOZO Technologies, Inc. ● スパイクが発生しても自動でスケール
 ● 問題発生時のリカバリが容易に
 ● ベンダー側(AWS)で定期的にサービスの機能更新を実施
 ● インフラ管理が不要 etc.
 サーバーレスを採用した結果
 32

Slide 33

Slide 33 text

© ZOZO Technologies, Inc. セール時のスパイクにも対応
 33 API Gateway リクエスト数 2019 8月 2019 12月

Slide 34

Slide 34 text

© ZOZO Technologies, Inc. セール時のスパイクにも対応
 34 7〜8倍近くリクエストにも 耐えた実績 2019 8月 2019 12月 API Gateway リクエスト数

Slide 35

Slide 35 text

© ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 
 35 不正.json Lambdaがエラーになる

Slide 36

Slide 36 text

© ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 
 36 修正.json ファイルの再設置だけで 後続処理まで進む

Slide 37

Slide 37 text

© ZOZO Technologies, Inc. おまけ
 37

Slide 38

Slide 38 text

© ZOZO Technologies, Inc. FBZで使用しているAWSサービス
 38 Lambda SQS CloudFormation Route 53 Elasticsearch Service CodeBuild Cognito S3 CodePipeline SES CloudWatch Step Functions DynamoDB API Gateway IAM CloudFront Amazon VPC SNS X-Ray AWS WAF

Slide 39

Slide 39 text

© ZOZO Technologies, Inc. 1500 750 500 150 FBZ APIの全容
 39 APIエンドポイント数 Lambda関数 DynamoDBテーブル SQSキュー 大規模サービスでもインフラ管理無しに稼働できている(※2020年 11月時点)

Slide 40

Slide 40 text

No content