MQTT vs REST — perspectiva de uma implementação IoT
Atualmente, a maioria das implementações IoT (Internet of Things) utiliza algum tipo de conectividade entre os dispositivos. Algumas implementações são baseadas sobre o protocolo HTTP, sendo a principal arquitetura utilizada é a REST. REST significa Representational State Transfer. Em português, Transferência de Estado Representacional. Trata-se de uma abstração da arquitetura da Web. Resumidamente, o REST consiste em princípios/regras/constraints que, quando seguidas, permitem a criação de um projeto com interfaces bem definidas. Desta forma, permitindo, por exemplo, que aplicações se comuniquem. Por outra via, vem sendo adotado o MQTT, um protocolo lightweight, que foi originalmente criado para suprir as necessidades de conectividade de dispositivos IoT com algumas vantagens sobre outras arquiteturas. Este texto compara essas duas arquiteturas, para ajudar o leitor na escolha de qual protocolo de comunicação utilizar em uma solução IoT.
Tempo de Resposta
A arquitetura HTTP REST é uma conexão unidirecional e a conexão com o servidor é intermitente. O cliente se conecta ao servidor quando necessário para enviar dados do cliente e envia os dados para o cliente. O servidor precisa esperar que os clientes se conectem para enviar os dados destinados ao cliente. Isso faz com que o usuário pretenda agir para aguardar a conexão do cliente. A maioria dos provedores de soluções permite que seu servidor de borda ou seus gateways se conectem a cada 1 minuto ou mais para que o servidor não seja carregado.
Veja um exemplo de um aplicativo para smartphones. A mensagem do celular atingirá o servidor instantaneamente. Mas a mensagem do servidor para o cliente precisa aguardar a conexão do cliente.
A arquitetura MQTT permite que o cliente seja conectado sempre fornecendo uma comunicação bidirecional entre o cliente e o servidor. Isso permite que o servidor envie a mensagem para o dispositivo, fazendo com que este responda ao seu comando instantaneamente, conforme esperado pelos clientes.
Consumo de Energia
Quando comparado diretamente para a mesma transferência de dados usando HTTP REST e MQTT, a arquitetura MQTT consome 20% menos energia. No caso do HTTP REST, a maior parte da energia é perdida nos recursos usados na conexão e desconexão e na limpeza de recursos no servidor e no cliente. Portanto, quando você constrói um dispositivo remoto operado por bateria, o MQTT ajuda você com uma vida útil da bateria maior.
Segurança
A maioria dos dispositivos hoje é implantada atrás do firewall por razões de segurança. Uma das limitações da arquitura HTTP REST é que o servidor não pode se comunicar do servidor para o cliente sob demanda. Mesmo se colocarmos um servidor REST nos dispositivos clientes e tentarmos fazer com que as conexões formem o servidor, ele falhará quando os dispositivos forem instalados atrás do firewall. O MQTT resolve inerentemente esse problema de comunicação bidirecional com as conexões persistentes.
Perfomance
A arquitetura MQTT sempre mantém seus dispositivos conectados, diferente da arquitetura HTTP REST que são intermitentes. Devido à conexão permanente, a necessidade de conectar e desconectar para cada transferência de dados não é necessária. O ping keep alive tem uma sobrecarga muito menor em comparação com as chamadas de conexão de reconexão que o HTTP REST faz. De acordo com os relatórios de análise e teste, a transferência de dados MQTT pode transferir dados a uma taxa 20 a 25 vezes mais rápida que as chamadas REST.
O número de transações de mensagens depende muito do número de conexões que o servidor pode aceitar no tempo estipulado. O número de conexões simultâneas que o servidor da web disponível mais rapidamente hoje será da ordem de 1000s por segundo. Isso restringe a transferência de dados em seqüência. O Mosquito (um MQTT broker) pode processar até 40.000 mensagens por segundo em um servidor. O número de conexões paralelas que o intermediário pode conter pode ser novamente ajustado com base no hardware. Um simples servidor pode armazenar até 50.000 conexões em paralelo.
Podemos observar que a arquitutura MQTT é superior ao HTTP REST para uma implementação de uma solução IoT.