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

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

96e6721cf9462dfc15a564189a701d29?s=47 naoya_s
November 18, 2020

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

96e6721cf9462dfc15a564189a701d29?s=128

naoya_s

November 18, 2020
Tweet

Transcript

  1. サーバーレスなAPIサービスの全容
 ZOZO Technologies Meetup
 〜ZOZOが提供するEC支援サービスの裏側〜
 株式会社ZOZOテクノロジーズ
 BtoB開発部 BtoB開発チーム
 杉田 尚弥

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

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


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


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


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

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


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

    人気商品の販売
 FBZ APIに求められた要件 
 8
  9. © ZOZO Technologies, Inc. • アパレルを扱うサービスならではの、特定タイミングで発生す るスパイクに対応する
 ◦ セール時期・加熱商品の販売
 FBZ

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

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


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

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

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

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

    在庫情報取得 / 在庫確保 etc. 保存
  14. © ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 14 自社 カートシステム ・キャッシュ済みデータを参照

    ・FBZ内部で処理が完結 注文 / 商品 etc. 商品ID:xxxxxxx 商品名:シャツ カラー:ホワイト サイズ:L
  15. © ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 15 各種 カートシステム 注文

    / 商品 etc. Q キャッシュしているデータは どうやって作成されるのか?
  16. © ZOZO Technologies, Inc. 非リアルタイムなAPI ・注文情報・商品情報の参照などを行う
 16 各種 カートシステム 注文

    / 商品 etc. A バッチ処理によって 作成されています。
  17. © ZOZO Technologies, Inc. バッチ処理の概要
 17 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー

    商品ID一覧を保存
  18. © ZOZO Technologies, Inc. バッチ処理の概要
 18 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー

    商品ID一覧を保存 APIで参照していたデータ
  19. © ZOZO Technologies, Inc. バッチ(商品同期)
 19 ZOZOBASE ① ② ③

    ① 商品ID一覧をS3に設置 ② 商品ID一覧をパース ③ 商品情報を保存
  20. © ZOZO Technologies, Inc. 商品同期(1/3)
 20 ② ③ ZOZOBASEから取得した 商品ID一覧をS3に設置

    ZOZOBASE ①
  21. © ZOZO Technologies, Inc. 21 ZOZOBASE 1. CloudWatch EventsをトリガーにLambdaが起動 2.

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

    商品ID一覧を 1つずつキューに入れる
  23. © ZOZO Technologies, Inc. 23 1. S3イベントをトリガーにLambdaが起動 2. Lambdaによりバケットの内容がSQSにキューイングされる ②

    1. 2.
  24. © ZOZO Technologies, Inc. 商品同期(3/3)
 24 ① ② ZOZOBASE キューの情報を元に

    商品情報を取得・保存 ③
  25. © ZOZO Technologies, Inc. 1. CloudWatch EventsをトリガーでLambdaが起動 2. SQSのメッセージの内容を取り出す 3.

    取り出したメッセージを元に商品詳細を取得 4. 取得したデータをDynamoDBに保存 ③ ZOZOBASE 1. 2. 3. 4.
  26. © ZOZO Technologies, Inc. バッチ(商品同期)
 26 ZOZOBASE 商品ID一覧を取得 IDを元に商品情報を取得 IDごとにエンキュー

    商品ID一覧を保存
  27. © ZOZO Technologies, Inc. • S3イベント
 • CloudWatch Events
 •

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

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

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


    3. サービスで実現するサーバーレスアーキテクチャ
 4. サーバーレスを採用した結果
 
 目次
 31
  32. © ZOZO Technologies, Inc. • スパイクが発生しても自動でスケール
 • 問題発生時のリカバリが容易に
 • ベンダー側(AWS)で定期的にサービスの機能更新を実施


    • インフラ管理が不要 etc.
 サーバーレスを採用した結果
 32
  33. © ZOZO Technologies, Inc. セール時のスパイクにも対応
 33 API Gateway リクエスト数 2019

    8月 2019 12月
  34. © ZOZO Technologies, Inc. セール時のスパイクにも対応
 34 7〜8倍近くリクエストにも 耐えた実績 2019 8月

    2019 12月 API Gateway リクエスト数
  35. © ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 
 35 不正.json Lambdaがエラーになる

  36. © ZOZO Technologies, Inc. 問題が発生した場合のリカバリが容易 
 36 修正.json ファイルの再設置だけで 後続処理まで進む

  37. © ZOZO Technologies, Inc. おまけ
 37

  38. © 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
  39. © ZOZO Technologies, Inc. 1500 750 500 150 FBZ APIの全容


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