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.3k
サーバーレスな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
380
RuffではじめるPython開発 / Python Development with Ruff
suginao
0
59
AWS SAMをさわってみた話 / Try AWS SAM
suginao
0
37
全国在宅勤務制度のすゝめ / Practice of National Telecommuting System
suginao
1
16
(エンジニアに送る)人に優しくなるための3つの方法 / 3 Ways for Engineers to Be Kind to People
suginao
0
30
Other Decks in Technology
See All in Technology
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
600
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
What happened to RubyGems and what can we learn?
mikemcquaid
0
310
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
120
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
Cosmos World Foundation Model Platform for Physical AI
takmin
0
950
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
190
配列に見る bash と zsh の違い
kazzpapa3
3
160
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
20260204_Midosuji_Tech
takuyay0ne
1
160
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
120
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
680
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
Visualization
eitanlees
150
17k
Mind Mapping
helmedeiros
PRO
0
89
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
76
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
56
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
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