【レポート】IOT308 – One Message to a Million Things – Done in 60 seconds with AWS IoT #reinvent
はじめに
re:Invent 2017のセッション「IOT308 - One Message to a Million Things - Done in 60 seconds with AWS IoT」について聴講しました。 こちらは一般的なAWS IoTのメッセージングパターンやスケーリングのベストプラティスについてのセッションです。
セッション概要
The AWS IoT message broker is a fully managed publish/subscribe broker service that enables the sending and receiving of messages between devices and applications with high speed and reliability. In this session, learn about the common AWS IoT messaging patterns and dive deep into understanding the scaling best practices while using these patterns in applications. In addition, Amazon Music talks about how they used AWS IoT to build event notifications of soccer games in their applications for our customers.
セッション資料
- 動画
AWS IoTのコンポーネント
AWS IoTのコンポーネントについて一枚のスライドにまとめられていますが詳細については AWS IoT の構成要素を確認しておくとイメージがつきやすいです。
4つの異なる事例
これらの4つの例は組み合わせることにより大多数のユースケースをカバーできるとのこと。
- Home automation
- Telemetry
- Device data delivery
- Broadcast notifications
Home automation - Connected TV
Alexaやmobile phoneを使いTVと接続しコントロール(電源 ON / OFF,Volume UP / Down)します。 ポイントはサブスクリプションをまとめる為にワイルドカードを使い、トピックにdeviceIDを使う。スケールさせる為にワイルドカードはトピック構造の右端に使うの3点です。
- サブスクリプションをまとめる為にワイルドカードを使う
- deviceIdを使う
- トピック構造の右端にワイルドカードを使う
Telemetry - Connected Wind Farm
風力発電所のデータ(速度や任意のデータ)を遠隔で収集するユースケース。
- 要件
- センサー数:1,000,000
- センサーがデータをパブリッシュする間隔:50sec
- 全センサーがデータをパブリッシュする:1,000,000/50 per sec
- 1秒間で20,000のデータをパブリッシュする必要がある。
- Amazon kinesis
- 要件から1秒間に1,000レコードの書き込みのため20shardが必要
- どうやって書き込みをするか
- 高いカーディナリティのpartitionKeyを使う
- AWS IoT rule
"partitionKey":"${topic()}" → "${clientID()}"
Device Data Delivery - Connected cars
Do not use shared shadowsということで基本的にThing shadowの共有を避けてデバイスごとにThing shadowを使いデバイス(車)の情報を取得します。
Broadcast notifications - Mobile advertising
最後の例はモバイルアプリケーションにてユーザーにリアルタイム広告を掲載するサービスです。
- 要件
- デバイス数:1,000,000
- 全てのデバイスに広告を配信する所要時間:60s以下
- AWS IoT
- AWS IoTはメッセージを全てのsubscribersに毎秒10,000の割合で配信
ポイントは希望するSLAに合わせて、トッピック間でサブスクライバーを分割します。
分割することによって要件を満たすことが可能です。
本セッションのキーワード
- command/+
- deviceId/command/+ or command/deviceId/+
- 20k write records per second <=> 20 Shards
- $aws/thing/shadow/<thingName>/…
- SUBSCRIBE Ads/City/LasVegas/group1 & SUBSCRIBE Ads/City/LasVegas/group2
おわりに
AWS IoTについてのセッションで馴染みがなく難しかったのですが、キーワードは抑えることができたと思います。
ではまた