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
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
260
RuffではじめるPython開発 / Python Development with Ruff
suginao
0
33
AWS SAMをさわってみた話 / Try AWS SAM
suginao
0
24
全国在宅勤務制度のすゝめ / Practice of National Telecommuting System
suginao
0
7
(エンジニアに送る)人に優しくなるための3つの方法 / 3 Ways for Engineers to Be Kind to People
suginao
0
9
Other Decks in Technology
See All in Technology
JAWS UG 青森(弘前)クラウド・AWS入門
hiragahh
0
130
組織成長を加速させるオンボーディングの取り組み
sudoakiy
3
350
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
350
SAP Community and Developer Update
sygyzmundovych
0
350
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
380
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.8k
Next.jsとNuxtが混在? iframeでなんとかする!
ypresto
2
1.8k
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
640
Is Go A Good Language to Build Compilers?
kennethanceyer
0
110
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
atsushii
0
170
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
33
1.5k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Documentation Writing (for coders)
carmenintech
65
4.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Adaptive Systems
keathley
38
2.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
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