NATS Messaging
2018-08-21 04:44:18
목차
NATS는 오픈소스 메시징 시스템(message-oriented middleware 로 부르기도 한다.)으로 Go 언어로 개발됐다. 서버와 인터페이스하기 위해서 수십 개의 언어를 위한 클라이언트 라이브러리를 제공한다. NATS는 성능,확장성,사용성을 최우선순위로 설계헸다.
NATS는 원래 Cloud Foundry에서 message control plane의 일종으로 개발했다. Ruby로 개발을 시작했는데, 이후 Go로 바꿨다. 소스코드는 Apache 2.0 라이센스를 따르고 있다. NATS는
- NATS Server
- NATS Streaming
- Client 라이브러리
- Connector framework
로 구성된다. Micro, Mainflux, Hemera와 같은 마이크로 서비스 프레임워크들이 NATS를 메시지백본으로 사용하고 있다. 분산시스템하에서는 수많은 서비스들이 데이터를 주고 받게 되는데, NATS를 이용해서 안전하고 빠르게 데이터를 주고 받을 수 있다.
NATS는 메시지 형태로 분할된 데이터의 교환을 허용하는 인프라로 흔히 "메시지 지향 미들웨어"라고 부른다.
단일 PC에서는 IPC를 이용해서 애플리케이션간 메시지를 주고 받을 수 있지만 분산 시스템에서는 네트워크를 통해서 메시지를 주고 받아야 한다. 대량의 애플리케이션이 실행되는 분산 시스템에서 메시지 교환은 매우 복잡한 작업이 될 수 있는데, NAST 같은 애플리케이션이 IPC와 같은 역할을 수행한다고 보면 된다.
NATS로 할 수 있는 일은 다음과 같다.
- 분산 / 확장 가능한 클라이언트/서버 애플리케이션을 구축한다.
- 실시간으로 데이터를 저장하고 배포 할 수 있다.
NATS는 아래의 영역에서 유용하게 사용 할 수 있다.
- 마이크로서비스
- 엣지 컴퓨팅
- IoT
- 모바일 서비스
- 쉽게 사용 할 수 있다.
- 높은 성능
- 매우 가볍다.
- 최대 한번 이상, 최소 한번 전송, 정확히 한번 전송 등 다양한 QoS 지원
- 이벤트 / 데이터 스트림 지원
- 30 개 이상의 프로그래밍 언어에 대한 클라이언트 라이브러리 지원
NATS는 PUB/SUB 방식의 전통적인 메시지 브로커와 용청/응답 방식의 메시징 모두를 지원한다. NATS는 메시지를 안전하게 송/수신하기 위해서 클러스터로 구성된
NATS Service 인프라를 구성할 수 있는
NATS 서버 애플리케이션을 제공한다.
NATS 서버 프로세스는 그 크기가 20MB 미만으로 가볍기 때문에, 저렵하고 쉽게 인프라를 구성 할 수 있다.
C, C#, Erlang, Go, Node.js, PHP, Python, Rust, Scala, Swift, Deno, Arduino 에서 사용할수 있는 클라이언트 라이브러리를 제공한다. 개발자들은 클라이언트 라이브러리를 이용해서 NATS에 연결, 메시지를 구독/발행/요청/응답 할 수 있다.
NATS는 메시지 품질을 관리하기 위한 QoS를 제공한다.
- 최대 한번(At most once QoS) : 구독자가 Topic에 연결된 상태라면 메시지가 수신되지만 그렇지 않은 경우 (나중에) 메시지를 수신 할 수 없다. 이것은 TCP/IP 수준의 QoS다.
- 한번이상(At-least) / 정확히 한번(exactly once) : 메시지에 대한 더 높은 품질이 필요하다면 한번 이상 및 정확히 한번 혹은 스트리밍, 흐름제어 키/값 저장소와 같은 기능을 이용해서 품질을 조절할 수 있다.
NATS는 엔터티 간 메시지 통신을 위한 4가지 주요 패턴을 지원한다.
- Subject based messaging
- Publish-Subscribe
- Request-Reply
- Queue groups
... 계속
... 계속
... 계속
... 계속
... 계속
... 계속