この記事は、mockmockアドベントカレンダー25日目の記事です。
昨日は、 Y_uuuによる、 mockmockで簡単なIoTシステムを開発してみよう でした。
向かいの席でなにやらゴソゴソしていたのですが、まさかこんなものを作っていたとは!!!
とても夢のあるワクワクする内容でした。
本日は、mockmock Advent Calendar 2019 の記事を振り返りつつ、夢のcn50k
を動かしてみようと思います。
※ cn50k とは?
mockmock の キャパシティの1種。
現時点で最も大きいキャパシティで、50,000台のmock を同時起動できる。
振り返り
cn50kを動かして見る前に、今年Qiitaに投稿されたmockmock関連の記事をまとめておこうと思います。
mockmock とは?
IoT開発者向け疑似データ送信サービス「mockmock」とは
プロダクトオーナーのKta-Mによる、mockmock全体の説明でした。
各種サーバー・サービスにデータを送る
サーバー(Nginx)
もちろん自前のサーバーにデータを送ることができます。
クラウド
AWS, GCP, Azure など、大手クラウドサービスのIoTプラットフォームにデータを送ることができます。
- mockmockでAWS IoT Coreにデータを送るプロジェクトを作成する
- mockmockでAmazon API Gatewayにデータを送るプロジェクトを作成する
- mockmockでAmazon Kinesis Data Streamsにデータを送るプロジェクトを作成する
- mockmockでGoogle Cloud IoT Coreにデータを送るプロジェクトを作成する
- mockmockでAzure IoT Hubにデータを送るプロジェクトを作成する
SORACOM
SORACOM SIM を使わずに SORACOM のサービスを使った機能を構築することができます。
- mockmockでSORACOM Beamから連携するシステムの開発を効率化する
- mockmockでSORACOM Beamにデータを送るプロジェクトを作成する
- mockmockでSORACOM Funnelにデータを送るプロジェクトを作成する
- mockmockでSORACOM Funkを呼んでみる
- mockmockでSORACOM Funkにデータを送るプロジェクトを作成する
- SORACOM MOCAROSで世界を反転させて愉しむ
いろいろなところにデータを送れます。
mockmock に備わった機能の使い方
ジェネレータ
開発中のIoT デバイスを模倣することができます。
- mockmockのグラフバリュージェネレーターの原点基準の違いを試す
- mockmockのバケットバリュージェネレーターの送信ルールの違いを試す
- mockmockの位置ジェネレーターを使ってみる
- mockmockのデータテンプレートでHTTP Request Headerを使ってみる
- mockmockのデータテンプレートで生成タイプ"バルク"を使ってみる
送信制御
送信間隔を調整したりmockを一括操作したりできます。
- mockmockでデータ送信間隔をランダムにしてみる
- mockmockで大量のmockを一度に登録してみる
- mockmockで自動的にmockを終了させる
- mockmockで特定の数のmockを一括操作する
状態遷移
mock の状態を、確定的・確率的に遷移させることができます。
API
APIも実装されています!
実用例
実際にIoTデバイスの開発にmockmockを使ってみた事例です。
ということで、今年は非常に多くの記事が書かれました。
ほとんどがこのAdvent Calendar ですが泣
本題
mockmock では、上の様々な記事で取り上げられている通り、
- 各種エンドポイントへのデータ送信
- 複数のデータ生成方式
- 任意の送信間隔でのデータ送信
- mock がまるで生きているかのような、状態遷移
をサポートしています。
しかし、疑問に思われる方も多いはずです。
生成できるデータが豊富なことはわかった。いろいろな送信先に遅れることもわかった。
でも、一体どれだけの データの量
を送れるんだ? と。
ということで本日は、 mockmock の本気、cn50k
を試してみたいと思います。
制約
mockmock の通常プランでは、 cn5k
(5,000 mockの同時起動)までしか対応していません。
ご利用前に申請して頂く必要があります。
mockmock コンソールにログイン後、こちら よりお問い合わせください。
やってみる!
Amazon Kinesis Data Streams に対してcn50kでデータを送ろうと思います。
今回は、
- Kinesis Data Streams にデータを送信する
- せっかくなので、 mockmockで特定の数のmockを一括操作するを試してみる (0 -> 33k -> 50k -> 0)
- Kinesis Data Streams の モニタリング画面で、受信数を確認
という手順で実行しようと思います。
ここで1点注意です。
cn50k
は費用が高かったり起動に時間がかかったりするので、多くの場合動作確認はcn1
やcn10
で行うことをおすすめします。
もちろん必要な場面もあるかとおもいますが、かなりの金額がかかってしまうのでご注意ください(料金表はこちら)。
自分は1度設定をミスったまま cn50kでmockを起動してしまい悲しい思いをしたことがあります。。。
Kinesis Data Streams にデータを送る準備
まずは、mockmockでAmazon Kinesis Data Streamsにデータを送るプロジェクトを作成するを参考に事前準備を行います。
記事を見ながらやるとうまくできました。
1点注意が必要なのが、シャード数です。
自分はこの上限にあたってしまい何度か実験をやり直しました。。
今回は10秒に1データ送信 x 50k なので、受信データ数の上限にあたってしまいました。。
同じように、10秒に1データ送信 x 50k の場合は、 シャード数は6
に設定する必要があります(最低/送信データ数により増える可能性あり)。
Mock ステータスの設定
今回は、{'hello': 'World!'}
を10秒に一度送りつけるという極めてシンプルなステータスを設定しました。
Mockの作成と起動
せっかくなので、 mockmockで特定の数のmockを一括操作するを試してみました。
0 mock -> 33k mock -> 50k mock-> 0 mock
と順次起動・一括停止 を行いました。
mock の起動には約15分かかります。
Kinesis Data Streams の モニタリング画面で、受信数を確認
さて、起動してしばらくしたら、Kinesis Data Streams のモニタリング画面を表示し、きちんとデータが送られているかを確認します。
上述したとおり、いきなり50kでやるのではなく、cn1
や cn10
で疎通確認を行ったほうが良いです。
33k
33k * 6 (10秒に1回送信 = 1分に6回送信) = 198,000 ≒ 198,004
概ね正しい数を受信できていることがわかります。
50k
50k * 6 (10秒に1回送信 = 1分に6回送信) = 300,000 ≒ 299,996
こちらも概ね正しい数を受信できていることがわかります。
無事、50k mock 立ち上げることに成功しました。
0
終了後はこのようなグラフになりました。
約5分で全mock が停止していることがわかります。
シャード数
先程から再三申し上げていることですが、シャード数の設定をミスっていたので、一部データの受信に失敗してしまった箇所があります。
くれぐれもシャード数の設定にはお気をつけくださいませ。。。
シャード数の設定をミスっていたので、うまくデータが取れなかった
比較
mock の動作をモニタリング
mock のログを確認できます!
Requests は、送信したリクエストを表しており、success, failed はそれぞれリクエストが成功したか、失敗したかを表しています。
難点は、タイムラグが有ることと、cn50k ではログの詳細が表示されないことです。
mockの停止と掃除
終了後は、Kinesis Data Streams のストリームを削除するのを忘れないようにお気をつけくださいませ。
また、IAMやポリシーも忘れずに削除しておきましょう。
あと、mockmockプロジェクトのキャパシティ変更もお忘れなく。
次回起動時のミスを防ぐため、cn1 にしておくのがおすすめです。
終わりに
cn50k
プロジェクトは、自分が初めてmockmock に関わったプロジェクトでした。
右も左もRubyもGoもわからないままプロジェクトに参加することになり、毎日必死に実装していたのを思い出します。
最近ではmockmockの開発を行うことは無くなってしまいましたが、cn50k
を開発していたあの日々は、今振り返ってもとても有意義な日々でした。
数が増える。それだけのことだと思っていたのですが、想定していないエラーが飛んできたり何故か起動しないmockがいたり。
スケールアップだけでは乗り越えられない壁に直面したのもこの頃でした。
AWSのいろいろな機能を試し、全mockが正常に起動したときの喜びは今でも昨日のことのように覚えています。
今、キャパシティcn50k
は@cheekykorkindの手によりまさに生まれ変わろうとしています。
これからの大きな変身とさらなる成長を楽しみにしつつ、そっと遠くから見守っていきたいと思います。
25日間、mockmock Advent Calendar 2019を楽しみにしていてくださった皆様、ありがとうございました。
渾身の作品が目白押しですので、まだ読まれていない方はぜひお読みください!
来年の mockmock Advent Calendar もお楽しみに!