Go로 만들어진 메시지 큐 시스템이 만들어졌다.
최근에 설치가 편리하고 사용하기 편한게 없을까, 그리고 기존에 있던 것들보다 가벼운 것은 없을까 하는 생각에 찾아 보기 시작, Nats를 발견했다.
Nats란?
NATS는 현대 분산 시스템을 구동하는 연결 기술입니다.
연결 기술은 분산 시스템에서 공통적인 패턴을 구동하는 메시지의 주소 지정, 발견 및 교환을 담당합니다.
즉, 질문을 하고 답하고, 서비스/마이크로서비스라고 하며, 진술을 만들고 처리하고, 스트림 처리를 담당합니다.
현대 분산 시스템이 직면한 과제 현대 분산 시스템은 끊임없이 증가하는 하이퍼 연결 이동 부품과 이들이 생성하는 추가 데이터로 정의됩니다.
이들은 서비스와 스트림을 모두 사용하여 비즈니스 가치를 추진합니다.
이들은 또한 위치 독립성과 이동성으로 정의되고 있으며, 우리가 일반적으로 프런트 엔드 기술로 인식하는 것에 국한되지 않습니다.
오늘날의 시스템과 백엔드 프로세스, 마이크로서비스 및 스트림 처리도 위치 독립성과 이동성을 요구받으며, 동시에 보안을 유지해야 합니다.
이러한 최신 시스템은 모바일 프런트 엔드를 상당히 정적인 백엔드에 연결하는 데 사용된 기술에 대한 과제를 제시합니다.
이러한 기존 기술은 일반적으로 호스트 이름(DNS) 또는 IP 및 포트를 통해 주소 지정 및 검색을 관리하고 1:1 통신 패턴을 활용하며 인증 및 권한 부여를 위한 여러 가지 보안 패턴을 사용합니다.
기존 기술은 완벽하지는 않지만 많은 상황에서 충분히 좋았지만 시대는 빠르게 변하고 있습니다.
마이크로서비스, 기능 및 스트림 처리가 엣지로 이동하라는 요청을 받으면서 이러한 기술과 그들이 만드는 가정은 도전을 받고 있습니다.
장단점 비교 (NATS vs RabbitMQ)
비교 항목 | NATS | RabbitMQ |
프로토콜 | - 자체 TCP 프로토콜(‘NATS 프로토콜’), 간단한 텍스트 기반 | - AMQP 표준 (0-9-1), MQTT, STOMP 등 플러그인으로 지원 |
메시지 모델 | - 단순한 Pub/Sub + Request/Reply - (JetStream: 영구저장 가능) |
- 큐 중심: Fanout, Direct, Topic, Header 등 라우팅 키 - 우선순위 큐, 지연 큐 등 다양한 형태 |
운영 난이도 & 가벼움 | - 설치가 매우 간단, 설정 파일도 가벼움 - JetStream 시 다소 복잡해짐 |
- Erlang/OTP 기반으로 안정성이 높지만 설정, 플러그인 관리가 필요한 편 |
성능 (TPS, Latency) | - 매우 빠른 전송 (수 ms 미만 지연) | - 메시지 사이즈와 라우팅 복잡성에 따라 달라짐 - 고성능 튜닝 시 준수하나, NATS보다 지연이 큰 편 |
내구성 & QoS | - 기본은 휘발성, JetStream 도입 시 영구저장 가능 - Acknowledgement 모드 등 지원 |
- Persistent Queue로 영구저장 지원 - 다양한 Ack/Nack 모드 및 재전달 정책(QoS) |
복잡한 라우팅(Routing) | - 주로 Subject/Topic으로 단순히 Pub/Sub | - AMQP 교환기(Exchange), 바인딩(Binding)을 활용한 유연한 라우팅 |
스케일링(Scale-out) |
- Leaf Nodes, Super-Cluster 등 분산 구성 가능 - 일반적으로 빠르고 간단 |
- 클러스터링 시 Erlang 노드 동기화 등이 다소 복잡 - 고가용성(HA) 설정 시 관리 필요 |
사용 사례 | - IoT, 마이크로서비스 간 이벤트 - 빠른 알림/실시간 통신 |
- 전통적 MQ(주문처리, 금융 결제 흐름 관리), 엔터프라이즈 통합(EAI) - 복잡한 라우팅/우선순위가 필요한 곳 |
성능분석
https://docs.nats.io/using-nats/nats-tools/nats_cli/natsbench
nats bench | NATS Docs
Using NATSNATS Toolsnatsnats bench NATS is fast and lightweight and places a priority on performance. the nats CLI tool can, amongst many other things, be used for running benchmarks and measuring performance of your target NATS service infrastructure. In
docs.nats.io
설치 및 실행
https://docs.nats.io/running-a-nats-service/clients
NATS Server Clients | NATS Docs
A NATS client is an application making a connection to one of the nats servers pointed to by its connection URL, and uses a credential file to authenticate and indicate its authorization to the server and the whole NATS infrastructure. The nats-server does
docs.nats.io
주저말고 실행하세요
댓글