Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーレスなAPIサービスの全容 / All of the serverless API services

naoya_s
November 18, 2020

サーバーレスなAPIサービスの全容 / All of the serverless API services

naoya_s

November 18, 2020
Tweet

More Decks by naoya_s

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 BtoB開発部
 BtoB開発チーム 杉田 尚弥
 2

    '19 株式会社アラタナに新卒入社 バックエンドチームに配属後、 FBZの運用保守に従事 株式会社ZOZOテクノロジーズに転籍 '20 FBZのバックエンドを中心に開発
  2. © ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件


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


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


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

    商品 在庫 注文 etc. FBZ API 自社 カートシステム ・ ・ ・ ・ ・ ・ マネージドサービスの みで構成 在庫確保 カート作成 商品検索
  6. © ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件


    3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 7
  7. © ZOZO Technologies, Inc. • アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する
 ◦ セール時期・加熱商品の販売
 FBZ

    APIに求められた要件 
 9 低い運用コストで実現したい!
 「サーバーレスアーキテクチャ」で実装しよう
 

  8. © ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件


    3. FBZ APIにおけるアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 10
  9. © ZOZO Technologies, Inc. FBZ APIにおけるアーキテクチャ 
 11 リアルタイム性を求められる処理 リアルタイム性が必要

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

  10. © ZOZO Technologies, Inc. ZOZOBASE 自社 カートシステム FBZ APIにおけるアーキテクチャ
 12

    非リアルタイム 要リアルタイム 注文 / 在庫 注文 / 商品 (キャッシュ済み) IP制限 ユーザー 認証 ZOZOBASEから取得 共有処理
  11. © ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 14 自社 カートシステム ・キャッシュ済みデータを参照

    ・FBZ内部で処理が完結 注文 / 商品 etc. 商品ID:xxxxxxx 商品名:シャツ カラー:ホワイト サイズ:L
  12. © ZOZO Technologies, Inc. バッチ(商品同期)
 19 ZOZOBASE ① ② ③

    ① 商品ID一覧をS3に設置 ② 商品ID一覧をパース ③ 商品情報を保存
  13. © ZOZO Technologies, Inc. 21 ZOZOBASE 1. CloudWatch EventsをトリガーにLambdaが起動 2.

    ZOZOBASEから商品IDの一覧を取得 3. 取得したデータをS3のバケットに設置 ① 1. 2. 3.
  14. © ZOZO Technologies, Inc. 商品同期(2/3)
 22 ZOZOBASE ① ③ ②

    商品ID一覧を 1つずつキューに入れる
  15. © ZOZO Technologies, Inc. 1. CloudWatch EventsをトリガーでLambdaが起動 2. SQSのメッセージの内容を取り出す 3.

    取り出したメッセージを元に商品詳細を取得 4. 取得したデータをDynamoDBに保存 ③ ZOZOBASE 1. 2. 3. 4.
  16. © ZOZO Technologies, Inc. • S3イベント
 • CloudWatch Events
 •

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

    DynamoDB Streams
 使用しているイベントの例
 28 .json
  18. © 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分ごと
  19. © ZOZO Technologies, Inc. • S3イベント
 • CloudWatch Events
 •

    DynamoDB Streams (DBの更新検知)
 使用しているイベントの例
 30 ・作成・更新・削除
  20. © ZOZO Technologies, Inc. 1. FBZ APIのサービス概要
 2. FBZ APIに求められた要件


    3. サービスで実現するサーバーレスアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 31
  21. © 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
  22. © ZOZO Technologies, Inc. 1500 750 500 150 FBZ APIの全容


    39 APIエンドポイント数 Lambda関数 DynamoDBテーブル SQSキュー 大規模サービスでもインフラ管理無しに稼働できている(※2020年 11月時点)