MQTT gerenciado na nuvem

Quantas Conexões um Broker MQTT Suporta?

Não existe um número único para a capacidade de conexões de um broker MQTT. Veja o que realmente limita os clientes simultâneos, como testar por conta própria e como os provedores de broker MQTT gerenciado transformam esses limites em cotas de plano.

Ilustração de quantas conexões um broker MQTT suporta, mostrando um servidor com medidores de memória, file descriptors e TLS cercado por dispositivos conectados
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

Quantas conexões um broker MQTT suporta? A resposta honesta é "depende", mas depende de uma lista curta e específica de recursos que você pode medir e planejar. Este artigo explica o que limita as conexões MQTT simultâneas, por que os números divulgados raramente correspondem à sua carga de trabalho, como testar a capacidade por conta própria e como os provedores de broker MQTT gerenciado traduzem tudo isso em limites de plano.

Por Que Não Existe um Número Único

Você encontrará contagens de conexões impressionantes no marketing de fornecedores e em palestras de conferências. Normalmente são reais, mas foram medidas em condições específicas: clientes ociosos, sem TLS ou com retomada de sessão, payloads minúsculos ou inexistentes, hardware generoso e kernels cuidadosamente ajustados. Mude qualquer um desses fatores e o número muda.

O que importa para você não é o máximo que um broker atinge em laboratório, mas quantos dos seus clientes, com o seu keepalive, TLS, assinaturas e padrões de mensagens, uma determinada implantação consegue atender com folga. Para isso, é preciso entender os gargalos.

O Que Limita as Conexões MQTT Simultâneas

Recurso Por que cada conexão o consome O que piora a situação
Memória Buffers de socket, estado TLS, objeto de sessão, assinaturas, mensagens em trânsito Buffers grandes, muitas assinaturas por cliente, mensagens QoS 1/2 enfileiradas
File descriptors Todo socket TCP é um arquivo aberto em sistemas do tipo Unix Ulimits padrão baixos, descritores extras para logs e persistência
CPU para TLS Os handshakes envolvem criptografia de chave pública Tempestades de reconexão, ausência de retomada de sessão, chaves grandes
CPU para keepalives PINGREQ e PINGRESP de cada cliente a cada intervalo Intervalos de keepalive muito curtos em frotas grandes
Rede e kernel Tabelas de conexão, filas de accept, limites do load balancer Backlog de accept pequeno, tabelas conntrack, limites por IP
Estado de sessão Sessões persistentes sobrevivem a desconexões Expiração de sessão longa para clientes que nunca voltam

Memória

A memória costuma ser o primeiro limite rígido em grandes frotas de dispositivos pouco ativos. Cada conexão carrega buffers de socket do kernel, as estruturas por cliente do próprio broker, o estado da sessão TLS e eventuais mensagens enfileiradas. As assinaturas somam mais, especialmente com muitos filtros curinga. Clientes que se desconectam com sessões persistentes continuam usando memória até a sessão expirar.

File descriptors

No Linux, cada socket consome um file descriptor. O limite flexível padrão em muitas distribuições é baixo demais para um broker, e é por isso que "too many open files" é um dos erros mais comuns quando alguém começa a hospedar o próprio broker. Você pode inspecionar e aumentar esse limite:

# Limites atuais do shell
ulimit -n
ulimit -Hn

# Limites de um processo de broker em execução (substitua PID)
cat /proc/PID/limits | grep "open files"

# Contar os sockets abertos do broker
ls /proc/PID/fd | wc -l

Para um serviço systemd, aumente o limite em um arquivo drop-in:

# /etc/systemd/system/mosquitto.service.d/limits.conf
[Service]
LimitNOFILE=200000

Em seguida, execute sudo systemctl daemon-reload && sudo systemctl restart mosquitto.

TLS

O TLS protege toda conexão de produção, e isso tem um custo. A criptografia contínua de mensagens MQTT pequenas é barata, mas o handshake é comparativamente caro. Isso pesa mais quando muitos clientes se conectam ao mesmo tempo, por exemplo após uma queda de energia em todo o site ou um reinício do broker. Um broker que sustenta com tranquilidade sua frota em regime estável pode ainda assim ter dificuldade para aceitar todos no mesmo minuto. Atrasos de reconexão com jitter nos clientes são a melhor defesa.

Keepalives

Cada cliente envia um PINGREQ quando não tem mais nada a enviar dentro do seu intervalo de keepalive. Em uma frota grande, keepalives muito curtos geram uma carga de fundo constante. Um keepalive entre 30 e 60 segundos é um equilíbrio comum entre detecção rápida de falhas e overhead; dispositivos a bateria costumam usar valores maiores.

Caminho de rede

Load balancers, gateways NAT e firewalls mantêm estado por conexão e têm seus próprios limites. Em ambientes auto-hospedados, verifique o backlog de accept do kernel (net.core.somaxconn) e o tamanho das tabelas de connection tracking se houver um firewall stateful na frente do broker.

Como Testar a Capacidade de Conexões por Conta Própria

Se você opera seu próprio broker, meça em vez de adivinhar. O script abaixo abre muitas conexões ociosas a partir de uma máquina contra um broker que você controla, como uma instância local do Mosquitto. Não execute testes de conexão contra um broker compartilhado ou público; você vai esbarrar na proteção contra flood e afetar outros usuários.

# conn_test.py - abre N conexões MQTT ociosas no SEU PRÓPRIO broker de teste
import sys
import time
import paho.mqtt.client as mqtt

HOST = sys.argv[1] if len(sys.argv) > 1 else "localhost"
COUNT = int(sys.argv[2]) if len(sys.argv) > 2 else 500

connected = 0

def on_connect(client, userdata, flags, reason_code, properties):
    global connected
    if not reason_code.is_failure:
        connected += 1

clients = []
start = time.time()
for i in range(COUNT):
    c = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"conn-test-{i}")
    c.on_connect = on_connect
    try:
        c.connect(HOST, 1883, keepalive=60)
        c.loop_start()
        clients.append(c)
    except OSError as exc:
        print(f"failed at {i}: {exc}")
        break
    if i % 100 == 0:
        time.sleep(0.5)        # controlar o ritmo da rampa

time.sleep(5)
print(f"{connected}/{COUNT} connected in {time.time() - start:.1f}s")
input("Press Enter to disconnect all clients...")
for c in clients:
    c.disconnect()
    c.loop_stop()

Execute com python conn_test.py localhost 2000 enquanto acompanha a memória e a CPU do broker com top ou htop. Observe que cada cliente paho inicia sua própria thread, então em algum momento a própria máquina de teste vira o gargalo; ferramentas de carga dedicadas, baseadas em event loops, escalam mais. Aumente também o ulimit -n na máquina de teste. Repita o teste com TLS habilitado e com assinaturas realistas, porque números com TCP simples e clientes ociosos são os mais otimistas que você verá.

Como Brokers MQTT Gerenciados Definem Limites de Conexão

Os provedores de broker MQTT gerenciado enfrentam as mesmas restrições, mas as transformam em cotas de plano para que você não precise ajustar kernels. Em um cluster compartilhado, a cota também protege cada tenant de todos os demais.

A ConnectMQ publica estes limites de conexão por plano:

Plano Limite de conexões Outros limites principais
Servidor MQTT público (apenas testes) Uso justo, limites por cliente Mensagens de 64 KB, 10 msg/s, 10 assinaturas por cliente
Serverless (Free) Até 25 QoS até 1, mensagens de 256 KB
Serverless (Paid) Até 1.000 QoS 2, mensagens de 1 MB, shared subscriptions
Dedicated Dimensionado para sua carga em um cluster isolado Definidos com a equipe
BYOC Dimensionado para sua carga na sua própria conta de nuvem Definidos com a equipe
Self Managed Enterprise Você opera e dimensiona Definidos com a equipe

Para Dedicated e BYOC, o número certo depende dos fatores deste artigo: seu keepalive, uso de TLS, taxa de mensagens e comportamento de sessão. Compartilhe esses detalhes ao definir o escopo da implantação em vez de pedir um único número de destaque. Se você ultrapassar uma cota, clientes MQTT 5 recebem o reason code 0x97 quota exceeded; nosso guia sobre cotas de conexão de broker MQTT explica como lidar com isso.

Contando as Conexões Corretamente

As equipes frequentemente subestimam. Use este checklist ao estimar:

  1. Cada dispositivo ou gateway com sua própria sessão MQTT.
  2. Cada instância de serviço de backend: gravadores de banco de dados, alertas, APIs.
  3. Cada ferramenta de integração, como Node-RED, Telegraf ou Home Assistant.
  4. Cada dashboard ou aba do navegador executando um cliente MQTT via WebSocket.
  5. Ferramentas de desenvolvimento: exploradores desktop, sessões de CLI, scripts de teste.
  6. Sobreposição temporária durante deploys, quando instâncias antigas e novas de serviços rodam juntas.
  7. Folga para crescimento nos próximos seis a doze meses.

Gateways mudam a conta. Um gateway industrial que agrega cinquenta tags de CLP ou um gateway BLE que encaminha dezenas de sensores usa uma única conexão MQTT, não cinquenta. Se você está perto do limite de um plano, agregar na borda costuma sair mais barato do que fazer upgrade.

Conclusões Práticas

  • A capacidade de conexões é função de memória, file descriptors, custo de TLS, tráfego de keepalive e estado de sessão, e não um número fixo.
  • Capacidade em regime estável e capacidade durante tempestades de reconexão são coisas diferentes; projete clientes com backoff e jitter.
  • Teste sua própria carga de trabalho em hardware que você controla, com TLS ativado.
  • Em um broker MQTT gerenciado, as cotas do plano são o número que importa, e você deve contar todos os clientes, não apenas os dispositivos.

Para vazão em vez de conexões, leia como estimar mensagens MQTT por segundo e, para estratégias de crescimento, veja como escalar um broker MQTT. O guia de broker MQTT na nuvem coloca tudo isso no contexto das opções de hospedagem.

Comece com a ConnectMQ

A ConnectMQ é um broker MQTT gerenciado com limites de conexão claros por plano, para que você planeje a capacidade sem ajustar servidores. Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, e passe para Serverless pago, Dedicated ou BYOC à medida que sua frota crescer.

Perguntas frequentes

Quantas conexões um broker MQTT suporta em um único servidor?

Depende de memória, limites de file descriptors, uso de TLS, intervalos de keepalive e estado de sessão. Meça com o comportamento real dos seus clientes e com TLS habilitado, em vez de confiar em um número de destaque.

O TLS reduz o número de conexões MQTT que um broker suporta?

O TLS adiciona memória por conexão e torna os handshakes intensivos em CPU, o que pesa mais durante tempestades de reconexão. O tráfego criptografado em regime estável com mensagens pequenas é comparativamente barato.

Clientes MQTT ociosos ainda consomem recursos do broker?

Sim. Um cliente ocioso ainda mantém um socket, memória para sua sessão e assinaturas, e envia pings de keepalive, então frotas pouco ativas também consomem capacidade.

Quantas conexões o plano gratuito da ConnectMQ permite?

O plano Serverless (Free) permite até 25 conexões simultâneas, e o plano Serverless pago permite até 1.000. Implantações Dedicated e BYOC são dimensionadas para a sua carga de trabalho.

Artigos relacionados

Broker MQTT BYOC: Bring Your Own Cloud Explicado

Um broker MQTT BYOC roda na sua conta de nuvem, mas é operado por um provedor. Entenda como o modelo funciona, a divisão de responsabilidades e como preparar a sua conta para ele.

9 min de leitura

Alternativa ao Google Cloud IoT Core: Opções e Migração Após o Encerramento

O Google desativou o Cloud IoT Core em agosto de 2023. Este guia compara as alternativas realistas, mapeia os conceitos do IoT Core para MQTT puro e mostra como mover dispositivos para um broker MQTT gerenciado mantendo os dados fluindo para o Google Cloud.

9 min de leitura

Mensagens MQTT por Segundo: Como Estimar e Medir a Vazão

O planejamento de vazão em MQTT se resume a algumas fórmulas e a uma medição honesta. Aprenda a estimar mensagens de entrada e saída por segundo, considerar os picos e associar o resultado a um plano de broker.

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.