일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이드 웹뷰
- 이더리움
- akka 강좌
- 파이썬
- 파이썬 머신러닝
- CORDA
- 플레이프레임워크
- 스위프트
- hyperledger fabric
- 파이썬 강좌
- Akka
- Golang
- 스칼라 동시성
- 파이썬 동시성
- play 강좌
- 파이썬 데이터분석
- Actor
- 스칼라 강좌
- 블록체인
- 스칼라
- Play2
- 주키퍼
- 하이퍼레저 패브릭
- play2 강좌
- 그라파나
- Play2 로 웹 개발
- 하이브리드앱
- Hyperledger fabric gossip protocol
- 엔터프라이즈 블록체인
- Adapter 패턴
- Today
- Total
HAMA 블로그
MQTT 와 모스키토(Mosquitto) 란 무엇인가? 본문
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/ 펌)
- 프로토콜이 차지하는 모든 면의 리소스 점유(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)
'오픈소스, 미들웨어' 카테고리의 다른 글
카프카(Kafka) vs RabbitMQ (0) | 2015.09.04 |
---|---|
RabbitMQ 사용패턴들 (0) | 2015.09.04 |
[OpenTSDB] 어떻게 OpenTSDB 는 동작하나? (0) | 2015.07.19 |
OSGi 는 어떻게 내 삶을 변화시켰나 (번역) (0) | 2015.07.17 |
초보자를 위한 JNDI (0) | 2015.07.16 |