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