AmazonはSimple Notification Service (SNS)と呼ばれるサービスをローンチした。このサービスはクラウドからメッセージを準備し送信するサービスで、監視アプリケーションやワークフローシステム、モバイルアプリケーション、その他の通知機能を主眼をするアプリケーションでの利用を想定している。
AmazonにはSimple Queue Service (SQS)という別の通知サービスがある。これは、ポーリングを用いてメッセージングを実現している。SQSは、分散アプリケーション同士がメッセージをキューに追加し、クライアントが受信することで相互に通信をする、というような用途で利用されている。クライアントは定期的にキューに対してポーリングし、関心のあるメッセージを検索する。この方法を用いることでメッセージの送信者と受信者の結合度を弱められる。
SQSとは違って、SNSはメッセージ通知にプッシュ型の手法を取っている。アプリケーションまたはGUIツールを使う管理者はトピックやアクセスポイントを生成する。両者ともサブジェクトやイベントタイプをもとに一意に識別される。トピックの所有者はこのトピックを誰が発行/購読できるかを決定する。また、通信にどのプロトコル(HTTP、HTTPS、メール、メール-JSON、SQSキュー)を利用するかを決定する。メッセージを受信したいクライアントはアクセスポイントを購読し、メッセージを受信するためのURLかメールアドレスを提供する。アプリケーションがメッセージを送信したい場合は、アクセスポイントにメッセージを送ればSNSがその後の配信処理を実施してくれる。
メールを使って送信したメッセージに含まれているのはメールのメッセージボディだけで、送信されたメッセージを読もうと考えている人に対して配信される。他のプロトコルはすべてJSON形式だが、これは自動的に処理できるようにするためで下記の情報を含んでいる。
- メッセージID: 全世界で一意になる識別子。発行されたメッセージ通知を識別する。
- タイムスタンプ: メッセージ通知が発行された時間(GMT)。
- トピック: 発行されたメッセージのトピック。
- タイプ: メッセージ配信のタイプ。メッセージ通知の場合は“Notification”に設定される。
- 購読取り消しURL: 対象のトピックを購読しないエンドポイントに対するリンク。今後このエンドポイントは通知を受信しない。
- メッセージ: 発行者からのメッセージのペイロード(ボディ)。
- サブジェクト: サブジェクトフィールド– メッセージとともにメッセージ発行APIへ渡されるオプションのパラメータ。
- 署名: Base64エンコードの“SHA1withRSA”署名。メッセージ、メッセージID、サブジェクト(存在するなら)、タイプ、タイムスタンプ、そしてトピックに対して署名する。
- 署名バージョン: 利用しているAmazon SNS署名のバージョン。
メッセージが配信できなかった場合、SNSはそのメッセージを保存しておき、クライアントが受信するまで送信を試行する。メッセージは複数のシステムとデータセンターにまたがって冗長に保存される。その他の考慮するべき技術的な点は、
- SNSはメッセージの購読者が100%メッセージを受信できることは保証しない。これは“これはインターネットが潜在的に抱えている課題やメール配信の制約”が原因だ。Amazonはメッセージ配信が致命的に重要な場合はSQSキューを利用することを推奨している。
- SNSは分散環境で動作しているので購読者はメッセージを複数回受信できる。
- SNSはメッセージが発行されたのと同じ順番で受信されることを保証しない。
- 一度発行されたメッセージは削除できない。
- Amazonは独自のAPIを作成することを選び、Advanced Message Queuing Protocol (AMQP)やOASIS WS Notification (WSN)のようなオープンなプロトコルを選択しなかった。したがって、この通知システムはAWSにロックされたものになる。
現時点ではメッセージの大きさは最大8KBで、HTTPで100,000回のメッセージ通知を行うのに0.06ドル、メールの場合は100,000回で2ドルかかる。一ヶ月間の始めのHTTPでの100,000回の通知とメールでの1,000回の通知は無料。 SQSメッセージの場合はチャージされない。これらの料金に加えてデータ転送に関連するコストがかかる。