Slide 1

Slide 1 text

© 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

Slide 2

Slide 2 text

© 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.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

© 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/

Slide 9

Slide 9 text

© 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 はアプリケーションの デザインパターン

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

© 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

Slide 18

Slide 18 text

© 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 でいいじゃん エラー処理どうすんねん 運⽤ェ... ※個人の意見です

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

© 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

Slide 23

Slide 23 text

© 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 による実装

Slide 24

Slide 24 text

© 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 } } } } 開発の⾼速化および フロントエンドの開発者体験の向上 より柔軟なデータ取得 スキーマ構造のアップデート サブスクリプションによる リアルタイムなデータの反映

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

© 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 商品が準備できたよ︕ アサイン完了イベントだ 商品を準備しよう︕

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

© 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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

© 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 関数

Slide 49

Slide 49 text

© 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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

© 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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

© 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

Slide 54

Slide 54 text

© 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

Slide 55

Slide 55 text

© 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

Slide 56

Slide 56 text

© 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

Slide 57

Slide 57 text

© 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

Slide 58

Slide 58 text

© 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

Slide 59

Slide 59 text

© 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 の場合

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

© 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 で通知 クライアント側からのリトライ

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

© 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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

© 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.