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
61
AWS SAMをさわってみた話 / Try AWS SAM
suginao
0
39
全国在宅勤務制度のすゝめ / Practice of National Telecommuting System
suginao
1
17
(エンジニアに送る)人に優しくなるための3つの方法 / 3 Ways for Engineers to Be Kind to People
suginao
0
32
Other Decks in Technology
See All in Technology
AI時代にエンジニアはどう成長すれば良いのか?
recruitengineers
PRO
1
120
実録・Platform Engineering 失敗から学び、AI時代の波を乗りこなす技術
sansantech
PRO
1
100
OSSで構築するIT基盤管理実践事例: NetBox・Snipe-IT・FreeRADIUS+PrivacyIDEA / Practical Case Studies of IT Infrastructure Management Using OSS
nttcom
0
190
ブラックボックス観測に基づくAI支援のプロトコルのリバースエンジニアリングと再現~AIを用いたリバースエンジニアリング~ @ SECCON 14 電脳会議 / Reverse Engineering and Reproduction of an AI-Assisted Protocol Based on Black-Box Observation @ SECCON 14 DENNO-KAIGI
chibiegg
0
140
Master Dataグループ紹介資料
sansan33
PRO
1
4.4k
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1.1k
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
2
750
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
1
140
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
大規模サービスにおける レガシーコードからReactへの移行
magicpod
1
120
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
0
290
Kiro のクレジットを使い切る!
otanikohei2023
0
110
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
270
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
51k
Why Our Code Smells
bkeepers
PRO
340
58k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
BBQ
matthewcrist
89
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Marketing to machines
jonoalderson
1
5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
The Cult of Friendly URLs
andyhume
79
6.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
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