多くの MQTT プロジェクトや IoT サービスでは、オンライン公開 MQTT ブローカーを提供しており、ユーザーはこれを利用して MQTT の学習、テスト、プロトタイプ作成、さらには小規模なアプリケーションを迅速かつ効率的に行うことができます。これにより、時間と労力を節約できます。
しかし、ブローカーの場所、ネットワーク環境、サーバーの負荷により、それぞれの公開ブローカーの安定性やメッセージ送信の遅延が異なる場合があります。また、ほとんどのサービスプロバイダーは無料サービスの安定性やセキュリティについて責任を負わないと明記しているため、利用時にはこれらの要因を考慮する必要があります。
この記事では、いくつかの人気のある無料オンライン MQTT ブローカーを整理し、アクセス性、ネットワーク遅延、小規模性能テスト、メッセージ送信遅延の観点から評価・比較しました。選択の参考になれば幸いです。
テスト対象
以下は本記事でテストした主な MQTT 公開ブローカーです:
名前 | ブローカーアドレス | TCP | TLS | WebSocket |
---|---|---|---|---|
EMQX (グローバル) | broker.emqx.io |
1883 | 8883 | 8083,8084 |
EMQX (CN) | broker-cn.emqx.io |
1883 | 8883 | 8083,8084 |
Eclipse | mqtt.eclipseprojects.io |
1883 | 8883 | 80, 443 |
Mosquitto | test.mosquitto.org |
1883 | 8883, 8884 | 80, 443 |
HiveMQ | broker.hivemq.com |
1883 | N/A | 8000 |
EMQX
EMQX Cloud が提供する無料オンライン MQTT 5 ブローカー です。グローバル(AWS 米国オレゴン)と中国(Tencent Cloud 上海)の 2 つのアクセスポイントがあり、それぞれ 2 ノードで構成されています。必要に応じてノードを自動的に増設することも可能です。
注: グローバルと中国のアクセスポイント間で通信は行われません。
関連リンク:無料公開 MQTT 5 ブローカー
Eclipse
Eclipse IoT が提供する無料オンライン MQTT ブローカーです。IP 解析によると、Azure(米国バージニア)にデプロイされています。以前のアクセスアドレス mqtt.eclipse.org
から mqtt.eclipseprojects.io
に変更されました。
Mosquitto
Mosquitto コミュニティによる無料の MQTT ブローカーで、フランス(OVH ルーベ地域)にデプロイされています。ネットワーク遅延はやや高いものの、パケットロス率は低くなっています。
HiveMQ
HiveMQ が提供する無料 MQTT ブローカーで、AWS(ドイツ・フランクフルト)にデプロイされています。
テスト環境
- ネットワーク: AWS 米国オレゴン
- オペレーティングシステム: macOS 10.15.7
アクセス性テスト
以下は、すべてのブローカーに TCP ポート 1883 経由で接続可能であることを確認した結果です。
名前 | ブローカーアドレス | TCP | アクセス可能 |
---|---|---|---|
EMQX | broker.emqx.io |
1883 | YES |
EMQX (CN) | broker-cn.emqx.io |
1883 | YES |
Eclipse | mqtt.eclipseprojects.io |
1883 | YES |
Mosquitto | test.mosquitto.org |
1883 | YES |
HiveMQ | broker.hivemq.com |
1883 | YES |
テストデータとコード
テストには、以下の MQTT ツールとスクリプトを使用しました:
- ツール: MQTTX
- 接続データ: MQTTX-backup-free-public-mqtt-broker.json
以下は、テストに使用したコードサンプルです:
# EMQX
./emqtt_bench sub -t t/1 -c 1 -h broker.emqx.io
./emqtt_bench pub -t t/1 -c 1 -h broker.emqx.io -I 1
# Eclipse
./emqtt_bench sub -t t/1 -c 1 -h mqtt.eclipseprojects.io
./emqtt_bench pub -t t/1 -c 1 -h mqtt.eclipseprojects.io -I 1
# Mosquitto
./emqtt_bench sub -t t/1 -c 1 -h test.mosquitto.org
./emqtt_bench pub -t t/1 -c 1 -h test.mosquitto.org -I 1
# HiveMQ
./emqtt_bench sub -t t/1 -c 1 -h broker.hivemq.com
./emqtt_bench pub -t t/1 -c 1 -h broker.hivemq.com -I 1
国際的なネットワーク遅延テスト
ネットワーク接続性とネットワーク遅延を確認するために、WebSocket アドレスを使用してテストを行いました。一部のサービスでは ICMP プロトコルが無効化されているため、国内の人気速度測定ツール Webmaster Tools を活用して HTTP の速度機能を使用しました。
名前 | HTTP アドレス(クリックしてテスト) | WebSocket |
---|---|---|
EMQX | http://broker.emqx.io:8083/mqtt | 8083 |
EMQX (CN) | http://broker-cn.emqx.io:8083/mqtt | 8083 |
Eclipse | http://mqtt.eclipseprojects.io/mqtt | 80 |
Mosquitto | http://test.mosquitto.org/mqtt | 80 |
HiveMQ | http://broker.hivemq.com:8000/mqtt | 8000 |
テスト結果
テストは、以下の指標に基づいて行いました:
- 解決時間:DNS 解決にかかる時間
- 接続時間:TCP 接続を確立するためにかかる時間
EMQX | 解決時間 | 接続時間 |
---|---|---|
ロサンゼルス | 15ms | 33ms |
東京 | - | - |
香港 | - | - |
シンガポール | 55ms | 201ms |
ドイツ | 15ms | 160ms |
EMQX (CN) | 解決時間 | 接続時間 |
---|---|---|
ロサンゼルス | <1ms | 156ms |
東京 | <1ms | 90ms |
香港 | <1ms | 35ms |
シンガポール | <1ms | 102ms |
ドイツ | 17ms | 209ms |
Mosquitto | 解決時間 | 接続時間 |
---|---|---|
ロサンゼルス | <1ms | 434ms |
東京 | <1ms | 703ms |
香港 | <1ms | 629ms |
シンガポール | <1ms | 538ms |
ドイツ | 2ms | 59ms |
Eclipse | 解決時間 | 接続時間 |
---|---|---|
ロサンゼルス | <1ms | 72ms |
東京 | <1ms | 155ms |
香港 | 16ms | 218ms |
シンガポール | <1ms | 237ms |
ドイツ | 184ms | 88ms |
HiveMQ | 解決時間 | 接続時間 |
---|---|---|
ロサンゼルス | 5ms | 151ms |
東京 | 2ms | 248ms |
香港 | 7ms | 256ms |
シンガポール | 7ms | 194ms |
ドイツ | 2ms | 2ms |
小規模性能テスト
オープンソースの MQTT パフォーマンステストツール emqtt-bench を使用し、各公開ブローカーの Pub/Sub レート制限をテストしました。
実用性を重視したテストシナリオとして、以下の条件でテストを行いました:
- 条件:1 クライアントで 1 分間、1000 msg/s の Pub/Sub を実行
- メッセージサイズ:256 バイト
以下は、各ブローカーが基準を満たしているかを示した結果です:
名前 | ブローカーアドレス | TCP | Pub 基準達成 | Sub 基準達成 |
---|---|---|---|---|
EMQX | broker.emqx.io |
1883 | YES | YES |
EMQX (中国) | broker-cn.emqx.io |
1883 | YES | YES |
Eclipse | mqtt.eclipseprojects.io |
1883 | YES | YES |
Mosquitto | test.mosquitto.org |
1883 | 50 msg/s付近で変動 | 0-50 msg/s間で変動 |
HiveMQ | broker.hivemq.com |
1883 | YES | 約 50 msg/sで安定 |
実際のメッセージ送信遅延テスト
目的
- メッセージが Pub から Sub まで送信されるのにかかる時間を測定し、送信の安定性と平均遅延時間を分析。
テスト手順
- クライアントが公開サーバーに接続。
- 5 秒ごとにタイムスタンプ付きメッセージを送信。
- サブスクライバーがメッセージを受信し、タイムスタンプの差から遅延時間を計測。
以下はテストモデルです:
遅延履歴
遅延の統計結果(5000ms を超えるデータは除外):
平均遅延
名前 | ブローカーアドレス | TCP | 平均遅延 |
---|---|---|---|
EMQX | broker.emqx.io |
1883 | 207 ms |
EMQX (中国) | broker-cn.emqx.io |
1883 | 164 ms |
Eclipse | mqtt.eclipseprojects.io |
1883 | 250 ms |
Mosquitto | test.mosquitto.org |
1883 | 378 ms |
HiveMQ | broker.hivemq.com |
1883 | 252 ms |
まとめ
各オンライン MQTT サーバーは全体として使用可能ですが、具体的な指標では差が見られました。特に、EMQX のグローバルのアクセスポイントは、良好なパフォーマンスを示し、ほかのブローカーと比較して安定性と遅延の面で優位性を持っています。