NATS
본 내용은 사내 CNCF 스터디 발표자료입니다. CNCF는 구글의 kubernetes를 중심으로 만들어진 클라우드 오픈소스 재단입니다. NATS는 CNCF 프로젝트 중 하나로, 간단하게 소개한 자료입니다.
What?
NATS 서버는 최신 분산 시스템 연결 기술로서 분산 시스템에서 공통 패턴을 구동하는 메시지의 주소 지정, 검색 및 교환을 담당한다. 기본적으로 높은 성능과 확장성, 간단한 사용성을 고려하여 설계되었다. NATS의 핵심 기능/특징은 다음과 같다.
- 배포 및 운영이 쉽다.
- 빠르다
- 안죽는다
- 극도로 가볍다
- 다양한 서비스 품질을 지원한다.(EX: at-least-once streaming)
- 다양한 메세징 모델과 유스케이스를 지원한다.
NATS 메세징 모델
- Publish Subscribe
- Request Reply
- Queueing
NATS 기능
- pub-sub
- 서버 클러스터 구성할 수 있다.
- 자동으로 Subscriber들의 연결을 관리한다.
- 서버 성능에 영향이 없는 텍스트 기반 프로토콜을 지원한다.
- 다양한 QoS 지원(at-most-once, at-least-once)
- NATS Streaming을 사용해서 영구적으로 구독을 유지할 수 있다.
- NATS Streaming을 사용해서 메세지 이벤트들을 기록/유지할 수 있다.
- 가장 마지막 또는 초기의 메세지에서 구독을 시작할 수 있다.
Who?
CNCF의 프로젝트이고, Synadia 팀 멤버들에 의해서 만들어졌다.
Where?
- Tesla, OpenTable, Ericsson, HTC, Siemens, VMWare, Pivotal, GE, Biadu, CloudFoundry, Siemens 등 전세계적으로 수천개의 기업에서 사용 중이다.
- Synadia팀은 NGS라고 불리는 글로벌 커뮤니케이션 시스템을 운영하고 있고, 전세계 누구나 무료 또는 유료로 이용이 가능하다.
When?
- Cloud native application, IoT messaging, MSA, 모바일앱 등에 적용될 수 있다.
- NATS와 연동 가능한 툴이나 라이브러리는 여기서 확인할 수 있다.
Why?
- NATS는 아주 쉽게 시스템에 적용된다. (Simplicity)
- NATS는 메세지 송수신에서 최고의 throughput을 자랑한다. (Perfomance)
- NATS는 수십개 언어의 클라이언트를 제공한다. (Polyglot)
Get 디지털 세상을 만드는 아날로거’s stories in your inbox
Join Medium for free to get updates from this writer.
How?
- NATS 서버, NATS 스트리밍, 언어별 클라이언트로 구성되어 있다.
- 클라이언트로 사용 가능한 언어 및 플랫폼은 여기서 확인할 수 있다.
NATS 서버 설치/실행/설정 관리
- NATS 서버를 설치해서 아주 쉽게 실행할 수 있다.
- NATS 서버 보안, 로깅, 모니터링, 클러스터 설정 등은 CLI 또는 설정 파일에서 할 수 있다.
- NATS의 전반적인 통계 데이터는 별도의 툴(nats-top)을 사용해서 모니터링할 수 있다.
- NATS 서버의 자동 Slow Consumer 관리는 여기서 설정 및 관리할 수 있다.
NATS 프로토콜
- 전통적인 메세징 시스템과는 달리 바이너리 메세지 포멧을 사용하지 않고, 텍스트 기반 프로토콜을 사용한다.
- 텍스트 기반의 프로토콜을 사용하기 때문에 클라이언트를 구현하기 쉽다.
- NATS 서버간의 통신을 위한 클러스터도 텍스트 기반의 프로토콜을 사용한다.
- NATS 클러스터 프로토콜은 서버간의 구독 상태 공유, 메세지 전달, 클러스터 토폴로지 공유 등에 사용되고, 클라이언트 프로토콜과 유사하다.
애플리케이션 개발
- NATS 메세징은 비동기, 동기, Pub-Sub, Request Reply, Queue Group방식이 있다.
- Subject는 publisher와 subscriber가 서로를 찾기위한 이름이고 일반적인 텍스트 기반으로 wildcard를 지원한다.
서버 연결 구현
- 언어별 NATS 서버와의 연결/재연결 및 연결 설정은 각 언어별로 몇줄의 코드로 작성할 수 있다.
메세지 전송 구현
- 간단한 문자열이나 구조화된 메세지를 서버에서 전송해서 구독자에게 전달하거나, 구독자의 응답을 받아서 사용할 수 있다.
- 구독자의 응답을 요청하거나, 다른 subject로 리다이렉트할 수 있다.
메세지 구독 및 수신 구현
- NATS 서버에서 보낸 메세지를 동기/비동기 방식으로 구독/수신하고, 응답할 수 있다.
- 구독을 취소하거나, 메세지 개수에 따른 자동 수신 거부를 구현할 수 있다.
- 큐로 부터 들어오는 메세지에 대한 처리를 간단하게 구현할 수 있다.
- 구독자에 의해서 연결이나 구독이 갑자기 끊어졌을때, 캐쉬 또는 대기중인 메세지를 모두 처리하고 종료하도록 구현할 수 있다. 이와같은 메세지 손실을 방지하기 위한 매커니즘은 클라이언트에도 동일하게 제공된다.
기타 기능들
- 스트리밍
- MQTT
- 서버의 상태를 받아볼 수 있다.
- 연결 이벤트를 받아볼 수 있다.
- 클러스터에 새로운 서버가 추가되거나 변경되는 내용을 받아볼 수 있다.
- 서버에서 발생하는 에러를 받아볼 수 있다.
- 메세지 개수나 크기로 들어오거나 대기중인 메세지를 제한할 수 있다.
- Slow Consumer를 감지하거나, 유실되는 메세지를 확인할 수 있다.






