モバイルプッシュ用トークン保存のAWSパターンを考えてみる #アドカレ2015

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、ひめのです。 AWSモバイルアドベントカレンダー2015 18日目です。

私からは、プッシュ用トークンを保存する際のAWS側の構成について紹介します。

プッシュ用トークンとは

あらためて説明する必要もないかとは思いますが、モバイルアプリにプッシュ通知を行う場合には モバイルアプリを特定するためのトークンが必要になります。

iOSであれば、APNsから取得する、デバイストークン
Androidであれば、GCMのプッシュトークンになります。 以下トークンと呼びます

このトークンは、常に同じ値になることが保証されているわけではないため アプリの起動時などに常に最新のトークンを取得し続けることが必要です。

たくさんのユーザを抱えているアプリの場合、起動時に必ずトークンを保存することが必要となり 負荷がかかることが想定されます。

そんなトークンの登録についてパターンを考えてみます。

Amazon DynamoDB を利用する

EC2_Dynamo

みなさんご存知の通り、Amazon DynamoDBは高速、安定したパフォーマンス、高いスケーラビリティを備えた完全マネージド型のクラウド NoSQL データベースサービスです。

これを利用することで、負荷に耐えられる設計とする方法です。 ただし、DynamoDBの書き込みスループットは金額により異なりますし
その前にあるEC2も相当数準備することになります。

SQSを利用する

EC2_SQS_EC2_Dynamo_1

次に、DynamoDBの書き込みスループットを押さえて対応する方法です。 プッシュ用トークンは即時反映など必ずしも必要であるものではないので 一度SQSをかませることで、DynamoDBへの書き込みを一定にする方法です。

AWS Mobile SDKを利用する

App_Dynamo

最後はモバイルから直接DynamoDBへ書き込みを行う方法です。
上記に上げたようなDynamoDBのフロントがボトルネックになることを防ぐことが出来ます。

ただし、iOS、Androidそれぞれ実装が必要になるため、各アプリ側で責任をもつ必要があります。

まとめ

他にもkinesis firehoseを利用するなど、方法はいろいろあるとは思いますが、クラスメソッドで直近検討をしていた方法を記載してみました。
もちろんどれが正しいということはありませんので、誰かの(社内で残しておきたかったのでw)参考になれば幸いです。