Sitemap
디지털 세상을 만드는 아날로거

디지털 세상을 만드는 아날로거

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)
Press enter or click to view image in full size
  • NATS는 수십개 언어의 클라이언트를 제공한다. (Polyglot)

Get 디지털 세상을 만드는 아날로거’s stories in your inbox

Join Medium for free to get updates from this writer.

How?

  • NATS 서버, NATS 스트리밍, 언어별 클라이언트로 구성되어 있다.
  • 클라이언트로 사용 가능한 언어 및 플랫폼은 여기서 확인할 수 있다.

NATS 서버 설치/실행/설정 관리

NATS 프로토콜

  • 전통적인 메세징 시스템과는 달리 바이너리 메세지 포멧을 사용하지 않고, 텍스트 기반 프로토콜을 사용한다.
  • 텍스트 기반의 프로토콜을 사용하기 때문에 클라이언트를 구현하기 쉽다.
  • NATS 서버간의 통신을 위한 클러스터도 텍스트 기반의 프로토콜을 사용한다.
  • NATS 클러스터 프로토콜은 서버간의 구독 상태 공유, 메세지 전달, 클러스터 토폴로지 공유 등에 사용되고, 클라이언트 프로토콜과 유사하다.

애플리케이션 개발

  • NATS 메세징은 비동기, 동기, Pub-Sub, Request Reply, Queue Group방식이 있다.
  • Subject는 publisher와 subscriber가 서로를 찾기위한 이름이고 일반적인 텍스트 기반으로 wildcard를 지원한다.

서버 연결 구현

메세지 전송 구현

  • 간단한 문자열이나 구조화된 메세지를 서버에서 전송해서 구독자에게 전달하거나, 구독자의 응답을 받아서 사용할 수 있다.
  • 구독자의 응답을 요청하거나, 다른 subject로 리다이렉트할 수 있다.

메세지 구독 및 수신 구현

  • NATS 서버에서 보낸 메세지를 동기/비동기 방식으로 구독/수신하고, 응답할 수 있다.
  • 구독을 취소하거나, 메세지 개수에 따른 자동 수신 거부를 구현할 수 있다.
  • 큐로 부터 들어오는 메세지에 대한 처리를 간단하게 구현할 수 있다.
  • 구독자에 의해서 연결이나 구독이 갑자기 끊어졌을때, 캐쉬 또는 대기중인 메세지를 모두 처리하고 종료하도록 구현할 수 있다. 이와같은 메세지 손실을 방지하기 위한 매커니즘은 클라이언트에도 동일하게 제공된다.

기타 기능들

  • 스트리밍
  • MQTT
  • 서버의 상태를 받아볼 수 있다.
  • 연결 이벤트를 받아볼 수 있다.
  • 클러스터에 새로운 서버가 추가되거나 변경되는 내용을 받아볼 수 있다.
  • 서버에서 발생하는 에러를 받아볼 수 있다.
  • 메세지 개수나 크기로 들어오거나 대기중인 메세지를 제한할 수 있다.
  • Slow Consumer를 감지하거나, 유실되는 메세지를 확인할 수 있다.

References

--

--