20111215 12 aws-meister-sqs_sns_sdb-public

66
AWSマイスターシリーズ ~SQS, SNS, SimpleDB~ 2011年12月15日 大谷 晋平 (@shot6 ) ソリューションアーキテクト

Upload: amazon-web-services-japan

Post on 10-Jun-2015

4.666 views

Category:

Technology


0 download

DESCRIPTION

ほぼ週間AWSマイスターシリーズのSQS,SNS,SimpleDBの回の資料です。

TRANSCRIPT

Page 1: 20111215 12 aws-meister-sqs_sns_sdb-public

AWSマイスターシリーズ ~SQS, SNS, SimpleDB~

2011年12月15日

大谷 晋平 (@shot6 ) ソリューションアーキテクト

Page 2: 20111215 12 aws-meister-sqs_sns_sdb-public

緊急速報

南米リージョンを発表いたします!!

全部で8つ目のリージョン

2011年だけで4つ目

Page 3: 20111215 12 aws-meister-sqs_sns_sdb-public

Global Infrastructure for Global Enterprises US West

(Northern

California,

Oregon)

US East (Northern

Virginia)

Europe

West (Dublin)

Asia Pacific

Region (Singapore)

Asia Pacific

Region (Tokyo)

AWS Regions

AWS Edge Locations

GovCloud (US ITAR Region)

South

America (San Paulo)

Page 4: 20111215 12 aws-meister-sqs_sns_sdb-public

AWSマイスターシリーズ ~Simple Queue Service~

2011年12月15日

大谷 晋平 (@shot6 ) ソリューションアーキテクト

Page 5: 20111215 12 aws-meister-sqs_sns_sdb-public

アジェンダ

SQSとは

SQSの機能

SQSの使いどころ

Q&A

Page 6: 20111215 12 aws-meister-sqs_sns_sdb-public

SQS(Simple Queue Service)とは

AWSの隠し技

Page 7: 20111215 12 aws-meister-sqs_sns_sdb-public

SQS(Simple Queue Service)とは

分散キューサービス AWSをスケールアウトして使うためのキーコ

ンポーネント

最低一度は届くことを保証

信頼性が高く、すぐに使えて、管理者不要、低コスト

2006年よりある最古参サービス

Page 8: 20111215 12 aws-meister-sqs_sns_sdb-public

何故キューが必要か?

“分割できないものは、スケール出来ない” by Randy Shoup(eBay) スケールするには疎結合なアーキテクチャに

する必要がある

疎結合アーキテクチャに非同期通信が不可欠

非同期通信の典型例がキューシステム

Page 9: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSの機能

“分散”キューサービス

最低一度のメッセージ到達保障

シンプルなAPI

キューシステムのインストール不要、SDKから直接使える

Page 10: 20111215 12 aws-meister-sqs_sns_sdb-public

分散キューサービス

メッセージは自動的に複数DC間でレプリケーションされる

メッセージロストを防ぐ

Persistent Message

自分で高い耐障害性を持つキューシステムを構築するのは困難

Page 11: 20111215 12 aws-meister-sqs_sns_sdb-public

シンプルなAPIとSDK

CreateQueue

SendMessage

ReceiveMessage

ChangeMessageVisibility

DeleteMessage

バッチ処理

SDKはJava/.NET/PHP/Ruby

Page 12: 20111215 12 aws-meister-sqs_sns_sdb-public

動作イメージ

1.キューの作成/4.キューの削除 (http://sqs.ap-northeast-1.amazonaws.com/123456789012/queue2)

管理者

メッセージ送信者 (Writer or Producer)

2.メッセージ送信

メッセージ受信者 (Reader or Consumer)

3.メッセージ受信

Page 13: 20111215 12 aws-meister-sqs_sns_sdb-public

メッセージの到達保障

1.キューの作成/4.キューの削除 (http://sqs.ap-northeast-1.amazonaws.com/123456789012/queue2)

管理者

2.メッセージ送信 3.メッセージ受信

Visibility Timeout

Page 14: 20111215 12 aws-meister-sqs_sns_sdb-public

Visibility Timeoutとは

Readerがメッセージを受信した場合に、ある一定期間その他のReaderがメッセージは見えなくなる

メッセージ自体はユーザが明示的に消さない限り残存する(最大2週間)

Page 15: 20111215 12 aws-meister-sqs_sns_sdb-public

Visibility Timeoutとは(2) あるReader-Aが メッセージ1を依頼

あるReader-Dが メッセージ1を依頼

あるReader-Bが 依頼

あるReader-Cが 依頼

メッセージは 返却されない

メッセージは 返却されない

メッセージの返却 削除されていない場合 (メッセージの 返却)

この間にReader-Aは、 ・受信したメッセージを処理する ・処理出来たらメッセージを削除する

Page 16: 20111215 12 aws-meister-sqs_sns_sdb-public

最低一度のメッセージ到達保障

At-Least-Once delivery

メッセージは複数DCにコピー

堅牢性・耐障害性にフォーカス

デメリット:稀に複数回メッセージが届くこともある

メッセージの状態管理

複数回届く前提

Page 17: 20111215 12 aws-meister-sqs_sns_sdb-public

メッセージサンプリング

メッセージは送信後すぐに取れるとは限らない

受信リクエストを送り続ければ取れる

イベンチュアルコンシステンシ前提

サンプリングしたサーバからメッセージを順次返却 (メッセージEが含まれていない)

メッセージの受信者

SQSキューの分散されたサーバ群

サンプリング対象サーバ (グレー)

Page 18: 20111215 12 aws-meister-sqs_sns_sdb-public

開発者に優しい無料枠と価格

月間100,000 requestまで無料

価格

10,000リクエストあたり$0.01

データトランスファーはAWSから外部に送出する場合に限り、$0.201/GBから課金

Page 19: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSのキューのセキュリティ

IAMまたはポリシーベースでユーザとアクションを制限する事が可能

{ "Statement":[{ "Effect":"Allow", "Action":"sqs:SendMessage", "Resource":"arn:aws:sqs:*:123456789012:SampleQueue" } , { "Effect":"Deny", "NotAction":"sqs:SendMessage", "NotResource":"arn:aws:sqs:*:123456789012:SampleQueue" } ] }

Page 20: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSの制約

メッセージの順序性は保証しない

メッセージの保存は最大2週間まで

メッセージのサイズは64KBまで

キュー内に入るメッセージ数には制限なし

キュー名は80文字まで

Page 21: 20111215 12 aws-meister-sqs_sns_sdb-public

最近のSQS機能追加

CloudWatchによるメトリクス監視

AutoScalingと組み合わせやすく

マネージメントコンソールから利用可能に

ディレイキュー

メッセージタイマー

バッチAPI

Page 22: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSをいつ使うか?

AWSクラウド内での疎結合アーキテクチャを採用したい場合

コンポーネント間の依存関係を減らしたい

AWSクラウドとオンプレミスの間でのやり取りのインタフェース

受諾と処理→結果の送信の分離

Page 23: 20111215 12 aws-meister-sqs_sns_sdb-public

顧客はいつSQSを使っているか?

Webアプリケーション/SaaS

ビッグデータや バッチ処理

ハイブリッド クラウド連携

オンプレミスとAWSクラウド連携

EMRやAWSクラウドの その他サービスとの連携に利用

イメージ処理、インデクシング等のシステム間の疎結合なやり取りに利用

Page 24: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSまとめ

AWSが提供するキューサービス

最低一度は届くことを保証

分散キューのためスケールする

高い耐障害性

シンプルにすぐに使える

セキュア

低コスト

Page 25: 20111215 12 aws-meister-sqs_sns_sdb-public

AWSマイスターシリーズ ~Simple Notification Service~

2011年12月15日

大谷 晋平 (@shot6 ) ソリューションアーキテクト

Page 26: 20111215 12 aws-meister-sqs_sns_sdb-public

アジェンダ

SNSとは

SNSの機能

SNSの使いどころ

Q&A

Page 27: 20111215 12 aws-meister-sqs_sns_sdb-public

SNS(Simple Notification Service)とは

AWSの小道具

Page 28: 20111215 12 aws-meister-sqs_sns_sdb-public

SNSとは

クラウド上の通知サービス

簡単に使えて、マルチプロトコル

従量課金制で非常に安い

インストール・管理不要ですぐに使える

Page 29: 20111215 12 aws-meister-sqs_sns_sdb-public

SNSの機能

様々なプロトコルに対応した通知プラットフォーム

メール、SQSキュー、HTTP/HTTPSコールバック、SMS

シンプルなAPI/SDK

プッシュベースアーキテクチャ

非常に低価格

Page 30: 20111215 12 aws-meister-sqs_sns_sdb-public

動作イメージ

1.トピックの作成/5.トピックの削除 管理者

メッセージ配信者 (Publisher)

3.メッセージ配信

メッセージ購読者 (Subscriber)

2.トピック購読

4.メッセージ受信

Page 31: 20111215 12 aws-meister-sqs_sns_sdb-public
Page 32: 20111215 12 aws-meister-sqs_sns_sdb-public
Page 33: 20111215 12 aws-meister-sqs_sns_sdb-public
Page 34: 20111215 12 aws-meister-sqs_sns_sdb-public

利用用途

様々なプロトコルを通じたアプリケーション間のフックに使う

AWSクラウド上のアプリケーション S3

ファイル

SNS

完了通知依頼

ジョブ 完了通知&ジョブ実行

Page 35: 20111215 12 aws-meister-sqs_sns_sdb-public

利用用途

S3上からファイルが削除されたときをフック

AWSクラウド上のアプリケーション S3

SNS

削除通知依頼

削除されたことを通知

ユーザが削除

Page 36: 20111215 12 aws-meister-sqs_sns_sdb-public

SQSとSNSの違い

SQSはポーリングモデル

1:1コミュニケーション

Producer-Consumer

SNSはプッシュモデル

1:Nコミュニケーション

Publisher-Subscriber

Page 37: 20111215 12 aws-meister-sqs_sns_sdb-public

開発者に優しい無料枠と価格

月間100,000 requestまで無料

価格

100,000リクエストあたり$0.06

HTTPは100,000あたり$0.06

メールは100,000通あたり$2.0

100SMSあたり、$0.75

SQSにはチャージなし

Page 38: 20111215 12 aws-meister-sqs_sns_sdb-public

SNSの制約

最大1アカウント100トピックまで

メッセージは最大8KBまで

Page 39: 20111215 12 aws-meister-sqs_sns_sdb-public

SNSまとめ

クラウド上の通知サービス

簡単に使えて、マルチプロトコル

従量課金制で非常に安い

インストール・管理不要ですぐに使える

Page 40: 20111215 12 aws-meister-sqs_sns_sdb-public

AWSマイスターシリーズ ~SimpleDB~

2011年12月15日

大谷 晋平 (@shot6 ) ソリューションアーキテクト

Page 41: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBとは

AWSの裏ワザ

Page 42: 20111215 12 aws-meister-sqs_sns_sdb-public

アジェンダ

SimpleDBが出てきた背景

SimpleDBとは

SimpleDBの機能

SimpleDBの使いどころ

Q&A

Page 43: 20111215 12 aws-meister-sqs_sns_sdb-public

One Size Does Not Fit All

RDBMSが全てではない

EC2+EBSまたはRDSは汎用的

より目的特化なデータベース

シンプルな利用例でより簡単にスケールさせる

管理者不要

低コスト

Page 44: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの出てきた背景

RDBMSが全てではない

EC2+EBSまたはRDSは汎用的

目的特化型サービス

NoSQL

管理者不要

低コスト

Page 45: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの出てきた背景

多くのアプリケーションでRDBMSの高機能が必要ない場合がある

複雑なトランザクション

複雑なジョイン

シンプルにデータを永続化したい

データモデルの制約

Page 46: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBとは

AWS独自のNoSQLデータベース

管理者不要

スケーラブル

高い可用性・高い耐障害性 データは複数DCに自動レプリケーション

データは自動インデクシング

柔軟なデータモデル

圧倒的に低コスト

Page 47: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの位置づけ

CAP定理

一貫性(C)、可用性(A) 、ネットワーク分断耐性(P)のうち、分散環境では実質上ネットワーク分断耐性が必須のため、一貫性か可用性のどちらかを取らなくてはいけない。

Page 48: 20111215 12 aws-meister-sqs_sns_sdb-public
Page 49: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBのデータモデル

ドメイン アイテムを保持する器=テーブル

アイテム アトリビュートを保持する1行

アトリビュート アイテム内にあるKey-Valueまたは

Key-[Value]

Page 50: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBのデータモデル

Page 51: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの書き込み

トランザクションは1アイテムのみ

複数アイテムの同時書き込みにはトランザクションはかけられない

ConditionalPut

現在の値がXXXの場合のみ、データを更新

楽観的並行制御

Page 52: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの読み込み

イベンチュアルコンシステンシな読み込み

デフォルト

パフォーマンス重視

低レイテンシ、高スループット

読み込みの一貫性がない可能性がある

大体1秒程度で一貫性が保たれる

一貫性のある読み込み

比較的低いパフォーマンス

ただしデータは一貫している

ConsistentRead = trueオプション

Page 53: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBで出来る操作

ドメインへの操作

CreateDomain/DeleteDomain/ListDomains

アイテム/アトリビュートの追加

PutAttributes/BatchPutAttributes

アイテム/アトリビュートの削除

DeleteAttributes/BatchDeleteAttributes

アイテム/アトリビュートの検索

GetAttributes/Select

Page 54: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBでSelect

SQLライクなシンプルなクエリが書ける

プライマリキーでの検索 select Year from ‘mydb’ where ItemName() = ‘Akio'

レンジクエリ select Name, category, Year from `mydb` where

every(Year) Between '2005' and '2008'

=, !=, >, <, >=, <=などの演算子

like, not like, in, between, inなどの演算子

order by

count

Page 55: 20111215 12 aws-meister-sqs_sns_sdb-public

RDBMSとSimpleDBの違い

RDBMS

事前定義したスキーマ

管理コスト高い

1台で稼働する事が前提

SQLによるアクセス

リニアにはスケールしない

トランザクションあり

インデックスは明示的

構造化データ

汎用的

SimpleDB

スキーマフリー

管理コスト低い

オートスケール

SQLライクなクエリ

スケールする

トランザクションなし

自動インデックス

半構造化データ

やや目的特化型

Page 56: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの制約

ドメインサイズ -> 10GB/domain or 10億アトリビュート

ドメイン名 -> 3-255(a-zA-Z0-9_-.) characters

1アカウント100ドメインまで

1アイテム256アトリビュートまで

アトリビュートのname/valueの長さ < 1024 bytes

アイテム名の長さ < 1024 bytes

1回のPutAttributesで登録できるのは256個まで

1回のSelectで検索できるアトリビュートは256個まで

1回のSelectで検索できるアイテムは2500まで

1回のクエリの最大実行時間は5秒まで

1回のレスポンスサイズは1024 bytesまで

Page 57: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBをスケールさせるためには?

スケールアウトデザインがフィットする

書き込みをスケール→シャーディング

読み込みをスケール→データ構造/クエリの工夫

SimpleDBに対して出来るだけ並行してリクエストする

論理パーティションキー

•キーの設計がとても重要

Page 58: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBのベストプラクティス

ソート

ソートのため、数値データは0パディングしてやる

日付はISO 8601フォーマットを使う

Selectクエリ

WHERE句ではなく、コンポジットキーを使う

• Name=“Firstname:Lastname”

AND句を極力使わない

LIMITを設定し、レンジクエリを極小化する。LIMIT 2500など

Page 59: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBのベストプラクティス

シャーディング

書き込みのスループットを上げるため

ハッシュ値または、より適切なキー分割を指定

一貫性

読み込みではオプションを適切に使う

• イベンチュアルコンシステンシ

• read-after-writeコンシステンシ

書き込みはなるべく非同期書き込み or ConditionalPutを使う

パフォーマンス

BatchPutまたはBatchDeleteをデフォルト使う

• 25アイテムの書き込みで20-25%程度は向上する

Page 60: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBのベストプラクティス

巨大データの扱い

BLOB的に使うのではなくS3に保存して、ポインタをSimpleDBに保存する

• 2ホップかかるがわかりやすい

データを分割し、複数のアトリビュートに圧縮して押し込める

• 1ホップだが複雑

設計

データは非正規化する前提

スキーマフリーな点を有効に使う

クエリベースで考えて極力ドメインを分ける

• 分割によるスケールメリット

Page 61: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBの価格

マシンの利用料金

クエリ毎にかかった消費量を計算

$0.162/hour

データトランスファー

インバウンドは無料

アウトバウンドは$0.201/GBから

データストレージ料

$0.29/GB

SimpleDBの利用料は他に比べてかなり安い

ただし先ほどのような制約がある

Page 62: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBをいつ使うか?

シンプルなクエリだがスケールが求められる場合

データベース管理者がいないため、管理コストを下げたい場合

データモデルを理解して開発できる人材は必要

銀の弾丸ではない

ユニークキーによる分散が簡単に出来て、スケールアウトさせやすいケースの場合

データ構造が頻繁に変わるため、それを低コストで行いたい場合

低コストでデータベースを持ちたい場合

高い可用性とスケーラビリティが必要な場合

Page 63: 20111215 12 aws-meister-sqs_sns_sdb-public

SimpleDBで顧客は何を動かしているか?

オンラインゲームプラットフォーム

S3のコンテンツのインデックス

設定ファイルなどの置き場所

ソーシャルデータの蓄積

マイニングデータの解析結果のストア

EMRと連携はしないのか?

Page 64: 20111215 12 aws-meister-sqs_sns_sdb-public

まとめ

AWS独自のNoSQLデータベース

管理者不要

スケーラブル

高い可用性・高い耐障害性 データは自動レプリケーション、インデクシ

ング

柔軟なデータモデル

圧倒的に低コスト

Page 65: 20111215 12 aws-meister-sqs_sns_sdb-public

SQS、SNS、SimpleDBを通じて

AWS SシリーズはAWSクラウドをよりよく使うためのコンポーネント

SQS=疎結合を提供する

SNS=プロトコル非依存な通知

SimpleDB=簡単に使えるDB

Page 66: 20111215 12 aws-meister-sqs_sns_sdb-public

ご参加ありがとう ございました

Copyright © 2011 Amazon Web Services