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

3factor app って結局のところ何なの? - AWS Dev Day 2022

NemOps
November 10, 2022

3factor app って結局のところ何なの? - AWS Dev Day 2022

NemOps

November 10, 2022
Tweet

More Decks by NemOps

Other Decks in Technology

Transcript

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

    rights reserved. D E V D AY N O V 1 0 , 2 0 2 2
  2. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 3factor app って 結局のところ何なの︖ Hiroto Sakuraya F - 1 SaaS, Partner Solutions Architect Amazon Web Services Japan G.K.
  3. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 櫻⾕広⼈ (さくらや ひろと) SaaS, Partner Solutions Architect アマゾン ウェブ サービス ジャパン 合同会社 q 経歴 主にバックエンドエンジニアとして Web サービスや ネイティブアプリの開発を経験。 SIer → フリーランス → スタートアップ → AWS q 好きな領域 サーバーレス、マイクロサービスアーキテクチャ ⾃⼰紹介
  4. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ü 3factor app アーキテクチャの本質を理解する ü on AWS での実装ポイントを知る ü アーキテクティングのコツをつかむ このセッションのゴール
  5. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. • 3factor app のアーキテクチャ解説 • AWS における 3factor app の構築パターン • ユースケース、活⽤ポイント など このセッションで話すこと
  6. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. • 各サービスの基本的な説明 ex. AWS Lambda, Amazon EventBridge • 具体的な実装のコード、テンプレート • 実際の顧客における導⼊事例 など このセッションで話さないこと
  7. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. このセッションでは、⽐較的新しい 3factor app というデザインパター ンに対して可能な限りフラットな⽬線から、その利点および⽋点や、活 ⽤⽅法などについて検討することを⽬的としています。AWS がこのパ ターンの導⼊を強く推奨しているわけではありません。また、各システ ムの要件においてその捉え⽅も様々異なるため、今回ご紹介する⾒解は すべての要件に適⽤できる共通解ではないことをご留意ください。 Disclaimer
  8. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. What is 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/
  9. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 補⾜ Q. 発祥は︖ A. オープンソースの GraphQL エンジン、バックエンドサービスなどを展開する Hasura 社が提唱した概念 Q. Twelve-Factor App との関係は︖ A. 名前に関してインスピレーションを受けてはいるが、別物。Twelve-Factor App がモダンなクラウドでマイクロサービスベースのアプリケーションを構築する際 のベストプラクティス集であるのに対して、3factor app はアプリケーションの デザインパターン
  10. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. What is 3 factors? 1. リアルタイム GraphQL 2. 信頼性のある イベント 3. ⾮同期 サーバーレス
  11. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved. 従来の世界観 フロントエンド データベース モノリス アプリケーション REST API 同期呼び出し
  13. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. マイクロサービスでも基本的には同じ フロントエンド データベース REST API マイクロサービス マイクロサービス マイクロサービス 同期呼び出し
  14. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. API ゲートウェイを前段に置くことも フロントエンド REST API マイクロサービス マイクロサービス マイクロサービス 同期呼び出し API レイヤー データベース
  15. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor アーキテクチャ フロントエンド ステート管理 データベース マイクロサービス マイクロサービス マイクロサービス GraphQL API イベントシステム サーバーレス関数として実装 更新通知
  16. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor アーキテクチャ フロントエンド ステート管理 データベース マイクロサービス マイクロサービス マイクロサービス GraphQL API イベントシステム 更新通知 サーバーレス関数として実装
  17. © 2022, 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
  18. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 率直な第⼀印象 フロントエンド ステート管理 データベース マイクロサービス マイクロサービス マイクロサービス GraphQL API イベントシステム サーバーレス関数 1 2 3 4 6 1. ユーザーのインタラクション (ex. 注⽂) 2. ステートの更新 3. イベントの⽣成 / ルーティング / アーカイブ 4. ビジネスロジックの呼び出し (⾮同期) 5. ステートの更新 6. 最新のステートの取得 (サブスクリプション) 5 うわあめんどくさそう... REST でいいじゃん エラー処理どうすんねん 運⽤ェ... ※個人の意見です
  19. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor アーキテクチャのメリット スケーラビリティ 堅牢性 ユーザー体験 開発者体験 * 全体としてのメリットでもあり、個別の factor ごとのメリットでもある
  20. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 1. GraphQL
  21. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. What is GraphQL? オープンソースの API のクエリおよび操作⾔語 また、それを実⾏するためのランタイム
  22. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. mutation CreatePost { createPost(input: {…}) { id author date } } 3 つの基本的な操作 2. Mutations 3. Subscriptions query GetPost { getPost(id: ”1”) { id title author date } } subscription OnCreatePost { onCreatePost { id title author } } 1. Queries
  23. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. REST vs. GraphQL API REST API GraphQL API プロトコル HTTP HTTP パス リソースをベースに表現 ex. /users, /user/1 単⼀のエンドポイント /graphql パラメーター パス、クエリ⽂字列、HTTP ペイロード などで表現 GraphQL のクエリとして表現 (*application/json で Body に含める) HTTP メソッド 操作の種類に応じて GET, POST, PUT, DELETE などを使い分ける 全て POST (*GET が使われることもある) データの型付け 弱い 強い レスポンスの制御 サーバー側 クライアント側 リアルタイム処理 ポーリング、WebSocket などによる実装 Subscription による実装
  24. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. GraphQL は何がうれしいのか︖ type Restaurant { id: ID! name: String! address: String! state: String! zip: String! type: String! menu: [Menu]! } type Menu { name: String! price: String! glutenFree: String! } 強い型付け イントロスペクション query { __schema { types { name kind description fields { name } } } } 開発の⾼速化および フロントエンドの開発者体験の向上 より柔軟なデータ取得 スキーマ構造のアップデート サブスクリプションによる リアルタイムなデータの反映
  25. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS AppSync フルマネージドな GraphQL API エンドポイントの提供
  26. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 複数のデータソースに対応
  27. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 2. Event
  28. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Event [i-’vent] noun システムの状態が 変化したことを⽰す信号 What is Event?
  29. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. イベントの基本的な性質 • イベントは状態の変化に関する情報をサービス間で共有するための メカニズム • Immutable - イベントは過去に遡っての修正はできない • イベントには意味的な意図があり、過去形の動詞として表現可能 ex. “user_created”, “order_cancelled”, “item_deleted” • コンテキスト共通のプロパティによって、システムの相関を取っている ex. “user_id”, ”order_id”
  30. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. フードデリバリーサービスを例に考える 決済プロバイダー 配達員 レストラン ユーザー 商品完成 決済完了 アサイン 注⽂受付 注⽂ 商品 ピックアップ 配達完了 • ⾮同期に進⾏するワークフローをどう制御するか︖ • ユーザーに状況をリアルタイムに伝えるには︖ • 途中でエラーが起きた場合はどうする︖
  31. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 正常系以外のイベントの考慮 決済プロバイダー 配達員 レストラン ユーザー 商品完成 決済完了 アサイン 注⽂受付 注⽂ 商品 ピックアップ 配達完了 注⽂キャンセル 決済失敗 配達員不在 在庫切れ
  32. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. イベントを中⼼としたアーキテクチャ order_created 注⽂したよ︕ 決済サービス 注⽂作成イベントだ 決済しよう︕ イベントルーター order_created payment_completed 配達サービス payment_completed 決済完了イベントだ 配達員をアサインしよう︕ delivery_assigned レストラン サービス delivery_assigned order_ready 商品が準備できたよ︕ アサイン完了イベントだ 商品を準備しよう︕
  33. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. イベントは観測するものであり、命令ではない 配達員 レストラン ユーザー 配達して︕ 商品を準備して︕ 命令としての command 配達員 レストラン ユーザー あ、配達しておきますね あ、商品準備しますね 観測による event 注⽂完了︕
  34. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 命令としての command 観測による event 同期的コマンドにおける課題 100 ms 5,000 ms 5,100~ ms • レイテンシの増加 ダウンストリームの処理が 終わるまでブロックされる
  35. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 命令としての command 観測による event 同期的コマンドにおける課題 • レイテンシの増加 • 複数サービスが障害ポイントに ダウンストリームの 障害に影響を受ける
  36. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 命令としての command 観測による event 同期的コマンドにおける課題 • レイテンシの増加 • 複数サービスが障害ポイントに • 拡張性に乏しい Service C ダウンストリームのサービス追加、 仕様変更に伴いコードの変更が発⽣
  37. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 命令としての command 観測による event 同期的コマンドにおける課題 • レイテンシの増加 • 複数サービスが障害ポイントに • 拡張性に乏しい つまり、 サービス間が密結合であることが問題
  38. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 命令としての command 観測による event ⾮同期的イベントによる利点 • すぐにレスポンスが返る • リソース/コストの最適化 • サービスごとの可⽤性 • 簡単にサービスを追加できる つまり、 サービス間が疎結合になることによって、より良い ユーザー体験および開発者体験を実現できる
  39. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サービス間の疎結合を実現するイベントルーター サービス A プロデューサー イベント イベントルーター コンシューマー サービス B サービス C サービス D イベントシステムに イベントを送信する 受信したイベントをもとに 何らかの処理を⾏う ルールに基づいて受信したイベントを フィルタリングし、ターゲットに送信する 過去のイベントログを保持する イベントストアの役割を果たす場合も
  40. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS のイベント、メッセージングサービス イベントストア イベントルーター キュー ストリーム トピック イベントバス サーバーレス マネージド OSS Amazon SQS Amazon MQ Amazon SNS Amazon MQ Amazon Kinesis Amazon MSK Amazon EventBridge
  41. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 3. Serverless
  42. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスとは サーバーが存在しない 魔法のアーキテクチャ
  43. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスとは サーバーが存在しない 魔法のアーキテクチャ サーバーを意識しなくてよい クラウドを活⽤したアーキテクチャ
  44. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスを選択するビジネス価値 • サーバー管理不要 • アプリケーションの開発に集中
  45. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスを選択するビジネス価値 • サーバー管理不要 • アプリケーションの開発に集中 • 需要に応じて⾃動でスケール • ⾼いスループット
  46. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスを選択するビジネス価値 • サーバー管理不要 • アプリケーションの開発に集中 • 需要に応じて⾃動でスケール • ⾼いスループット • ⾼い可⽤性とセキュリティ • 容易なグローバル展開
  47. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. サーバーレスを選択するビジネス価値 • サーバー管理不要 • アプリケーションの開発に集中 • 需要に応じて⾃動でスケール • ⾼いスループット • ⾼い可⽤性とセキュリティ • 容易なグローバル展開 • 利⽤量に応じた課⾦ • 価値に対する⽀払い
  48. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 例︓AWS Lambda の実⾏モデル shard AWS Lambda サービス Amazon API Gateway Lambda 関数 Lambda 関数 Amazon DynamoDB Amazon Kinesis Amazon SNS Amazon S3 同期 (push) ⾮同期 (event) ストリーム (poll-based) Lambda 関数
  49. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 3factor app on AWS
  50. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 3factor app の構築に最低限必要なもの フロントエンド ステート管理 データベース マイクロサービス マイクロサービス マイクロサービス GraphQL API イベントシステム サーバーレス関数 o GraphQL API サーバー o ステート管理⽤のデータベース o データベースの変更をキャプチャして イベントに変換するための"何か" o ダウンストリームのサービスにイベントを ルーティングするためのルールエンジン o ビジネスロジックを実⾏するサーバーレス関数
  51. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 各コンポーネントに求められる要件や性質 • GraphQL API サーバー Ø 多様なデータソースへの接続をサポート Ø subscription の機能が実装されている • イベントルーター/イベントストア Ø 信頼性 Ø 耐久性 • サーバーレス関数 Ø スケーラビリティ Ø イベントソースとのシームレスな接続 AWS AppSync AWS Lambda Amazon EventBridge Amazon SQS Amazon SNS Amazon Kinesis AWS Fargate
  52. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装する フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト
  53. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装する フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 2 Amazon DynamoDB
  54. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装する フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 3. DynamoDB Streams で変更をキャプチャして Lambda に送信 2 Amazon DynamoDB DynamoDB Streams AWS Lambda 3
  55. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装する フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 3. DynamoDB Streams で変更をキャプチャして Lambda に送信 4. データの変更をイベントとして EventBridge に送信 2 Amazon DynamoDB DynamoDB Streams AWS Lambda 3 Amazon EventBridge 4
  56. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS で 3factor app を実装する フロントエンド AWS AppSync 1 1. AppSync のエンドポイントに mutation をリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 3. DynamoDB Streams で変更をキャプチャして Lambda に送信 4. データの変更をイベントとして EventBridge に送信 5. ルールに応じて各 Lambda 関数にイベントをルーティング 2 Amazon DynamoDB DynamoDB Streams AWS Lambda 3 Amazon EventBridge 4 サービス A サービス B サービス C Lambda 関数 5
  57. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

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

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

    rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 3factor app は銀の弾丸か︖
  61. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved. GraphQL × Event × Serverless スケーラビリティ 堅牢性 ユーザー体験 開発者体験 factor ごとにそれぞれ得られる利点は多く、組み合わせた時の相性も良いが...
  63. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 技術および体制⾯での課題も • イベントの順序性の保証 • 重複排除、冪等なビジネスロジック • 結果整合性の許容 • E2E でのオブザーバビリティ、エラーハンドリング • 新しい技術の学習コスト ex. 脱 RESTful、⾮同期処理/イベント駆動の考え⽅、マネージドサービスの利⽤⽅法 • アプリケーションのマイクロサービス化 etc.
  64. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Ø イベントの順序性が重要な場合 EventBridge では元のイベントとは異なる順番でターゲットにイベントが 配信される場合がある(順序保証がない) • SNS FIFO トピック、SQS FIFO キューを利⽤する • ドメイン内は Step Functions によるオーケストレーション、ドメイン間は EventBridge によるコレオグラフィーパターンを採⽤して制御する
  65. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved. Ø エラーに対する回復性 フロントエンド AWS AppSync Amazon DynamoDB AWS Lambda Amazon EventBridge DynamoDB Streams Lambda の呼び出しまたは関数内の処理で エラーが発⽣した場合、設定に応じてリトライ 最⼤ 24 時間保存 SQS キュー 最⼤回数のリトライを超えたメッセージは デッドレターキューに退避 補償処理 アーカイブされたイベントのリプレイに よって任意の時点のステートを復元 エラーの内容を subscription で通知 クライアント側からのリトライ
  67. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

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

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

    rights reserved. フロントエンド Amazon API Gateway 1 1. REST API のエンドポイントにリクエスト 2. DynamoDB リゾルバーによってテーブル内のデータを更新 3. DynamoDB Streams で変更をキャプチャして Lambda に送信 4. データの変更をイベントとして EventBridge に送信 5. ルールに応じて各 Lambda 関数にイベントをルーティング 6. イベントの処理結果に応じて APIGW 経由でステートを更新 7. ステートの更新を ポーリング によって取得する 2 Amazon DynamoDB DynamoDB Streams AWS Lambda 3 Amazon EventBridge 4 サービス A サービス B サービス C Lambda 関数 5 6 7
  71. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved. ソフトウェアはどのように⽣み出されるのか︖ 営業戦略 市場分析 マネタイズ 顧客のニーズ イノベーション ソフトウェア そもそも
  73. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. ソフトウェアはどのように⽣み出されるのか︖ 営業戦略 市場分析 マネタイズ 顧客のニーズ イノベーション ソフトウェア What to Build How to Build
  74. © 2022, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved. アーキテクティングの⼼構え • ⽬的としてソフトウェアを作るのではない • ビジネス価値を実現するための⼿段としてソフトウェアを作る • 万能なアーキテクチャパターンは存在しない • 要件を満たす最適な⽅法が何かを模索することがアーキテクティング • 技術的課題の解決のためにビジネス要件を調整しない • ビジネス要件が変わればアーキテクチャも変わる
  76. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  77. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Please complete the session survey © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.