IT/Open Source

MQTT란, IoT용 message broker 선택하기

yeTi 2021. 2. 8. 17:02

안녕하세요. yeTi입니다.
오늘은 MQTT에 대해서 알아보고 사용할 수 있는 broker를 알아보려고 합니다.

MQTT란

MQTT는 사물인터넷(IoT)을위한 프로토콜로 OASIS(Organization for the Advancement of Structured Information Standards)에서 제시한 표준 메시징 프로토콜입니다.

MQTT의 특징

MQTT의 특징은 다음과 같습니다.

Lightweight and Efficient

디바이스의 리소스를 적게 사용하도록 설계되어 있다. 대표적으로 메시지 헤더는 작게 설계되어 오버헤드가 적게 발생한다는 것을 예로 들 수 있다.

Bi-directional Communications

Device에서 cloud로만 송신할 수 있는 단방향 통신이 아니라 (ex, Request/Response Architecture), device와 cloud간 송수신을 하는 양방향 통신을 지원합니다.

Scale to Millions of Things

수백만 개의 IoT 장치와 연결하도록 확장 할 수 있습니다.

Reliable Message Delivery

Message delivery의 신뢰성을 위해서 3가지의 옵션을 제공합니다.

  • at most once : 클라이언트가 한번은 전송해준다. 서버는 못받을 수도 있다.
  • at least once : 서버가 한번은 받게해준다. 서버는 여러번 받을 수도 있다.
  • exactly once : 서버가 한번만 받게해준다.

Support for Unreliable Networks

영구 세션을 지원하여 re-connection시 소요되는 connection 생성 시간을 줄여 안정적이지 않은 네트워크구간에서도 사용할 수 있도록 합니다.

Security Enabled

TLS를 활용하여 쉽게 메시지를 암호화하는 환경을 지원하고 OAuth와 같이 클라이언트 인증 프로토콜을 지원합니다.

MQTT Publish / Subscribe Architecture

Publish / Subscribe 구조를 가지고 있습니다.

지원 소프트웨어 - Broker

MQTT를 지원하는 server / broker는 다양하게 존재합니다. 그 중에서 대표적으로 3가지정도의 서비스를 확인해보겠습니다.

Apache ActiveMQ Artemis

ActiveMQ를 후보로 선택한 이유는 rabbitmq와 더불어 대표적으로 사용되는 message queue 미들웨어이고 Amazon MQ에서 지원하기 때문입니다.

재단 : Apache
라이센스 : Apache License, Version 2.0
버전 : 2.16.0 (2020-11-03에 최신 release, 1년에 6회정도 release 중)
Contributors : 171명

Mosca

Mosca를 후보로 선택한 이유는 배달의 민족에서 주문중계시스템에 적용한 사례가 있기 때문입니다.

재단 : 개인 (?) - mcollina
라이센스 : MIT License
버전 : 0.44.2 (2021-02-02에 최신 release, 1년에 10회이상 release 중)
Contributors : 38명

Mosquitto

Mosca를 후보로 선택한 이유는 KubeEdge에서 미들웨어 서비스로 제공하고 있기 때문입니다.

재단 : Eclipse
라이센스 : EPL/EDL
버전 : 2.0.6 (2021-01-29에 최신 release, 1년에 10회이상 release 중)
Contributors : 105명

서비스 broker간 비교 분석

Open source를 선택함에 있어서 중요한 부분은 신뢰성과 지속성입니다. 더하여 MQTT의 태생 목적에 맞게 IoT환경에 적합한 서비스인가도 선택에 영향을 미치는 중요한 부분입니다.

이러한 기준을 근거로 바라봤습니다.

Mosca는 현재 활발하게 진행되는 프로젝트이나 상대적으로 Contributors의 수나 release 버전의 수가 낮기 때문에 프로젝트의 숙성도가 낮다고 생각되고, 지원하는 재단이 없기 때문에 규모면에서도 상대적으로 작기 때문에 비교대상에서 제외하였습니다.

2020년에 작성된 Bevywise vs Mosquitto vs ActiveMQ vs HiveMQ 를 확인해보면 MQ간 성능비교를 한 자료가 있습니다.


이를 참고하면 Mosquitto가 가장 좋은 성능을 가지는 것으로 나타납니다.

추가적으로 Enabling IoT connectivity for Modbus networks by using IoT edge gateways를 확인하면 Mod bus 통신을 위해Mosquitto, ActiveMQ HiveMQ를 비교한 자료가 있습니다. 물론 대상 프로토콜은 다르지만 broker의 특성을 비교해보는 자료로는 유의미하다고 생각되었습니다.

자료에는 Total time (TT)Time for the arrival of the first package(TAFP)에 대한 비교 그래프가 나옵니다. 해당 그래프에서 얻을 수 있는 특성은 Total time (TT)ActiveMQ가 좋지만 Time for the arrival of the first package(TAFP)Mosquitto가 더 좋게 나옵니다.

해당 특성은 MQTT의 장점 중 하나인 Support for Unreliable Networks과도 연관지어 생각해볼 수 있는데요. IoT 환경의 특성은 네트워크의 신뢰도가 낮을 확률이 높은데, 이럴 경우에 잦은 re-connection에 대해서 Time for the arrival of the first package(TAFP)가 유의미하게 활용될 수 있습니다.

마지막으로 Classification and evaluation of IoT brokers: A methodology에는 12개의 open source mqtt broker에 대해 비교한 자료가 있습니다.


자료에서 Mosquitto구조 및 사용이 간단하고 설치가 용이하며 OS 이식성이 좋고 가볍기 때문에 가장 인기있는 message broker로 언급하고 있습니다.

결론

성능적으로 봤을 때 MosquittoActiveMQ 중 하나가 극단적으로 안 좋은 성능이 나오지 않기 때문에 그 차이는 미미해 보입니다.

다만 IoT에서의 구동이라는 특성을 보면 Mosquitto가 조금이나마 좋아보입니다. 왜냐하면 위의 자료에서 가볍고, OS 이식성이 좋고 구조가 간단한 장점이 있었기 때문입니다.

더 자세하고 정확한 것은 직접 운영해봐야 알 수 있겠지만 자료의 단순 비교로는 Mosquitto의 사용이 좀 더 적합해 보입니다.