Google Cloud Platform

ゲスト投稿 : MQTT と Cloud Pub/Sub で IoT アプリケーションを構築

編集部注 : 今回は、Google Cloud Premier Partner である Agosto の投稿を紹介します。同社は 2012 年以降、IoT アプリケーションを含む製品やサービスを Google Cloud Platform(GCP)上で構築、提供しています。この投稿では、同社が開発した Google Cloud Pub/Sub 用の MQTT サービス ブローカと、それを IoT アプリケーションに組み込む方法について説明します。

IoT(Internet of Things : モノのインターネット)は、私たち Agosto の主要事業の 1 つです。私たちは、GCP のさまざまなコンポーネントを利用して、お客様がアイデアを速やかに製品化できるようにお手伝いをしています。

これまで私たちは複数の IoT プラットフォームを評価しましたが、ライセンスが高価でクローズド ソース プラクティスである単一の IoT プラットフォームよりも、GCP スタックにとどまったほうがよいとの結論に何度も至りました。私たちのお客様が、以前から存在する標準的な参照アーキテクチャとツールを使ってスケーラブルに動く機能的なプロトタイプの構築を望まれたという事情もありました。

私たちがその過程で直面した問題の 1 つは、モノと GCP の間で双方向のメッセージングを実現するための効率的なトランスポートの選択でした。新旧のさまざまなプロトコルを評価した結果、私たちは MQTT(Message Queuing Telemetry Transport)を選びました。

MQTT プロトコルは 2000 年代初めに登場し、今では ISO 標準になっています。1999 年に Andy Stanford-Clark 氏と Arlen Nipper 氏によって考案されたこのプロトコルは、軽量で、しっかりしたドキュメントを持ち、数万に上る実運用の実績があります。

しかも、IoT 以前の既存 M2M(Machine to Machine)プロジェクトの多くが、組み込みデバイスからバックオフィスへのトランスポートとして、すでに MQTT を使っています。IoT 製品とサービスは、MQTT を通じて速度の向上と複雑さの軽減に成功してきているのです。

MQTT はすばらしいトランスポート プロトコルですが、大規模なシステム、特にメッセージのストレージやデリバリ システムのスケーリングでは管理が難しい場合があります。そこで、IoT 製品の販売を加速させる再利用可能ツールやリファレンス アーキテクチャ、メソッドを早い時期から開発してきた私たちは、永続性があり、レイテンシが低く、スケーラブルな多対多非同期メッセージング処理サービスである Google Cloud Pub/Sub に注目してきました。

しかし、Cloud Pub/Sub はデータの転送に HTTPS を使っています。小規模のリクエストを無数に送るなかで、HTTP ヘッダによるオーバーヘッドは膨大なものになります。制約の多いデバイスを使い、モバイル ネットワークを介して通信するうえに、バイトごとにモバイル データ料金やバッテリ消費コスト(両方の場合も)がかかることを考えると、これは許容できません。

私たちは、IoT 接続デバイスと Cloud Pub/Sub の間のギャップを埋めなければなりませんでした。そこで、RabbitMQ を拡張して MQTT と Cloud Pub/Sub を接続する方法の検討に入りました。

最初のロード テストでこのアプローチの実用性が高いことが明らかになり、Google は私たちに対して、オープンソースでパフォーマンスが高く、Cloud Pub/Sub と統合された MQTT 接続ブローカを開発するよう依頼してきました。ネットワークのオーバーヘッドが低く(Agosto がテストしたシナリオでは HTTPS の 10 倍以上)、スループットが高い MQTT は、さまざまなシナリオに自然に適合します。

このようにして作られたメッセージ ブローカは、MQTT クライアントと Cloud Pub/Sub を使って接続されたデバイスの間のメッセージングを統合します。RabbitMQ は、デバイスと Cloud Pub/Sub の間の双方向メッセージングのためにプロトコル変換を行います。そのため、RabbitMQ コンピュート インフラストラクチャの管理者は、データの永続性やストレージのスケーリングなどに注意を払う必要はありません。

私たちのメッセージ ブローカは、大小さまざまな GCP プロジェクトをサポートします。たとえば、小規模なプロジェクトや IoT プロトタイプの場合、毎分 12 万メッセージをサポートするシングル ノードの MQTT to Pub/Sub Connection Broker を、月額わずか 25 ドルで手軽にデプロイできます。負荷分散されたブローカを使用する大規模な本番デプロイでは、数百万の同時接続と非常に高いスループットを実現できます。

ぜひ、GitHub からブローカをダウンロードし、指示に従って、MQTT と GCP を IoT プロジェクトで活用する方法について調べてみてください。

また、MQTT to Pub/Sub Connection Broker のカスタマイズを希望されるお客様は、製品の詳細が記載されている私たちのウェブサイトにお越しください。

* この投稿は米国時間 1 月 30 日、Agosto の Co-founder 兼 EVP である Rick Erickson 氏と、CTO である Paul Lundberg 氏によって投稿されたもの(投稿はこちら)の抄訳です。

- By Rick Erickson, Co-founder and EVP and Paul Lundberg, CTO, Agosto