관리 메뉴

HAMA 블로그

MQTT 와 모스키토(Mosquitto) 란 무엇인가? 본문

오픈소스, 미들웨어

MQTT 와 모스키토(Mosquitto) 란 무엇인가?

[하마] 이승현 (wowlsh93@gmail.com) 2015. 9. 3. 11:55


MQTT 시작하기 좋은 글 

https://dzone.com/refcardz/getting-started-with-mqtt


MQTT 란?

(http://www.codejs.co.kr/mqtt-mq-telemetry-transport%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/ 펌)


[MQTT 프로토콜 설계의 의도]
  • 프로토콜이 차지하는 모든 면의 리소스 점유(footprint)를 최소화
  • 느리고 품질이 낮은 네트워크의 장애와 단절에 대비
  • 클라이언트 애플리케이션 동작에 자원 활용이 극히 제한적임을 고려
  • 다수의 클라이언트 연결에 접합한 Publish/Subscribe 네트워크 채용
  • 신뢰성 있는 메시징을 위한 QoS(Quality of Service) 옵션 제공.
  • 개방형 표준 메시징 프로토콜을 지향 –  제 3자(3rd Party) 기기 제조업체와 소프트웨어 개발업체의 용이한 도입, 적용을 유도
[주요 특징]
  • IBM과 Eurotech(Arcom)에 의해 1999년 최초 개발
  • 센서/장치 + 모바일 기기들의 연결을 위한 프로토콜
  • MQTT 프로토콜 오픈소스로 공개 (http://www.mqtt.org)
  • 단순하고 미니멀한 Pub/Sub 메시징 체제
    – 기업 경계 박의 Edge 네트워크 장치와 기업 내의 백엔드 애플리케이션 간 메시지 교환에 접합
    – 간편한 메시징을 위한 직관적 verb set(connect/disconnect publish/subscribe) 제공
  • 오버헤드를 최소화
    – 가장 작은 메시지 사이즈는 2byte: 가변길이 MQTT헤더 + 애플리케이션 Payload
    – Payload 데이터에 중립적: 별도의 다른 애플리케이션 헤더 불필요
    – 클라이언트 라이브러리: C버전은 30KB, Java 버전은 100KB 내외
  • Pub/Sub에 있어서 메시징 신뢰성을 위한 세가지 QoS(Quality of Service) 레벨 제공
    – 반드시 전달되어야하는 중요 메시지에 대한 전달 보장
    – 0 메시지가 최대 1번 전달, 유실 가능성 있음
    – 1 메시지가 최소 1번 전달, 중복 전달 가능성 있음
    – 2 메시지가 단한번, 정당성 있게 전달
  • 클라이언트와 서버간의 연결을 잃었을때 이를 보정하기 위한 자체 기능
    – Last will and testament: 클라이언트가 예고 없이 연결을 잃을 경우 이벤트가 서버에서 발생,
    서버 측에서 연결의 유실 여부 인지
    – Durable subscription: 서버에 클라이언트의 구독(subscription)정보 저장됨,
    세션 종료 후 재접속 시에도 재작업 없이 Pub/Sub유지
    – Clean session 기능: 연결 해제 후 다시 연결되었을 때의 이전 세션 유지/삭제 선택
[이외 특징]
  • FB 메신져가 이걸 사용. 국내 통신사 PUSH 서버도 이걸 사용함
  • 일단 FB가 쓰니, 동남아권 Telco에서 패킷 걸리는 문제는 없을듯
  • Qos 0,1,2로 해서, 2 의 경우 message delivery를 gurantee함
  • 저전력!! 이게 중요.
  • XMPP에 비해서 훨씬 경량. (XMPP는 XML, MQTT는 byte로 보내는데, 2바이트부터 시작)
  • MQTT 서버를 라즈베리와 같은 임베디드 서버에도 넣을 수 있음. IOT용!! 즉 Things가 서버가 될 수 있다!!
  • 대부분 사용자 인증만 제공 (user id/password 방식) 이것도 대부분 서버들이 파일에 저장한다. (IDM이나 KEY 시스템과 연계 필요)
  • TLS/SSL은 지원. X.509 인증서를 이용한 양방향 인증도 지원


mosquitto 

- 간편해서 좋기는 한데. C 기반. 그리고 클러스터링이 안됨.  (HA, Fail over는 어케 한다냐?). Facebook이 쓴다고 하는데. Consistent hashing같은걸 써야 하는데, Fail back이 복잡할듯

- user authentication을 이건. file에 넣고 한다.

- 테스트 해보니 일정 시간 패킷이 안오면 하트비트 메세지 보내기 시작하고, 메세지가 안오면 끊어 버린다.


HiveMQ (저가 상용)

- Clustering 됨 (Infinispan 씀)

- JMX 모니터링 디는 걸로 봐서. 이것은 JAVA

- MultiCast로 클러스터링을 하지만, TCP로 Fixed Size 클러스터나, AWS EC2 클러스터 지원이 가능함.

- AWS/Azure 모두 지원

- 근데 회사가 좀 작아 보인다?? 독일 SI회사


Rabbit MQ

- shared memory 구조가 없어서 어떻게 하는가 궁금하기는 하지만, federation이나 shovel 컨셉을 쓰면 WAN 구간도 가능하기 때문에, 주의깊게 볼만함. 무엇보다 무료에다가 상대적으로 Learning curve가 낮음.

- MQTT 3.1 지원

- QoS0과 1만 지원 (2는 지원 안함)

- SSL 지원

- Session stickiness 지원


IBM MQ 

- http://www-03.ibm.com/software/products/en/wmq-telemetry 이게 갑인듯




Mosquitto (http://mosquitto.org/) 


모스키토는 MQ Telemetry Trasport  프로토콜 버전 3.1 과 3.1.1 을 구현한 오픈소스 메세지브로커이다. MQTT 는 생산자/소비자 모델을 사용한 메세지 이동에 관한 가벼운 메소드를 제공한다. 이것은  저전력 파워센서 나 모바일 디바이스 , 임베디드 컴퓨터나 아두이노 마이크로 컨트롤러  같은 "디바이스 to 디바이스 " 간의 메세징을 처리하기에 적합하다. 



관련 내 블로그 글 

http://brad2014.tistory.com/389



실제 빅데이터 플랫폼 속의 위치 (http://brad2014.tistory.com/185)





Comments