O MQTT como IPC em sistemas Linux

Esse artigo apresenta o uso do MQTT como IPC (comunicação inter-processos) em em sistemas Linux. Confiras as vantagens e desvantagens.

O MQTT (acrônimo para Message Queuing Telemetry Transport) é um protocolo de comunicação do tipo Publish-Subscribe (com um servidor central, chamado broker), sendo largamente utilizado nos projetos e aplicações em Internet das Coisas mundo afora.

Mas e se, em sistemas Linux (inclusive Linux embarcado) com um broker MQTT instalado, for utilizado o MQTT para comunicação inter-processos (IPC)? É isso que este artigo discute.

Porquê usar MQTT como IPC?

O MQTT é um protocolo de comunicação do tipo Publish-Subscribe, onde as mensagens são trafegadas entre os clientes através de um servidor central, chamado broker. Uma vez possuindo este broker instalado e executando, processos poderiam conversar entre si desde que se tornem clientes MQTT, ou seja, se conectem no broker local (rodando dentro do próprio sistema) e troquem mensagem com tópicos conhecidos pelos processos. Ainda, wildcards são suportados, permitindo que processos capturem todas as mensagens trafegadas no broker, algo útil para se fazer um log de toda a mensageria para posterior debug, por exemplo.

Dessa forma, processos programados nas mais diversas linguagens de programação (Java, C, Python, etc.) pode facilmente se comunicar, uma vez que existem bibliotecas MQTT disponíveis para muitas das mais usadas linguagens de programação do mercado. Ainda, aplicações que envolvam UI e processos back-end relacionados a web se beneficiam muito disso, uma vez que a comunicação destes com processos mais específicos (como processos de controles de GPIOs, comunicação I²C, etc.) fica facilitada. Dessa forma, soluções podem ser construídas localmente fazendo uso de processos programados em linguagens em níveis de abstração muito distintos, sem dificuldades para comunicá-los.

MQTT – o que é?

Se você não é familiarizado com o MQTT, sugiro a leitura dos seguintes artigos:

Vantagens em utilizar MQTT como IPC

Algumas das vantagens em usar o MQTT como IPC são:

  • Possibilidade de se criar aplicações complexas em termos de comunicação inter-processos de forma simples e rápida, uma vez que o uso do MQTT pode ser bem mais simples do que outros métodos disponíveis para IPC.
  • Como o MQTT foi projetado de forma a não exigir alto processamento de seus clientes, os processos que fazem uso deste teriam pouco overhead em termos de uso de CPU.
  • Possibilidade de se trafegar mensagens formatadas como JSON ou XML, por exemplo, permitindo rápida adoção por processos que as utilizem (sobretudo processo de mais alto nível de abstração)

Ainda, há uma flexibilidade muito interessante quando utilizando MQTT como IPC: é simples fazer com que os clientes utilizem um broker remoto, ou seja, fora do próprio sistema Linux, seja em outro sistema em rede local ou em nuvem. Embora isso pareça estranho para IPC, isso torna mais simples o monitoramento da mensageria de IPC de forma remota, o que pode ajudar muito na depuração à distância de soluções mais complexas.

Cuidados ao se utilizar MQTT como IPC

Assim como qualquer coisa na vida requer uso adequado, há cuidados a serem tomados no uso de MQTT como IPC. Para ilustrá-las, imagine um cenário com um número de clientes MQTT (= processos no Linux) extremamente alto.

Neste caso, o overhead de processamento – tanto por parte do broker quanto por parte dos clientes – pode ser significativo para sua solução se você possuir recursos computacionais (neste caso, processamento e memória RAM) muito limitados. Porém, com o crescente e significativo avanço dos SoCs, o poder computacional destes vêm crescendo (e muito), tornando essa limitação do overhead em processamento uma questão de tempo até desaparecer.

Junto com o overhead de processamento, outra limitação que pode aparecer é o overhead em termos de transações de rede (uso das camadas de rede do sistema operacional), uma vez que o MQTT roda em cima do TCP/IP e, consequentemente, todos os hand-shakes e mensagerias de rede envolvidas no TCP/IP subem muito conforme o número de clientes também sobe. Se essa situação ocorrer, você pode ter problemas no uso de redes em geral neste sistema Linux (Internet, por exemplo) e, logo, pode ser que o uso de MQTT seja proibitivo. Neste caso, uma alternativa é buscar maneiras de comunicação que não precisam de um broker, o que diminuiria substancialmente este overhead de redes. Nessa linha, uma ótima alternativa é o ZeroMQ.

Conclusão

O MQTT pode ser uma ótima alternativa para uso em comunicação inter-processos (IPC), uma vez que é, por natureza, um protocolo de comunicação leve e possui bibliotecas para várias linguagens de programação, permitindo a comunicação entre processos com as mais variadas utilidades e programados nas mais variadas linguagens de programação.

Porém, é preciso avaliar o overhead de CPU e uso das camadas de rede que será demandado, a fim de verificar se a aplicação do MQTT como IPC é viável no seu caso ou não.

Sou engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP) e trabalho com Android embarcado em Campinas-SP.
Curioso e viciado em tecnologia, sempre busco me aprimorar na área de sistemas embarcados (modalidades bare-metal, RTOS, Linux embarcado e Android embarcado).

Para mais informações, acesse minha página no Facebook:https://www.facebook.com/pbertoleti

Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Antonio Ferreira
Nuno
25/01/2021 07:18

Uma ideia longe de eficiente, parsing de XML/JSON esta longe de ser algo rápido/eficiente.
Se pode ser usado? Pode…. da mesma forma que um martelo pode usado como faca…..

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H