SQS vs SNS vs Kinesis

SQS

kw:SQSキュー
  サブスクリプション
  DLQ(デッドレターキュー)
  FIFOキュー
  遅延機能
  可視性タイムアウト

source:プロデューサー
destination:コンシューマー

・コンシューマーがデータをプル
・データは処理された後に削除される
・コンシューマーをいくつでも設定できる
・スループットのプロビジョニング
・順番保証なし(FIFOを除く)
・個別メッセージ遅延機能
自動でスケーリングする

SNS

kw:SNSトピック
  Pub / Sub モデル
  ファンアウト
  Eメール通知



source:パブリッシャー
destination:サブスクライバー

・多数のサブスクライバーにデータをプッシュ
・最大100Kトピック
・最大10Mサブスクライバー
・データが永続化されない(配信失敗すると消える)
・スループットのプロビジョニングが不要

用途:SQSとの統合によるファンアウト(複数のSQSキューに同じ/違うメッセージを送れる)

Kinesis

kw:Kinesisデータストリーム
  シャード
  ユーザIDをパーティションキーに
  リアルタイム分析
  ニアリアルタイム Streams+Firehose


source:プロデューサー
destination:コンシューマー

・コンシューマーがデータをプル
・コンシューマーをいくつでも設定できる
・シャードレベルでの順番保証
シャード追加で送受信量が増加
ユーザIDをパーティションキーに設定するとシャードをstickyにできる
・データはX日後に失効
・スループットの設定・課金が必要

用途:リアルタイムのビッグデータ、アナリティクス、ETL


SQS(Simple Queue Service)

標準キュー
 アプリケーションのデカップリング(分離)に使用
 プロデューサー →→ SQSキュー →→ コンシューマー(EC2、サーバ、Lambda)
      (SendMessageAPI)  (ポーリング、DeleteMessageAPI)
 保存期間 デフォ:4日間 最大:14日間
 メッセージサイズ 最大:256KB

キューアクセスポリシー(リソースに直接ポリシーを書く=S3バケットポリシーにクリソツ)
 クロスアカウントアクセス 別アカウントからのポーリングを許可
 S3イベント通知の発行 SQSキューへSendMessage

メッセージ可視性タイムアウト VisibilityTimeout
 デフォ30秒
 コンシューマーはChangeMessageVisibilityTimeoutAPIの呼び出しが可能

デッドレターキュー(DLQ:Dead Letter Queue)
 コンシューマーが可視性タイムアウト内にメッセージの処理に失敗した場合にキューに戻る回数を閾値で設定
 最大受信数の閾値を超えると、メッセージはDLQ(Dead Letter Queue)に入る 障害調査に便利
 DLQに移っても、メッセージの保存期間は最大14日間で変わらない

リクエスト・レスポンス システム
 返信先に応答キューを指定しておくことで、プロデューサーは自分宛のレスポンスを判別できるようになる
 SQS Temporary Queue Client(Java版)仮想キューの活用 参考:Amazon SQS一時キュー

遅延キュー
 デフォ0秒 最大15分
 送信時のDelaySecondsパラメータ

FIFOキュー
 First In First Out(キュー内のメッセージの順番を保つ)を保証する
 スループット上限:バッチなし 300msg/s バッチあり 3,000msg/s
 重複排除を保証できる
 キュー名のsuffixは必ず .fifo

SQS+ASGオートスケーリンググループ 参考:Amazon SQS に基づくスケーリング
 CloudWatch Custom Metric → CloudWatchアラーム → ASGが動く
  SQSメッセージ数 / EC2インスタンス数からカスタムメトリック → アラームを作成
 リクエスト → フロントエンドASG → SQSキュー →→ バックエンドASG → S3バケット


SNS(Simple Notification Service)

Pub / Sub モデル(Publish / Subscribe)

SNSトピック

トピックパブリッシュ(SDK)
ダイレクトパブリッシュ()

SNSアクセスポリシー(SQSアクセスポリシー、S3バケットポリシーと同様)

SNS+SQS:ファンアウト
 プロデューサーから複数のコンシューマーに通知が必要な場合は、SNSを使う
                 サブスクライバー
 パブリッシャー → SNSトピック → SQSキュー → コンシューマー
 兼プロデューサー        → SQSキュー → コンシューマー

FIFOトピック(SQS FIFOキューと連携)
 サブスクライバーになれるのは、SQS FIFOキューだけ

メッセージフィルタリング
 メッセージを属性(attribute)で絞り込むポリシーをサブスクリプション毎にJSONで記述・設定


プロトコル:EMAILでサブスクリプションを作成した時の例


Kinesis

リアルタイムに!ストリーミングデータの収集!処理!分析!
プロデューサー → Kinesis → コンシューマー

Kinesis Data Streams シャードで手動スケーリング
Kinesis Data Firehose AWS、3rdパーティ、HTTPSアプリへ保存 オートスケーリング
Kinesis Data Analytics SQL リアルタイム・アナリティクス オートスケーリング
Kinesis Video Streams


Amazon MQ

マネージドApache ActiveMQ

オンプレでMQTTやMQPなどのスタンダードプロトコルを使用しているアプリケーションを、オンプレミスからクラウドへ再構築せずに移行する

ACTIVE AZ  MQ Broker
             EFSストレージ(複数のAZにアタッチ可能)でフェイルオーバー
STANDBY AZ MQ Broker