レートリミッターの設定
リミッターはEMQX 5.0で導入された新機能で、クライアントまたはトピックが指定された時間内にパブリッシュまたはサブスクライブできるメッセージ数を制限する仕組みです。リミッターの詳細や動作については、レートリミットをご参照ください。
リスナー単位のリミッター
リミッターはリスナー単位で動作させることが可能です。EMQXは以下の種類のリミッターを用いてレート制限を指定します。
| 種類 | ダッシュボードUI | 説明 | オーバーロード時の動作 |
|---|---|---|---|
| bytes_rate | クライアントごとの最大メッセージパブリッシュトラフィック | 単一クライアントが1秒あたりにパブリッシュするメッセージのバイト数。 | クライアントからのメッセージ受信を一時停止 |
| bytes_burst | クライアントごとの最大メッセージパブリッシュバースト | 通常のData Publishing Rateに基づく、単一クライアントがバーストで送信できるバイト数。 | クライアントからのメッセージ受信を一時停止 |
| messages_rate | クライアントごとの最大メッセージパブリッシュレート | 単一クライアントが1秒あたりにパブリッシュするメッセージ数。 | クライアントからのメッセージ受信を一時停止 |
| messages_burst | クライアントごとの最大メッセージパブリッシュバースト | 通常のMessages Publish Rateに加えて、単一クライアントがバーストで送信できるメッセージ数。 | クライアントからのメッセージ受信を一時停止 |
| max_conn_rate | リスナーごとの最大接続レート | 現在のリスナーが1秒あたりに受け入れる接続数。 | 新規接続の受け入れを一時停止 |
| max_conn_burst | リスナーごとの最大接続バースト | リスナーがバーストで受け入れ可能な最大接続数。 | 新規接続の受け入れを一時停止 |
配信レートリミッターはリスナー単位で動作しますが、オーバーロード時の動作が異なります。詳細は配信レートリミッターをご覧ください。
例えば、デフォルトのTCPリスナーにリミッターを設定する場合、以下のように設定します。
listeners.tcp.default {
bind = "0.0.0.0:1883"
max_conn_rate = "1000/s"
max_conn_burst = "10000/60m"
messages_rate = "1000/s"
messages_burst = "10000/60m"
bytes_rate = "1MB/s"
bytes_burst = "100MB/60m"
}この設定は以下を意味します。
- リスナーの接続確立の最大レートは1秒あたり1000接続です。
- リスナーは60分間に最大10,000接続を受け入れられます。
- クライアントごとのメッセージパブリッシュの最大レートは1秒あたり1000メッセージです。
- リスナーは60分間に最大10,000メッセージのバーストを許容します。
- クライアントごとのデータパブリッシュの最大レートは1秒あたり1MBです。
- リスナーは60分間に最大100MBのバーストを許容します。
ノード単位のリミッター
リミッターはノード単位でも動作し、各EMQXノードに対する個々のクライアント接続の速度や、ノードにパブリッシュされるメッセージやデータのレートを制限します。EMQXノードは以下の種類のリミッターを用いてレート制限を指定します。
| 種類 | ダッシュボードUI | 説明 | オーバーロード時の動作 |
|---|---|---|---|
| bytes_rate | データパブリッシュレート | 単一クライアントが各EMQXノードにパブリッシュするデータ量(バイト単位)。 | 制限に達すると、EMQXはQoS 0メッセージを破棄し、QoS 1およびQoS 2メッセージを「Quota Exceeded」エラー(0x97)で拒否します。 |
| bytes_burst | データパブリッシュバースト | 通常のdata publish rateに基づく、クライアントごとのバースト許容量。 | 制限に達すると、EMQXはQoS 0メッセージを破棄し、QoS 1およびQoS 2メッセージを「Quota Exceeded」エラー(0x97)で拒否します。 |
| messages_rate | メッセージパブリッシュレート | 単一クライアントが各EMQXノードにパブリッシュするメッセージのレート。 | 制限に達すると、EMQXはQoS 0メッセージを破棄し、QoS 1およびQoS 2メッセージを「Quota Exceeded」エラー(0x97)で拒否します。 |
| messages_burst | メッセージパブリッシュバースト | 通常のmessage publishing rateに基づく、ノードごとのバースト許容量。 | 制限に達すると、EMQXはQoS 0メッセージを破棄し、QoS 1およびQoS 2メッセージを「Quota Exceeded」エラー(0x97)で拒否します。 |
| max_conn_rate | 最大接続レート | ノードごとに受け入れる新規接続のレート。 | 制限に達すると、EMQXはAcceptキュー内の接続処理を一時停止し、新規接続の遅延または拒否を行います。 |
| max_conn_burst | 最大接続バースト | ノードがバーストで受け入れ可能な最大接続数。 | 新規接続の受け入れを一時停止します。 |
例えば、EMQXノードにリミッターを設定するには、emqx.confに以下のように記述します。
mqtt.limiter {
max_conn_rate = "1000/s"
max_conn_burst = "10000/60m"
messages_rate = "500/10s"
messages_burst = "10000/60m"
bytes_rate = "500KB/s"
bytes_burst = "100MB/60m"
}ゾーン単位のリミッターは、zoneセクション内に以下のように埋め込むことができます。
zones.my_zone.mqtt {
limiter {...}
}- ノードは10秒あたり最大500メッセージを受信でき、超過分は破棄または拒否されます。
- ノードは60分間に最大10,000メッセージのバーストを許容します。
- ノードは10秒あたり最大500MBのデータを受信でき、超過分は破棄または拒否されます。
- ノードは60分間に最大100MBのバーストを許容します。
配信レートリミッター
上記のパブリッシュ側リミッターに加え、EMQXはサブスクライバー側の配信レート制限もサポートしています。これらのリミッターは、どのクライアントがパブリッシュしたかに関わらず、EMQXがサブスクライブしているクライアントにメッセージを配信する速度を制御します。
| 種類 | ダッシュボードUI | 説明 | オーバーロード時の動作 |
|---|---|---|---|
| delivery_messages_rate | クライアントごとの最大メッセージ配信レート | 単一サブスクライバーに対してノードごとにメッセージを配信する最大レート。 | QoS 0メッセージは破棄されます。QoS 1およびQoS 2メッセージは内部でキューイングされ、リミッター設定に基づく遅延後に再試行されます。 |
| delivery_messages_burst | クライアントごとの最大メッセージ配信バースト | delivery_messages_rateに加えたバースト許容量。 | 上記と同様です。 |
| delivery_bytes_rate | クライアントごとの最大メッセージ配信トラフィック | 単一サブスクライバーに対してノードごとにデータを配信する最大レート(バイト単位)。 | QoS 0メッセージは破棄されます。QoS 1およびQoS 2メッセージは内部でキューイングされ、リミッター設定に基づく遅延後に再試行されます。 |
| delivery_bytes_burst | クライアントごとの最大メッセージ配信トラフィックバースト | delivery_bytes_rateに加えたバースト許容量。 | 上記と同様です。 |
パブリッシュ側リミッターとは異なり、配信リミッターはチャネル単位でのみ適用され、ゾーンやリスナーグループ間で共有されません。
TIP
配信レートリミッターはメモリーセッション(durable_sessions.enable = false)でのみサポートされています。永続化セッションが有効な場合は効果がありません。
ダッシュボードの管理 -> リスナーページで、各リスナーに対して配信レート制限を設定できます。
または、設定ファイルで以下のように設定可能です。例えば、デフォルトのTCPリスナーに配信レート制限を設定する場合は、emqx.confに以下を記述します。
listeners.tcp.default {
bind = "0.0.0.0:1883"
delivery_messages_rate = "100/s"
delivery_messages_burst = "500/10s"
delivery_bytes_rate = "1MB/s"
delivery_bytes_burst = "10MB/10s"
}未指定の場合、デフォルト値はinfinityであり、後方互換性が維持されます。
TIP
EMQXはカスタマイズニーズに応じたより多くの設定項目を提供しています。詳細はEMQX Enterprise Configuration Manual for Enterpriseをご参照ください。