Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバーレスなAPIサービスの全容 / All of the serverless API...
Search
naoya_s
November 18, 2020
Technology
0
1.1k
サーバーレスなAPIサービスの全容 / All of the serverless API services
naoya_s
November 18, 2020
Tweet
Share
More Decks by naoya_s
See All by naoya_s
静的解析ツールの刷新に向けた取り組み
suginao
1
340
RuffではじめるPython開発 / Python Development with Ruff
suginao
0
48
AWS SAMをさわってみた話 / Try AWS SAM
suginao
0
29
全国在宅勤務制度のすゝめ / Practice of National Telecommuting System
suginao
0
9
(エンジニアに送る)人に優しくなるための3つの方法 / 3 Ways for Engineers to Be Kind to People
suginao
0
17
Other Decks in Technology
See All in Technology
Navigation3でViewModelにデータを渡す方法
mikanichinose
0
220
“社内”だけで完結していた私が、AWS Community Builder になるまで
nagisa53
1
360
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
160
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1k
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
130
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.1k
Postman AI エージェントビルダー最新情報
nagix
0
110
Uniadex__公開版_20250617-AIxIoTビジネス共創ラボ_ツナガルチカラ_.pdf
iotcomjpadmin
0
160
標準技術と独自システムで作る「つらくない」SaaS アカウント管理 / Effortless SaaS Account Management with Standard Technologies & Custom Systems
yuyatakeyama
3
1.2k
How Community Opened Global Doors
hiroramos4
PRO
1
110
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
11
3.9k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Typedesign – Prime Four
hannesfritz
42
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
33
5.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Gamification - CAS2011
davidbonilla
81
5.3k
Side Projects
sachag
455
42k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Transcript
サーバーレスなAPIサービスの全容 ZOZO Technologies Meetup 〜ZOZOが提供するEC支援サービスの裏側〜 株式会社ZOZOテクノロジーズ BtoB開発部 BtoB開発チーム 杉田 尚弥
Copyright © ZOZO Technologies, Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ BtoB開発部 BtoB開発チーム 杉田 尚弥 2
'19 株式会社アラタナに新卒入社 バックエンドチームに配属後、 FBZの運用保守に従事 株式会社ZOZOテクノロジーズに転籍 '20 FBZのバックエンドを中心に開発
© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要 2. FBZ APIに求められた要件
3. FBZ APIにおけるアーキテクチャ 4. サーバーレスを採用した結果 目次 3
© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要 2. FBZ APIに求められた要件
3. FBZ APIにおけるアーキテクチャ 4. サーバーレスを採用した結果 目次 4
© ZOZO Technologies, Inc. FBZ APIのサービス概要 5 5
ZOZOBASE 自社カート システム FBZ API 商品在庫データ連携 データ連携 ZOZO TOWN 出荷 入荷 ZOZOBASEの商品・在庫情報を解放
© ZOZO Technologies, Inc. FBZ APIのサービス概要 6 ZOZOBASE 【データ】
商品 在庫 注文 etc. FBZ API 自社 カートシステム ・ ・ ・ ・ ・ ・ マネージドサービスの みで構成 在庫確保 カート作成 商品検索
© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要 2. FBZ APIに求められた要件
3. FBZ APIにおけるアーキテクチャ 4. サーバーレスを採用した結果 目次 7
© ZOZO Technologies, Inc. • アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する ◦ セール時期 ◦
人気商品の販売 FBZ APIに求められた要件 8
© ZOZO Technologies, Inc. • アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する ◦ セール時期・加熱商品の販売 FBZ
APIに求められた要件 9 低い運用コストで実現したい! 「サーバーレスアーキテクチャ」で実装しよう
© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要 2. FBZ APIに求められた要件
3. FBZ APIにおけるアーキテクチャ 4. サーバーレスを採用した結果 目次 10
© ZOZO Technologies, Inc. FBZ APIにおけるアーキテクチャ 11 リアルタイム性を求められる処理 リアルタイム性が必要
リアルタイム性が不要 データ参照元 ZOZOBASE FBZ 処理の例 ・在庫取得 ・在庫確保 ・商品参照 ・注文参照 • サーバーレスアーキテクチャ • 季節で変動があるトラフィックに対応するため、設計を2つに分ける
© ZOZO Technologies, Inc. ZOZOBASE 自社 カートシステム FBZ APIにおけるアーキテクチャ 12
非リアルタイム 要リアルタイム 注文 / 在庫 注文 / 商品 (キャッシュ済み) IP制限 ユーザー 認証 ZOZOBASEから取得 共有処理
© ZOZO Technologies, Inc. 要リアルタイムなAPI ・在庫情報取得・確保や注文作成などを行う 13 自社 カートシステム ZOZOBASE
在庫情報取得 / 在庫確保 etc. 保存
© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う 14 自社 カートシステム ・キャッシュ済みデータを参照
・FBZ内部で処理が完結 注文 / 商品 etc. 商品ID:xxxxxxx 商品名:シャツ カラー:ホワイト サイズ:L
© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う 15 各種 カートシステム 注文
/ 商品 etc. Q キャッシュしているデータは どうやって作成されるのか?
© ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う 16 各種 カートシステム 注文
/ 商品 etc. A バッチ処理によって 作成されています。
© ZOZO Technologies, Inc. バッチ処理の概要 17 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー
商品ID一覧を保存
© ZOZO Technologies, Inc. バッチ処理の概要 18 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー
商品ID一覧を保存 APIで参照していたデータ
© ZOZO Technologies, Inc. バッチ(商品同期) 19 ZOZOBASE ① ② ③
① 商品ID一覧をS3に設置 ② 商品ID一覧をパース ③ 商品情報を保存
© ZOZO Technologies, Inc. 商品同期(1/3) 20 ② ③ ZOZOBASEから取得した 商品ID一覧をS3に設置
ZOZOBASE ①
© ZOZO Technologies, Inc. 21 ZOZOBASE 1. CloudWatch EventsをトリガーにLambdaが起動 2.
ZOZOBASEから商品IDの一覧を取得 3. 取得したデータをS3のバケットに設置 ① 1. 2. 3.
© ZOZO Technologies, Inc. 商品同期(2/3) 22 ZOZOBASE ① ③ ②
商品ID一覧を 1つずつキューに入れる
© ZOZO Technologies, Inc. 23 1. S3イベントをトリガーにLambdaが起動 2. Lambdaによりバケットの内容がSQSにキューイングされる ②
1. 2.
© ZOZO Technologies, Inc. 商品同期(3/3) 24 ① ② ZOZOBASE キューの情報を元に
商品情報を取得・保存 ③
© ZOZO Technologies, Inc. 1. CloudWatch EventsをトリガーでLambdaが起動 2. SQSのメッセージの内容を取り出す 3.
取り出したメッセージを元に商品詳細を取得 4. 取得したデータをDynamoDBに保存 ③ ZOZOBASE 1. 2. 3. 4.
© ZOZO Technologies, Inc. バッチ(商品同期) 26 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー
商品ID一覧を保存
© ZOZO Technologies, Inc. • S3イベント • CloudWatch Events •
DynamoDB Streams 使用しているイベントの例 27
© ZOZO Technologies, Inc. • S3イベント(オブジェクト作成) • CloudWatch Events •
DynamoDB Streams 使用しているイベントの例 28 .json
© 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分ごと
© ZOZO Technologies, Inc. • S3イベント • CloudWatch Events •
DynamoDB Streams (DBの更新検知) 使用しているイベントの例 30 ・作成・更新・削除
© ZOZO Technologies, Inc. 1. FBZ APIのサービス概要 2. FBZ APIに求められた要件
3. サービスで実現するサーバーレスアーキテクチャ 4. サーバーレスを採用した結果 目次 31
© ZOZO Technologies, Inc. • スパイクが発生しても自動でスケール • 問題発生時のリカバリが容易に • ベンダー側(AWS)で定期的にサービスの機能更新を実施
• インフラ管理が不要 etc. サーバーレスを採用した結果 32
© ZOZO Technologies, Inc. セール時のスパイクにも対応 33 API Gateway リクエスト数 2019
8月 2019 12月
© ZOZO Technologies, Inc. セール時のスパイクにも対応 34 7〜8倍近くリクエストにも 耐えた実績 2019 8月
2019 12月 API Gateway リクエスト数
© ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 35 不正.json Lambdaがエラーになる
© ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 36 修正.json ファイルの再設置だけで 後続処理まで進む
© ZOZO Technologies, Inc. おまけ 37
© 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
© ZOZO Technologies, Inc. 1500 750 500 150 FBZ APIの全容
39 APIエンドポイント数 Lambda関数 DynamoDBテーブル SQSキュー 大規模サービスでもインフラ管理無しに稼働できている(※2020年 11月時点)
None