Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

既存のWeb向け課金システムをそのままに、Sagaパターンでのアプリ内課金システム構築 #175

Open
2 tasks done
okatatuki opened this issue Apr 24, 2023 · 0 comments
Assignees
Labels

Comments

@okatatuki
Copy link

セッションタイトル (必須)

  • セッションのタイトルをイシュー件名に最大40文字程度で入力しました

連絡先の登録 (必須)

セッションのアブストラクト (最大250文字) (必須)

朝日新聞デジタルのアプリにアプリ内課金の仕組みを実装しました。
要件定義含め6ヶ月の期間で実現するべく、既存のWeb向け課金システムの仕組みに手を入れずに、アプリ向けファサードへの修正のみでアプリ内課金の仕組みを実装しました。
本来ならモノリシックな課金システムのデータベースに格納されるはずのデータをファサード内に抱えたことで、課金システムとファサードで分散トランザクションを行う必要に迫られ、それをSagaパターンを使って実装しました。
また、Apple/Googleで仕様の異なるリクエスト検証処理を、ドメインを司るサービスの中で処理しないために、リクエストを受け取った際に別々に処理するようにしました。

セッションについての補足情報 (最大800文字) (任意)

朝日新聞デジタルとは朝日新聞社が運営しているニュースサービスです。(https://www.asahi.com)
このサービスには2014年から提供しているアプリ版があります。(https://digital.asahi.com/pr/app/)

短期間でアプリ内課金の仕組みを実現するべく大別して2つの技術的挑戦を行いました。

  1. Sagaパターンを用いた分散トランザクション
  2. 腐敗防止層を分けることでのリクエスト検証処理の簡易化

既存のWeb向け課金システムに手を入れていると市場投入期間が長くなってしまうため、ファサード側でどのようにApple/Googleの購読状態と課金システムでの決済状態を紐づけるかを実践しました。アプリ内課金の仕組みではユーザーリクエストによる同期的な購読処理と、サーバー間通知によってApple/Googleから送られる非同期的な購読処理を冪等に処理する必要があります。さらにその処理は課金システムとファサードの間で一貫性が必要です。
今回のセッションでは同期/非同期の処理をどのように一貫性を担保して実装したかをお話しいたします。

下記のAWSサービスを利用したアーキテクチャをお話しします。

  • API Gateway
  • ECS
  • Aurora(MySQL)
  • Lambda
  • SQS
  • SNS

セッション時間

20分

想定受講者の知識レベル(必須)

中級 - セッションの中心となるトピックを触ったことがある、現在勉強中である方向け

想定受講者の開発対象やロール・役割 (複数選択可) (必須)

Web バックエンド / サーバーサイド開発

想定受講者の業種・業界・業態 (複数選択可) (任意)

エンタープライズ

セッションのトピック (複数選択可) (必須)

Web バックエンド / サーバーサイド開発, アプリケーションアーキテクチャー

セッションの技術カテゴリー (複数選択可) (必須)

コンテナ

セッション内で登場する主な AWS サービス (任意)

API Gateway, ECS, Aurora(MySQL) , Lambda, SQS, SNS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants