티스토리 뷰

IT 일반

제로 MQ와 래빗 MQ에 대한 고찰

야라바 2023. 6. 19. 13:14
728x90

최근 건물 에너지 관리 시스템(BEMS, Building Energy Management System)을 새롭게 접하면서 오픈 소스 플랫폼인 볼트론(VOLTTRON, https://volttron.org)에 관심을 갖게 되었다. 볼트론의 최근 버전은 파이썬 3.6 이상과 리눅스 환경에서 동작하는데 설치 과정의 핵심 요소가 바로 메시징 시스템이었다. 건물 에너지 관리 시스템은 다양한 계량기 및 계측기, PLC 등으로부터 정보를 수집하고 필요에 따라 컨트롤 메시지를 개별 기기에 내려 보내기 때문에 기기간의 메시지 전달 체계가 설치 과정의 핵심인 것은 어찌 보면 당연한 일이라 할 수 있겠다.

 

볼트론을 처음 개발할 당시만 해도 메시징 시스템으로 제로 MQ를 사용했는데 사용자들의 다양한 필요를 채워주고 메시징 시스템에 볼트론 자체의 개발 부담을 줄이기 위해서 래빗 MQ를 적용하게 되었다고 한다. 그래서 두 가지 MQ(Message Queue)  체계에 대한 간단한 검토를 해보고자 한다.

 

■ 시스템 개요

- 제로 MQ : https://zeromq.org/

ZeroMQ (ØMQ, 0MQ, ZMQ)의 제로는 브로커가 필요 없고 메시지 큐의 고질적인 문제인 정체가 없고 비용과 관리가 없는 시스템을 만들겠다는 철학에서 그 특성을 쉽게 알 수 있다. 비동기식 메시징 라이브러리라는 정체성을 가진다. 

- 래빗 MQ : https://www.rabbitmq.com/

RMQ라고도 부르며 오픈소스 메시지 브로커라는 정체성처럼 별도의 서버로 동작하는 시스템이다. 인스타그램, 구글 클라우드 등에 적용될 정도로 대형 시스템의 다양한 메시징 필요를 채워주는 시스템이라 할 수 있다.

 

■ 메시지 정체(Retention)와 안정성

메시지 큐를 사용하다 보면 경험하는 고질적인 문제는 메시지 큐의 정체가 시작되면서 큐가 꽉 차서 더 이상 메시지를 전달할 수 없는 상황과 함께 정체를 제대로 대처하지 못하면 프로그램이 비정상 종료되는 것이다. 메시지 소비자가 메시지 생산자의 요청을 소화하지 못하는 상황이나 메시지 소비자가 활성화되지 않았을 때 발생하는 문제이다. 이런 상황에서 대처 가능한 방법은 시스템을 모니터링하면서 메시지 생산을 제한하거나 메시지 소비자를 늘려주는 방식으로 대처하는 것이 보통이다.

 

제로 MQ는 정체 자체가 없고 래빗 MQ는 메시지 수신을 확인해야 메시지 큐에서 메시지가 제거되는 차이가 있다. 메시지 정체가 없으므로 당연히 처리 속도는 제로 MQ가 빠를 수밖에 없다. 그렇지만, 동전의 양면처럼 빠른 만큼 메시지의 정확한 전달에 있어서는 단점이 있다. 제로 MQ는 메시지 소비자가 없으면 해당 메시지를 버려버리기 때문이다. 이에 대한 기능 보완은 온전히 응용 프로그램의 부담이다. 다만, 주기적인 계량기의 수치 확인이나 단순 모니터링이라면 이런 부분은 시스템 전체 안정성에 그리 문제가 되지 않을 것으로 보인다.

 

■ 메시지 보관성(Persistence)과 성능

앞서 제로 MQ는 메시지 정체가 없다고 언급한 것은 메시지를 수신처에 제대로 전달할 때까지 보관하는 기능 자체가 없기 때문이기도 하다. 반면에 래빗 MQ는 메시지가 생산되면 교환, 저장, 전달이라는 절차를 통해서 메시지를 통제하므로 성능상으로도 제로 MQ에 뒤질 수밖에 없다. 그런데, 성능의 문제는 시스템에 붙는 장치의 개수가 늘어날수록 상황이 달라진다. ZMQ 기반의 볼트론과 RMQ 기반의 볼트론 시스템의 성능을 측정한 보고서를 보면 ZMQ 기반에서는 장치의 수가 늘어날수록 성능도 느려지는 현상을 보이는 반면 RMQ 기반에서는 장치의 수가 늘어나도 성능에 큰 차이를 보이지 않는다. 보고서에서는 장치가 4천 개 미만일 때 ZMQ가 좋은 성능을 보였다. 메시지가 소실되지 않아야 하고 대량의 장치가 붙는 시스템이라면 래빗 MQ를 적극 검토할만하다.

 

■ 볼트론과 메시징 시스템

BEMS 구축에 있어 데이터 저장소와 장치 드라이버, 관리를 위한 Web UI도 중요하겠지만 무엇보다도 중요한 요소는 다양한 장치 간의 메시지 전달을 관장할 메시징 시스템이라 하겠다. 볼트론에서는 라즈베리와 같은 소규모 시스템이나 접속하는 장치가 많지 않은 경우에는 쉽게 설치할 수 있는 제로 MQ를 추천한다. 반면 대규모 시스템이나 장치 간의 메시지 전달이 많은 경우에는 래빗 MQ를 추천하고 있다.

 

ZMQ를 사용하는 경우 볼트론 플랫폼 자체가 메시지 전달을 책임지는 브로커 역할을 하지만 RMQ를 사용하면 브로커는 볼트론 플랫폼 외부에서 동작하므로 볼트론은 메시지 전달과 관련한 책임에서 자유로워지는 측면이 있다. 이러한 이유로 메시징 상태를 모니터링하려면 ZMQ의 경우에는 별도의 프로그램을 제작해야 하지만, RMQ의 경우에는 자체 모니터링 도구를 이용하여 손쉽게 모니터링할 수 있다.

 

결론적으로 볼트론을 통한 BEMS 구축을 맛보기 하거나, 공부하거나, 소규모 시스템을 구축하는 경우라면 ZMQ를 사용하는 것이 적절하고 대규모 시스템을 염두하고 있거나 좀 더 확장성 있는 시스템을 구축하고 싶다면 RMQ를 사용하는 것이 적절하다.

728x90

'IT 일반' 카테고리의 다른 글

DNP3 프로토콜에 대한 고찰  (0) 2023.08.18
BACnet에 대한 고찰  (0) 2023.08.15
PDF 문서와 악성코드 문제  (0) 2023.03.03
오픈 소스 ERP에 대한 가능성 검토  (1) 2019.05.14
오픈소스 리포팅 도구 살펴보기  (0) 2019.03.25
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
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
글 보관함