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

10 分でわかる 3factor app

10 分でわかる 3factor app

AWS Summit 2023 Developer Lounge ミニセッションの発表資料です

NemOps

May 17, 2023
Tweet

More Decks by NemOps

Other Decks in Technology

Transcript

  1. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 10 分でわかる 3factor app Hiroto Sakuraya Partner Solutions Architect Amazon Web Services Japan G.K.
  2. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. このセッションは、AWS Dev Day 2022 で⾏なった 3factor app の解説 セッションの超短縮版です。今⽇は、「3factor app 完全に理解した」 と⾔えるようになるくらいの概要の紹介にとどめますので、興味があれ ば昨年の録画と資料をご覧ください。 本セッションの内容について 昨年のセッション Ø Youtube: 3factor app って結局のところ何なの︖ | AWS Dev Day 2022 Japan Ø Speaker Deck: 3factor app って結局のところ何なの︖ - AWS Dev Day 2022
  3. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. このセッションで話すこと • 3factor app とは • AWS における実装例 • メリットと課題
  4. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor app とは "3factor app is an architecture pattern for modern full-stack apps. 3factor enables building apps that are robust and scalable from the get go by using modern API architectures along with the power of Cloud." "3factor app とは、モダンなフルスタックアプリケーションのための アーキテクチャパターンで、モダンな API アーキテクチャとクラウド の⼒を利⽤することによって、最初から堅牢でスケーラブルなアプリ ケーションの構築を可能にする。" https://3factor.app/
  5. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor app を構成する 3 つの要素 1. リアルタイム GraphQL 2. 信頼性のある イベント 3. ⾮同期 サーバーレス
  6. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 基本的なコンセプト • アプリケーションは GraphQL API 経由でステートを操作する • ステートの変更をトリガーとして、イベントが発⾏される • ビジネスロジックは、⾮同期でイベントを経由して呼び出される • アプリケーションは、最新のステートをサブスクリプション経由で リアルタイムに受け取る
  7. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 処理の流れ フロントエンド ステート管理 データベース マイクロサービス マイクロサービス マイクロサービス GraphQL API イベントシステム 1 2 3 4 1. ユーザーのインタラクション (ex. 注⽂) 2. ステートの更新 3. イベントの⽣成 / ルーティング / アーカイブ 4. ビジネスロジックの呼び出し (⾮同期) 5. ステートの更新 6. 最新のステートの取得 (サブスクリプション) 5 更新通知 サーバーレス関数として実装 6
  8. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装してみる フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 3. DynamoDB Streams で変更をキャプチャ 4. EventBridge Pipes 経由で Lambda 関数にイベントを配信 5. イベントの処理結果に応じて AppSync 経由でステートを更新 6. ステートの更新をサブスクリプションでリアルタイムに通知 2 Amazon DynamoDB DynamoDB Streams 3 Amazon EventBridge Pipes 4 サービス A サービス B サービス C AWS Lambda 関数 5 6
  9. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor app on AWS を⽀える要素 EventBridge DLQ 信頼性の⾼いイベント配信 • at least once の配信 • リトライポリシー • デッドレターキュー イベントバス アーカイブ • イベントのアーカイブ • イベントの再⽣ DynamoDB 変更データキャプチャ • exactly once の配信 • 順序保証 • データは 24 時間保持 • ニアリアルタイム イベント履歴の保管 DynamoDB Streams Amazon Kinesis Data Streams * DynamoDB Streams の場合
  10. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor であることの利点 ü スキーマそのものが API ドキュメントになる ü フロントエンドの開発者体験の向上 ü インタラクションに対する迅速なフィードバック ü リアルタイムなデータの反映 ü リクエスト数の削減 ü 軽量な API レイヤー ü サービス間を疎結合に ü 可⽤性やパフォーマンスの影響を最⼩限に ü エラー時の復旧、処理のリトライが容易 ü イベントログのアーカイブによって特定時点のステートを再現可能 ü サービスの追加または変更に対する拡張性 ü 開発者をサーバーの運⽤から解放し、ビジネス価値に集中 ü 市場投⼊までの時間を⾼速化 ü 需要に応じた柔軟なスケール ü 利⽤した分だけの課⾦で無駄なコストを削減 ü マネージドな可⽤性およびセキュリティ
  11. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 課題/気をつけるべきポイント o イベントの順序性は重要か︖どうやって保証するか︖ o 結果整合性が許容できるビジネス要件か︖ o ビジネスロジックは冪等に実装しているか︖ o エンドツーエンドのオブザーバビリティは確保されているか︖ o エラー発⽣時の補償はどうするか︖ o 新しい技術の学習コスト ex. 脱 RESTful、⾮同期処理/イベント駆動の考え⽅、マネージドサービスの利⽤⽅法 o アプリケーションのマイクロサービス化 など
  12. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サービスごとのイベントハンドリングモデル イベントストアを 利⽤しない (FIFO で順序) ⾼耐久性の メッセージ処理 (FIFO で順序) Amazon SNS Amazon SQS Amazon Kinesis ⾼耐久性の メッセージ処理 (順序の保証) queue shard
  13. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ユースケースおよび制約 • ユーザーに対してリアルタイムに最新の情報を反映する必要がある ex. 投票システム、分析ダッシュボード、フードデリバリーアプリ • ⾼いスループットやユーザー体験が求められる • 過去の特定時点のステートを再計算したい ex. 運⾏管理システム、将棋・⿇雀などの盤⾯の再現 • 結果整合性が許容できる、ビジネスロジックを⾮同期に実⾏できる • バックエンドがマイクロサービス
  14. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor app は全く新しい技術というわけではない • WebSocket • ドメイン駆動設計 • イベント駆動開発 • コマンドクエリ責務分離 (CQRS) • イベントソーシング • Change Data Capture (CDC)
  15. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. The Right Tool for the Right Job イベント サーバーレス GraphQL ü 本当に 3factor 必要か︖ ü この factor でないと実現できないか︖ ü そもそも何を実現したいのか︖ アーキテクチャパターンを採⽤する前に...
  16. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 2023 TOKYO
  17. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 50以上 のセッションで 技術解説と事例、 ライブコーディングなどから クラウドネイティブ開発の 最先端 を学ぶ ネットワーキングエリアで 開発どうしが交流できる u ⽇程︓6 ⽉ 21 ⽇(⽔)〜 23 ⽇(⾦) u 開催形態: 6⽉21⽇ 前夜祭(オンラインのみ) 6⽉22⽇-23⽇ 対⾯カンファレンス u 会場︓ベルサール渋⾕ガーデン(東京都渋⾕区) AWS 国内最⼤の開発者向けカンファレンス 「AWS Dev Day 2023 Tokyo」 4年ぶりに 対⾯イベント として開催します 予備登録はこちらから bit.ly/devday-std-2023
  18. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 駆け込み歓迎︕ Call for Proposal(セッション公募)に応募しよう AWS Dev Day 2023 Tokyoでは幅広く開発者の皆様から発表していただく 「Call for Proposal」をプログラムに取り⼊れています みなさまのご経験、知⾒、ノウハウをぜひこの場で共有していただけませんか︖ 締め切り︓ 2023 年 4 ⽉ 21 ⽇(⾦)23:59 bit.ly/devdaycfp2023 ―――― ―――― 4 ⽉ 24 ⽇(⽉) まで延⻑します!!
  19. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Thank you! © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. Please complete the session survey in the mobile app