Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
既存のweb向け課金システムをそのままに、サーガパターンでのアプリ内課金システム構築
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
okatatuki
June 28, 2023
Technology
0
150
既存のweb向け課金システムをそのままに、サーガパターンでのアプリ内課金システム構築
AWS Dev Day 2023 Tokyo
E-4-2
https://aws.amazon.com/jp/events/devday/japan/
okatatuki
June 28, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
今日から始めるAmazon Bedrock AgentCore
har1101
4
420
プロポーザルに込める段取り八分
shoheimitani
1
680
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.5k
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
270
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
250
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
OpenShiftでllm-dを動かそう!
jpishikawa
0
140
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
Context Engineeringの取り組み
nutslove
0
380
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
130
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
750
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
My Coaching Mixtape
mlcsv
0
52
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Unsuck your backbone
ammeep
671
58k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
4 Signs Your Business is Dying
shpigford
187
22k
Transcript
既存のWeb向け課⾦システムをそのままに、 サーガパターンでのアプリ内課⾦システム構築 朝⽇新聞社 朝デジ事業センター カスタマーエクスペリエンス部 アーキテクト 岡本 樹
⾃⼰紹介 Copyright © The Asahi Shimbun Company. All rights reserved.
2 Okamoto Tatsuki 岡本 樹 2018年に朝⽇新聞社に新卒⼊社 以来、朝⽇新聞デジタルの開発にアプリケーション エンジニア・アーキテクトとして従事 好きなサービス︓Amazon Kinesis Data Streams 関⼼事︓ソフトウェアアーキテクチャ オブザーバビリティ
我々の主たるサービス︓朝⽇新聞デジタル Web App(Android/iOS) •朝⽇新聞社が提供するニュースサービス •Webサイトとモバイルアプリの両⽅を提供 •アプリはAndroid/iOSに対応 3 Copyright © The
Asahi Shimbun Company. All rights reserved.
我々の主たるサービス︓朝⽇新聞デジタル 4 Copyright © The Asahi Shimbun Company. All rights
reserved. •2023年3月9日にAndroid/iOSでアプリ内課金を実装 こちらのアプリ
アジェンダ 5 Copyright © The Asahi Shimbun Company. All rights
reserved. • アプリ内課⾦を実装するにあたっての課題 1.異なるデータソースで整合性を担保 • サーガパターンによる分散トランザクション 2.サーバ間通知ペイロードの保存 • サーバ間通知のデータロスト対策 3.仕様の異なるサーバ間通知 • 仕様の異なるサーバ間通知のリクエスト検証 • まとめ
なぜアプリ内課⾦をやるのか︖ 6 Copyright © The Asahi Shimbun Company. All rights
reserved. 従来Web側にしか導線がない状況
朝⽇新聞デジタルでの実現 7 Copyright © The Asahi Shimbun Company. All rights
reserved. Web購読導線の課題 •課⾦完了までの画⾯数が多く途中離脱率が⾼い •課⾦システムの修正が難しく、画⾯を減らすこと⾃体困難 アプリ内課⾦で実現したいこと •既存の課⾦システムに⼿を⼊れずに、モバイルアプリからの 購読操作を可能にしたい
なぜアプリ内課⾦をやるのか︖ 8 Copyright © The Asahi Shimbun Company. All rights
reserved. 変更コスト︓⼤
話すこと/話さないこと 9 •話すこと✅ •アプリ内課⾦を実現したアーキテクチャの紹介 •話さないこと❌ •詳細な実装について Copyright © The Asahi
Shimbun Company. All rights reserved.
課題の背景 10 Copyright © The Asahi Shimbun Company. All rights
reserved. •課⾦システムの制約 •変更コストが⾼く新規テーブル・データベースの追加が不可能 •朝⽇IDという独⾃のIDでしかユーザを表現不可能 そのためモバイルアプリ⽤ファサードで、App Store/Google Play のIDを朝⽇IDの仕様に合わせたり、購読の状態を永続化したい 課⾦システムとファサード間という異なるデータソースで整合性を 担保したい
課題の背景 11 Copyright © The Asahi Shimbun Company. All rights
reserved. •課⾦システムの制約 •変更コストが⾼く新規テーブル・データベースの追加が不可能 アプリ内課⾦の全ての購読操作はサーバ間通知で送信されるので、 その蓄積がしたいが、課⾦システム側での蓄積が難しい そのためモバイルアプリ⽤ファサードで、サーバ間通知ペイロード は確実に保存したい
課題の背景 12 Copyright © The Asahi Shimbun Company. All rights
reserved. •スコープと期限 •ビジネス上、3⽉リリースは厳守する必要 •ビジネス上、Android/iOSでの同時リリースをする必要 期限とスコープに余裕がない App Store/Google Playの仕様の異なるサーバ間通知について処 理を簡略化したい
アプリ内課⾦を実現するにあたっての課題 13 Copyright © The Asahi Shimbun Company. All rights
reserved. 異なるデータソース で整合性を担保 したい サーバ間通知 ペイロードを確実に 保存したい 仕様の異なる サーバ間通知
異なるデータソースで整合性を担保したい 14 Copyright © The Asahi Shimbun Company. All rights
reserved. •課題の背景 課⾦システムの変更コストが⾼く新規テーブル・データベースの追 加が不可能 •やりたいこと 課⾦システムでの購読の開始・更新・解除といった操作のため、 App Store/Google Play上で表現されるIDを朝⽇IDとして 取り扱いたい 朝デジ内で朝⽇ID以外 の認証・認可の仕組み がない
異なるデータソースで整合性を担保したい 15 Copyright © The Asahi Shimbun Company. All rights
reserved. そのためApp Store/Google Playと課⾦システムの間のシステムで、 ID仕様を課⾦システムに合わせる必要がある
どのように整合性を担保するか 16 Copyright © The Asahi Shimbun Company. All rights
reserved. モバイルアプリ⽤ファサードのデータベースと課⾦システムの間で、 各プラットフォームのIDを朝⽇IDの仕様に合わせて、購読状態をア トミックに永続化したい サーガパターンによる分散トランザクションを試みる
サーガパターンによる分散トランザクション サーガパターン1 ローカルトランザクションの順次処理で、1つでも処理が失敗した 場合は⼀連の処理に対して補償トランザクションを実⾏してサーガ 中の変更を以前の状態に戻す 17 [1] Neal Ford, Mark
Richards, Pramod Sadalage, Zhamak Dehghani 著, 島⽥浩⼆ 訳, ソフトウェアアーキテクチャ・ハードパーツ,オライリージャパン, 2022 Copyright © The Asahi Shimbun Company. All rights reserved.
18 Copyright © The Asahi Shimbun Company. All rights reserved.
補償トランザクション 成功後、 最初の購読開始処理は ロールバックされる
サーガパターンによる分散トランザクション 19 Copyright © The Asahi Shimbun Company. All rights
reserved. 正常系 1.リクエストを受け取ったら 2.App Store/Google Playに検証リクエストを送って 3.成功したら朝⽇IDプラットフォームに購読操作リクエストして 4.成功したらその結果を元に購読情報を保存して 5.基づくレスポンスをユーザ/サーバ間通知に返却する OK😁
サーガパターンによる分散トランザクション 20 Copyright © The Asahi Shimbun Company. All rights
reserved. 異常系 1.リクエストを受け取ったら 2.App Store/Google Playに検証リクエストを送って 3.成功したら朝⽇IDプラットフォームに購読操作リクエストして 4.成功したらその結果を元に購読情報を保存して 5.基づくレスポンスをユーザ/サーバ間通知に返却する データソースごとにロールバックしたい😢 ここでエラーすると課⾦システムとモバイル アプリ側ファサードで整合性がない状態に
サーガパターンによる分散トランザクション 21 Copyright © The Asahi Shimbun Company. All rights
reserved. 分散トランザクション の実施
サーガパターンによる分散トランザクション 22 Copyright © The Asahi Shimbun Company. All rights
reserved. 同期的に呼び出し オーケストレータ ① ② ③
サーガパターンによる分散トランザクション 23 Copyright © The Asahi Shimbun Company. All rights
reserved. 課⾦システムが停⽌して も、ワークフロー 全体 が停⽌してしまう 課⾦システムが停⽌しても、 ファサードのDBが 停⽌し てもワークフロー 全体が 停⽌してしまう
サーガパターンによる分散トランザクション 24 Copyright © The Asahi Shimbun Company. All rights
reserved. •モノリシックなシステムを模倣したトランザクション調整が可能 •全てのコンポーネントについてアトミック性を考慮するので、 全て成功するか、全てロールバックされるかとなり、可⽤性が 低くなる
アプリ内課⾦を実現するにあたっての課題 25 Copyright © The Asahi Shimbun Company. All rights
reserved. 異なるデータソース で整合性を担保 したい サーバ間通知 ペイロードを確実に 保存したい 仕様の異なる サーバ間通知
サーバ間通知ペイロードを確実に保存したい 26 Copyright © The Asahi Shimbun Company. All rights
reserved. • 課題の背景 課⾦システムの制約でユーザ問い合わせ対応に必要な情報も、モバイルアプリ⽤ ファサードで担保しなければならない • やりたいこと 全ての購読イベントはサーバ間通知で送られる その上解約や返⾦といったイベントは各プラットフォームからのみ送られるので、 問い合わせに対応できるようデータ⽋落を考慮する必要がある そのためサーバ間通知は重要なリクエストで、確実に保存する必要がある
サーバ間通知のデータロスト対策 27 Copyright © The Asahi Shimbun Company. All rights
reserved. •同期的にAmazon S3に保存したくない •保存失敗を理由にエラーさせるのは機会損失になりかねない •サーバ間通知の受信後、Amazon SQSにキューイング •SQSからは⾮同期にログ保存を⾏い、リトライやDLQを処理から 分離する
サーバ間通知のデータロスト対策 28 Copyright © The Asahi Shimbun Company. All rights
reserved.
29 Copyright © The Asahi Shimbun Company. All rights reserved.
AWS LambdaからペイロードをSQSに キューイング
30 Copyright © The Asahi Shimbun Company. All rights reserved.
SQSから⾮同期にS3にペイロードを保存 エラーしたイベントはDLQへ
31 Copyright © The Asahi Shimbun Company. All rights reserved.
SQSのイベントサイズが256KBなので ペイロードの仕様変更に注意が必要
アプリ内課⾦を実現するにあたっての課題 32 Copyright © The Asahi Shimbun Company. All rights
reserved. 異なるデータソース で整合性を担保 したい ペイロードを確実に 保存したい 仕様の異なる サーバ間通知
仕様の異なるサーバ間通知 33 Copyright © The Asahi Shimbun Company. All rights
reserved. •課題の背景 App Store/Google Playから送られる仕様の異なる署名リクエスト の検証をしなければならない •やりたいこと サーバ間通知の処理をできるだけ簡略化したい リクエスト元が正しく App Store/Google Playか検証
仕様の異なるサーバ間通知 34 Copyright © The Asahi Shimbun Company. All rights
reserved. Google Playはヘッダに署名検証⽤JWTがあるため検証処理が⾏いや すい⼀⽅、 App Storeは独⾃の仕組み 署名検証処理の実装に時間をかけたくない App Store/Google Playの仕様変更に逐次対応する必要があるので 保守性も担保したい
仕様の異なるサーバ間通知のリクエスト検証 35 Copyright © The Asahi Shimbun Company. All rights
reserved. 腐敗防⽌層をプラットフォームの数だけ分離 •App Store側 •独⾃の仕組みなので頑張ってLambdaに検証処理を実装しました💪 •Google Play側 •Amazon API Gatewayを採⽤ •HTTP APIを選択することで、署名検証をAPI Gatewayで実施、 実装コストの削減に成功した
仕様の異なるサーバ間通知のリクエスト検証 36 Copyright © The Asahi Shimbun Company. All rights
reserved. API Gatewayで 署名検証
まとめ︓アプリ内課⾦を実装するにあたっての課題 37 Copyright © The Asahi Shimbun Company. All rights
reserved. 異なるデータソース で整合性を担保 したい サーバ間通知 ペイロードを確実に 保存したい 仕様の異なる サーバ間通知 サーガパターンによる 分散トランザクション SQS + Lambda + S3で 非同期に保存 API Gatewayでの 署名検証
まとめ① 38 Copyright © The Asahi Shimbun Company. All rights
reserved. •課題 •異なるデータソースで整合性を担保したい •解決策 •サーガパターンによる分散トランザクション •同期的にかつアトミックにデータ永続化を⾏うパターンでの 実装を⾏うことで課⾦システムとモバイルアプリ⽤ファサー ド間で整合性が担保できた
まとめ② 39 Copyright © The Asahi Shimbun Company. All rights
reserved. •課題 •サーバ間通知ペイロードを確実に保存したい •解決策 •SQS + Lambda + S3の構成で⾮同期にペイロードを保存 できる
まとめ③ 40 Copyright © The Asahi Shimbun Company. All rights
reserved. •課題 •仕様の異なるサーバ間通知のリクエスト検証 •解決策 •プラットフォームごとに通知を受信する腐敗防止層を分離 することで、関心の分離を徹底できた •また、API Gatewayで署名検証を実施することで実装コストを削 減できた
We are hiring 41 Copyright © The Asahi Shimbun Company.
All rights reserved. 朝日新聞デジタルは 「みえるを広げる。みらいを照らす。」 をミッションに、 世の中の出来事を伝えるだけではなく「多様性」、 その⽣き⽅や考え⽅の“違い”を⼤切にして、 多くの⼈へ伝えていきます。 一緒に最高のメディアを作りませんか? 採用情報:https://www.asahishimbun-saiyou.com/techmedia/ 採⽤情報QRコード