MQTT managé dans le cloud

Latence d'un broker MQTT par région : comment la mesurer et choisir un emplacement

L'endroit où tourne votre broker détermine une grande part de la latence MQTT de bout en bout. Découvrez ce qui contribue au délai, comment mesurer les allers-retours depuis vos propres sites et comment choisir un emplacement de déploiement.

Illustration de la latence d'un broker MQTT par région avec une carte du monde, des sites d'appareils et les temps d'aller-retour vers les emplacements de broker candidats
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

La latence d'un broker MQTT par région compte, car la distance physique entre vos appareils et le broker fixe un plancher qu'aucun réglage ne peut supprimer. Ce guide explique d'où vient la latence MQTT, vous montre comment mesurer les temps d'aller-retour depuis vos propres sites avec un court script, et propose une méthode pratique pour choisir où votre broker doit tourner.

D'où vient la latence MQTT

La latence de bout en bout d'un message MQTT, de la publication par un capteur à sa réception par un abonné, est la somme de plusieurs composantes :

Composante De quoi il s'agit Influencée par
Réseau d'accès De l'appareil à Internet : Wi-Fi, Ethernet, cellulaire, satellite Conditions radio, opérateur, matériel de passerelle
Propagation La lumière qui parcourt la fibre jusqu'au broker et retour Distance physique et chemin de routage
Routage et peering Sauts entre réseaux Interconnexions des FAI et des fournisseurs cloud
Traitement par le broker Analyse, autorisation, correspondance des abonnements, livraison Charge du broker, offre, diffusion
Chemin vers l'abonné Du broker à l'application consommatrice Emplacement de l'abonné
Comportement du client Mise en tampon, regroupement, acquittements QoS Paramètres de la bibliothèque et votre code

Le choix de la région influe surtout sur la propagation et le routage. Dans une fibre optique, la lumière se déplace à environ deux tiers de sa vitesse dans le vide, ce qui représente environ 1 milliseconde de temps d'aller-retour par tranche de 100 kilomètres de fibre, avant tout détour de routage. Les chemins réseau réels sont rarement des lignes droites : les temps mesurés sont donc plus élevés. Un appareil situé sur un continent qui communique avec un broker sur un autre paiera toujours cette distance à chaque aller-retour.

L'établissement de la connexion multiplie les allers-retours

La latence pèse surtout au moment de la connexion. Avant que le premier message ne circule, un client MQTT protégé par TLS a besoin d'une poignée de main TCP, d'une poignée de main TLS et d'un échange MQTT CONNECT/CONNACK. TLS 1.3 nécessite un aller-retour pour sa poignée de main, TLS 1.2 généralement deux. Cela représente plusieurs allers-retours avant la première publication, ce qui se remarque pour les appareils qui sortent d'un sommeil profond, se connectent, publient et se déconnectent. Pour les appareils connectés en permanence, le coût d'établissement est payé une fois et c'est le temps d'aller-retour en régime établi qui compte le plus.

La QoS ajoute des allers-retours d'acquittement

Une publication en QoS 0 est envoyée sans attendre de retour. La QoS 1 attend un PUBACK, et la QoS 2 nécessite un échange en quatre étapes. Le message atteint les abonnés à peu près au même moment, mais l'éditeur attend plus longtemps, ce qui compte pour les clients dont la fenêtre de messages en vol est limitée. Notre article sur les niveaux de QoS MQTT détaille ces compromis.

Comment mesurer la latence MQTT depuis vos sites

Les cartes de latence génériques sont un point de départ utile, mais ce sont vos propres mesures depuis vos propres sites qui comptent. Mesurez à trois niveaux.

Niveau 1 : temps d'aller-retour réseau

Depuis une machine située sur le site des appareils, exécutez :

# Aller-retour ICMP (peut être bloqué par certains réseaux)
ping -c 20 broker.connectmq.com

# Vue par saut du chemin, utile pour repérer les détours
mtr --report --report-cycles 20 broker.connectmq.com

# Temps de connexion TCP au port MQTT TLS
time nc -z -w 5 broker.connectmq.com 8883

La ligne nc ne mesure qu'une connexion TCP brute ; le script au niveau MQTT ci-dessous fournit des chiffres TLS et protocolaires plus utiles.

Niveau 2 : connexion MQTT et aller-retour de publication

Ce script Python, basé sur paho-mqtt 2.x, mesure le temps jusqu'au CONNACK sur TLS, puis l'aller-retour de messages publiés et reçus par le même client. Exécutez-le depuis chaque site qui vous intéresse.

# mqtt_rtt.py - mesure le temps de connexion MQTT et l'aller-retour publication/réception
import statistics
import sys
import threading
import time
import uuid

import paho.mqtt.client as mqtt

HOST = sys.argv[1] if len(sys.argv) > 1 else "broker.connectmq.com"
PORT = 8883
SAMPLES = 30
run_id = uuid.uuid4().hex[:8]
TOPIC = f"connectmq/demo/{run_id}/rtt"

connected = threading.Event()
received = threading.Event()
rtts = []
sent_at = 0.0

def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(TOPIC, qos=0)

def on_subscribe(client, userdata, mid, reason_codes, properties):
    connected.set()

def on_message(client, userdata, msg):
    rtts.append((time.perf_counter() - sent_at) * 1000)
    received.set()

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id=f"rtt-{run_id}", protocol=mqtt.MQTTv5)
# Pour un broker privé, ajoutez les identifiants :
# client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.on_message = on_message

t0 = time.perf_counter()
client.connect(HOST, PORT, keepalive=30)
client.loop_start()
if not connected.wait(15):
    sys.exit("could not connect and subscribe")
print(f"connect + TLS + subscribe: {(time.perf_counter() - t0) * 1000:.0f} ms")

for i in range(SAMPLES):
    received.clear()
    sent_at = time.perf_counter()
    client.publish(TOPIC, str(i), qos=0)
    if not received.wait(5):
        print("timeout on sample", i)
    time.sleep(0.2)               # rester bien en dessous de 10 msg/s sur le broker public

client.loop_stop()
client.disconnect()
if rtts:
    rtts.sort()
    print(f"publish->receive RTT over {len(rtts)} samples: "
          f"median {statistics.median(rtts):.1f} ms, "
          f"p90 {rtts[int(len(rtts) * 0.9) - 1]:.1f} ms, max {rtts[-1]:.1f} ms")

Comme le même client publie et reçoit, le résultat correspond à un aller-retour complet via le broker, ce qui donne une bonne approximation de la latence appareil-backend lorsque votre backend se trouve à proximité du broker. Le script utilise le serveur MQTT public gratuit avec un topic aléatoire : il fonctionne donc sans compte. Ce serveur sert aux tests et aux prototypes, pas aux données de production.

Niveau 3 : les régions candidates que vous contrôlez

Pour comparer des emplacements avant de vous engager, démarrez une petite machine virtuelle dans chaque région cloud candidate, installez Mosquitto avec TLS et exécutez le même script contre chacune depuis chaque site. Vous obtenez ainsi une matrice de chiffres réels plutôt que des hypothèses.

Transformer les mesures en décision

Rassemblez les résultats dans un tableau comme celui-ci, en utilisant des médianes et un percentile élevé plutôt que des pings isolés :

Site Région A médiane / p90 Région B médiane / p90 Région C médiane / p90 Nombre d'appareils
Usine 1 ... ... ... ...
Usine 2 ... ... ... ...
Entrepôt ... ... ... ...
Services backend ... ... ... n/a

Appliquez ensuite ces règles :

  1. Pondérez par importance, pas seulement par nombre d'appareils. Une boucle de régulation sur un site peut compter davantage que des centaines de tableaux de bord ailleurs.
  2. Incluez votre backend. Si vos bases de données et services tournent dans une région cloud donnée, un broker éloigné ajoute de la latence à chaque message consommé.
  3. Regardez le p90 et le maximum, pas seulement la médiane. La gigue compte pour tout ce qui est interactif.
  4. Vérifiez les exigences de résidence. Les règles de protection des données peuvent imposer la région avant même la latence ; voir la résidence des données MQTT.
  5. Envisagez le partitionnement. Si vos sites sont répartis sur plusieurs continents et ont besoin d'une faible latence, des brokers distincts par région peuvent être préférables à un broker central unique.
  6. Gardez à l'esprit que la latence est rarement le seul critère. Le coût, la résidence des données et la simplicité d'exploitation l'emportent souvent sur quelques millisecondes pour une télémétrie lue par des humains.

Choisir l'emplacement d'un déploiement ConnectMQ

ConnectMQ propose plusieurs modèles de déploiement, et l'emplacement fonctionne différemment dans chacun :

  • Serverless (Free et Paid) : votre broker tourne sur le cluster partagé de ConnectMQ. Exécutez le script de mesure depuis vos sites contre ce broker pour vérifier si le temps d'aller-retour répond à vos besoins.
  • Dedicated : un cluster isolé pour votre charge de travail. Discutez des options d'emplacement avec l'équipe, tableau de mesures à l'appui.
  • BYOC : le broker tourne dans votre propre compte cloud, et peut donc se trouver dans la région où vivent déjà vos autres systèmes. Confirmez avec l'équipe les fournisseurs et régions pris en charge lors de la planification ; notre guide sur le broker MQTT BYOC présente ce modèle.
  • Self Managed Enterprise : vous le placez là où vous exploitez votre propre infrastructure.

Pour la plupart des charges de télémétrie et de supervision, un broker bien placé dans la même zone géographique que les appareils suffit. Pour les boucles de régulation serrées, gardez-les en local, en périphérie, et utilisez le broker cloud pour la supervision, le reporting et l'intégration. Notre article sur la latence des jumeaux numériques temps réel approfondit ce partage des rôles.

Les pièges courants en matière de latence

  • Mesurer une seule fois depuis le bureau. Mesurez depuis les réseaux réels des appareils, en particulier les sites en cellulaire.
  • Accuser le broker pour le Wi-Fi. Lancez d'abord les tests réseau ; les réseaux d'accès ajoutent souvent plus de délai que la distance.
  • Se reconnecter pour chaque message. Les appareils en sommeil profond paient plusieurs allers-retours à chaque réveil ; gardez les sessions ouvertes lorsque l'alimentation le permet.
  • Placer les abonnés loin du broker. Un backend situé dans une autre région double la distance parcourue par chaque message.
  • Ignorer le DNS. Des résolveurs lents ajoutent du délai à chaque nouvelle connexion ; mettez les résultats en cache sur les passerelles.

Mesurez votre latence sur ConnectMQ

ConnectMQ est un broker MQTT managé avec des options de déploiement Serverless, Dedicated et BYOC, pour adapter l'emplacement à vos sites et à vos systèmes. Créez un broker Serverless gratuit sur app.connectmq.com, sans carte bancaire, exécutez le script depuis vos sites et servez-vous des résultats pour choisir votre configuration de production. Le guide sur le broker MQTT cloud couvre le reste de la décision d'hébergement, et comment faire évoluer un broker MQTT traite de la capacité.

Questions fréquentes

Dans quelle mesure le choix de la région influe-t-il sur la latence MQTT ?

La distance impose un temps d'aller-retour minimal d'environ 1 milliseconde par tranche de 100 kilomètres de fibre, et les chemins réels en ajoutent. Pour des appareils situés sur un autre continent, le choix de la région domine généralement la part réseau de la latence.

Quelle est la meilleure façon de mesurer la latence d'un broker MQTT ?

Lancez depuis le site des appareils un test au niveau MQTT qui chronomètre la connexion, le TLS et un aller-retour publication-réception, et collectez médianes et percentiles élevés sur de nombreux échantillons.

Le TLS ralentit-il MQTT ?

Le TLS ajoute des allers-retours à la connexion, mais très peu de coût par message ensuite. Gardez les connexions ouvertes lorsque c'est possible pour ne payer la poignée de main qu'une seule fois.

Puis-je choisir où tourne mon broker ConnectMQ ?

Avec BYOC, le broker tourne dans votre propre compte cloud : vous choisissez donc la région parmi les options prises en charge par l'équipe. Pour les déploiements Dedicated, discutez de l'emplacement avec l'équipe.

Articles liés

Broker MQTT BYOC : le modèle Bring Your Own Cloud expliqué

Un broker MQTT BYOC tourne dans votre compte cloud mais est exploité par un fournisseur. Découvrez le fonctionnement du modèle, la répartition des responsabilités et comment préparer votre compte.

9 min de lecture

Messages MQTT par seconde : comment estimer et mesurer le débit

La planification du débit MQTT se résume à quelques formules et à une mesure honnête. Découvrez comment estimer les messages entrants et sortants par seconde, tenir compte des pics et faire correspondre le résultat à une offre de broker.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.