大規模プッシュ通知基盤について、「Pusna-RS」の実装事例を基にアーキテクチャや運用を解説する連載。今回は、アプリ単位でテーブル分割を行い「スループットの奪い合い」を防ぐ方法、「全件走査用テーブル」を用意して処理を効率化する方法、Amazon SQSやAWS CloudWatchと連携して「スループット超過エラー」を防ぐ方法、「並列スキャン」で読み取り速度を向上させる方法などを紹介します。
リクルートテクノロジーズ APソリューショングループの相野谷です。前回の「プッシュ通知の基礎知識&秒間1万を超えるプッシュ通知基盤のアーキテクチャと仕組みとは」では、Pusna-RS全体のアーキテクチャ構成について解説しました。今回からは、システム構成の各要素を複数回にわたり、ピックアップして解説していきます。
まずこの記事では、Pusna-RSのデータ永続化層を支える「Amazon DynamoDB」(以下、DynamoDB)周りの構成について、ユースケースを交えながら紹介いたします。
Pusna-RSでは永続化層のマスターDBとしてDynamoDBを利用しています。DynamoDBは、AWSが提供するフルマネージドNoSQLデータベースです。RDBや他のNoSQLに比べ、次のような特徴があります。
※参考:AWS Black Belt Techシリーズ Amazon DynamoDB
上記の特徴に加え、Pusna-RSでは複雑なデータ構造が不要であったこと、スマートデバイスからの急激な負荷に耐え得る高速な読み書き性能と高いスケーラビリティが必要であったことが、DynamoDBを採用した理由です。
DynamoDBの採用により、アプリケーション層だけではなく永続化層にも高いスケーラビリティを実現できました。次項からは、Pusna-RSにおけるDynamoDBの活用方法の実際について4つ紹介していきます。
本システムでは、プッシュ通知の対象となるスマートデバイスの情報をDynamoDBのテーブルに格納しています。本システムは複数のクライアントアプリから利用されるため、デバイス情報のテーブルはどのデバイスがどのクライアントアプリから登録されたものか識別できるように管理する必要があります。
このデバイス情報とクライアントアプリのひも付け管理は、テーブル内のカラム情報で管理せず、クライアントアプリごとにテーブルを分けることで行っています。クライアントアプリ別にテーブルを分けることで、異なるクライアントアプリからのデバイステーブル参照リクエストが同じテーブルに集中することがなくなり、負荷が集中したときに設定した「スループットの奪い合い」が起こるのを防ぐことができます。
Copyright © ITmedia, Inc. All Rights Reserved.