잡동사니
MQTT란, IoT용 message broker 선택하기 본문
안녕하세요. 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로 언급하고 있습니다.
결론
성능적으로 봤을 때 Mosquitto
와 ActiveMQ
중 하나가 극단적으로 안 좋은 성능이 나오지 않기 때문에 그 차이는 미미해 보입니다.
다만 IoT
에서의 구동이라는 특성을 보면 Mosquitto
가 조금이나마 좋아보입니다. 왜냐하면 위의 자료에서 가볍고
, OS 이식성
이 좋고 구조가 간단한
장점이 있었기 때문입니다.
더 자세하고 정확한 것은 직접 운영해봐야 알 수 있겠지만 자료의 단순 비교로는 Mosquitto
의 사용이 좀 더 적합해 보입니다.
'IT > Open Source' 카테고리의 다른 글
테이블명세서 생성기 (feat. Excel) (0) | 2022.06.02 |
---|---|
쿠버네티스(Kubernetes)에서 NGINX 설정 변경하기 (0) | 2019.12.12 |
[Tomcat] 2개이상의 webapp 폴더 서비스하기 (0) | 2018.06.01 |
[Tomcat] Error listenerStart 발생시 원인 파악하기 (0) | 2016.10.13 |
[StarUML] 소프트웨어 모델링 플랫폼 소개 (0) | 2016.09.30 |