MQTT 프로토콜?

  • Broker Pattern을 이용한 메세징 프로토콜
  • 점유 리소스가 낮아 주로 IoT 환경에서 많이 사용됨.

MQTT의 패킷 구조

 

Broker Pattern이란?

  • Publisher(발행자)/Broker(중개)/Subscriber(구독자)로 이루어져 있으며, 발행자가 메세지를 생성하면 브로커의 중계를 통해 구독자에게 메세지가 도착하는 디자인 패턴
  • 대표적인 브로커 패턴의 컴포넌트로 아파치 카프카(Apache Kafka)가 있다.
  • 브로커가 메세징 버스를 구성하고, 각 어플리케이션들이 메세지 버스에서 각자 본인의 메세지를 찾아가는 형식.

브로커와 메세지 버스

 

QoS(Quality of Service)?

  • 서비스의 질을 보장하는 레벨을 뜻하며 0부터 2까지 존재
  • 레벨마다 성능과 소모되는 리소스가 달라지며 IoT를 기반으로 한 데이터 파이프라인에서는 아키텍처 설계에 있어 굉장히 중요한 개념
  • 엔지니어는 시스템의 환경을 상세히 파악하고 구축하려는 시스템과 네트워크 환경에 따라 적절한 QoS 레벨을 선택하여야 한다.
  • QoS 레벨은 메세지의 신뢰도와 속도에 따라 나누어지며 3-Way/4-Way Handshake 과정을 거치는 TCP/IP 환경에 비해 패킷의 손실이 일어날 가능성이 있는 NO TCP/IP 환경에서 메세지의 신뢰성을 높이기 위해 서버단에서 구현한 기능.

Level 0(At most once)

  • 메세지는 최대 한번 전달된다.
  • 단 한번 보내고 바로 메세지를 삭제하기 때문에 가장 리소스를 적게 잡아먹고, 지연 및 통신 시간 역시 가장 짧다. 전화통화처럼 메세지의 신뢰성보다는 빠른 응답이 필요한 경우 적합한 시스템.
  • 브로커에는 아무것도 저장되지 않는다. 단지 중개 역할만을 수행.

QoS 0레벨 : At most once의 시퀀스 다이어그램. Fire and Forget이라고도 함

Level 1(At most once)

  • 메세지는 최소 한번 전달된다.
  • 생산된 메세지는 저장되고, 생산자가 브로커에 메세지를 전달
  • 브로커는 메세지를 한번 저장 후(archiving) 구독자에 메세지를 전달
  • 브로커는 메세지를 전달했으므로 메세지를 삭제 후 생산자에게 정상적으로 메세지를 날렸다는 PUBACK을 날린다.
  • PUBACK을 받은 생산자는 최초 생산해 저장하고 있던 메세지를 삭제

QoS 1레벨 시퀀스 다이어그램

Level 2(Exactly once)

  • 가장 높은 신뢰도를 가지는 레벨
  • 네트워크 장애에 상관없이(물리/소프트웨어적 오류는 별개)메세지는 무조건 한번만 전달

Network 장애시

시스템을 구축한다는 것의 의미는, 클라이언트에서 요구한 시스템을 구축하는 것에서 끝나지 않는다. 당연히 정상적인 운용 도중 발생하는 예기치 못하는 경미한 각종 에러부터 Fatal까지, 그 예외사항을 염두에 두고 시스템을 구축해야 한다. 이번에는 정상적인 상황이 아닌, 네트워크 장애로 인해 임의의 구간에서 메세지가 손실/지연되는 경우 각 QoS의 동작에 대해 알아본다.

  • 0레벨은 단순히 메세지가 전달되지 않고 끝난다. 생산자는 메세지를 보냈으니 메세지를 바로 삭제하고, 브로커가 메세지를 전달받지 못하더라도 아무런 작용 없이 메세지는 손실된다.
  • 2레벨의 경우 각 메세지는 모두 상호작용을 통해 저장 및 삭제되므로 어느 한 구간의 통신이 되지 않으면 반드시 재시도를 통해 정확히 한번만 메세지가 전달된다. (만약 브로커에 두번의 요청이 오더라도, 메세지를 삭제하기 전에 반드시 Callback을 보내므로 이미 알고있는 메세지를 다시 전달하지 않는다.
  • 1레벨의 경우는 조금 다른데, 생산자에서 브로커로, 브로커에서 구독자로 메세지가 전달되는 과정에서 지연으로 인해 생산자가 최초의 메세지에 대해 PUBACK을 받지 못하는 경우, 생산자는 메세지 전달이 실패한 것으로 판단해 다시 메세지를 보내고, 최초의 메세지와 재전송된 메세지가 모두 구독자측으로 발행되므로 구독자는 메세지를 2회 전달받게 된다(Duplicate Publish)

마치며...

  • 실제 Production 환경에서는 스터디나 개인 공부 환경에서는 겪어보지 못한 각종 에러가 발생한다. 그건 다기종 시스템간에 접근성 충돌일수도 있고, 트래픽 과부하로 인한 네트워크 에러일수도 있고, 버전 업그레이드 이후 발생하는 모듈간 호환성 이슈일수도 있다. 혹은 보안 모듈의 오작동으로 인한 Fatal인 경우도 있다.
  • 공부할 때는 무조건 최고의 조건 하에서 시스템을 구축하지만, 타 업체의 용역사업을 맡게되는 경우 대개 예산은 부족하고 환경은 열악하다. 따라서 비이상적인 환경에서의 시스템 구축 또한 고려할 사항이다.

 

'전산학' 카테고리의 다른 글

CPU 구조 및 원리, GPU와의 비교  (0) 2021.10.28
서브네팅  (0) 2021.08.07
[Network] 네트워크 프로토콜 정리  (0) 2021.07.18

+ Recent posts