InfraPlatform

(MSA) 마이크로 서비스간의 빠른 메시징 처리를 위한 NATS

IT오이시이 2022. 2. 18. 23:09
728x90

(MSA) 마이크로 서비스간의 빠른 메시징 처리를 위한 NATS

 

NATS를 사용한 경량의 클라우드 네이티브 메시징

 

#NATS #MSA #마이크로서비스 #고속메시징전송

 

NATS is a simple, secure and performant communications system for digital systems, services and devices.

■ NATS 란?

NATS 란 오픈소스 메세지 큐 서비스의 한 종류로 MSA 아키텍처에서 서비스간의 고속의 데이터 메시징 처리를 위해 활용되고 있다.  Kafka 와 같이 Streaming 기반의 전송으로 Pub/Sub 기반의 데이터 처리가 가능하다. 메인 서버는 Go 언어로 구현되어 있으며, 다양한 언어를 지원하는 클라이언트 라이브러리들을 지원한다. 

■ 분산 시스템의 직면한 과제

분산 시스템은 계속 많은 수의 연결을 통해 확장되고 있고, 시스템 간의 다양한 데이터들을 주고 받아야 한다. 특히 모바일, IOT와 같은 서비스 환경에서는 프론트 시스템과 백엔드 시스템간의 대량의 트레픽 처리에서 다수의 시스템간 통신 구간을 단순화 하고, 데이터 전송의 신뢰성을 보장하고, 고속으로 처리가 가능한 기술을 요구 하고 있다.

 NATS는 프론트엔드와 백엔드 간의 문제를 해결하기 위해 스트림처리와 에지간의 클러스터링을 통한 분산 메시징 기술을 통해서 M:N, 1:1, 통신이 가능하다. 기존의  DNS 주소와 포트 (Port)를 기반으로한 HTTP, gRPC를 통한 1:1 통신 뿐아니라  메시지 전송을 위한 로드밸런스(Load Balance), 로그 관리, 메시지 보안 등의 기능을 제공한다.

■ 구성 요소  

  • Messages : the unit of data exchange
  • Producers :  Send message to the NATS
  • Consumers : receive message from the server
  • Messaging Server : distributes messages from produver to consumers 
  • Subject : the name of separated data tag

■ 메시지 처리 방식

  • Publish - Subscribe : 기본적인 전송 방식, 주제 매칭으로 구독
  • Queueing  : 공유 그룹을 설정하여 공유 Queue를 설정하고 하나의 구독자를 배치 (Single Queue group - sigle Consumer, Multi-Queue groups - sigle consumer
  • Request - Reply : 1:1, 1: N 방식의 메시지 전송 

■ 주요 특징

  • 배포 및 운영이 쉽다.
  • 빠르다
  • 안죽는다
  • 극도로 가볍다
  • 다양한 서비스 품질을 지원한다.(At-least-once streaming)
  • 다양한 메세징 모델과 유스케이스를 지원한다.

■ 활용 분야

 NATS는 대규모 서버 및 클라우드 인스턴스에서 에지 게이트웨이 및 IoT 장치까지 어디에서나 활용된다.

  ▶ 클라우드 메시징
    - MSA기반 서비스(마이크로서비스, 서비스 메시)
    - 이벤트/데이터 스트리밍(감시, 분석, ML/AI)
  ▶ 명령 및 제어
    - IoT 및 에지컴퓨팅
    - 통신/ 센서 데이터 / 명령 및 제어

  ▶ 레거시 메시징 시스템 확장 또는 교체

■ 핵심 기술 비교

 
<Kafka, MQ, NATS 기술 비교>
 
 

NATS의 용량별 송수신 속도

 
Kafka의 용량별 송수신 속도

1) NATS의 pub-sub 토폴로지 와 Kafka의 파티션

 NATS는 메시지를 스트림 또는 주제(토픽)로 지정하는  전송하고,  소비자는 주제(토픽)과 일치하거나 또는 와일드카드를 사용하여 토픽을 구독한다.  

<NATS에서 게시자-주체-소비자 관계>

Kafka도 Pub/Sub 기능을 제공한다. 다만 파티션, 레코드 및 오프셋의 개념으로 대량 데이터를 병렬 처리 하여 전송의 병목과 경합을 줄이는 구조를 채택하고 있다. 

 

2) NATS의 pub-sub 토폴로지 와 Kafka의 파티션

NATS는  응용 프로그램 내결함성을 제공하고 워크로드 처리를 확장하는 데 사용할 수 있는 구독자 그룹 간에 메시지 전달의 균형을 선택적으로 조정할 수 있다. 구독자는 대기열 이름을 등록하여 대기열 구독을 생성한다. 

NATS는 메시지 수준까지 세분화된 소비자 확장성을 제공하지만 메시지 순서를 희생해야 합니다. 메시지는 2명 이상의 서로 다른 가입자에서 동시에 순서에 맞지 않게 처리될 수 있으므로 순서에 민감한 응용 프로그램에는 적합하지 않다. (참고: NATS Streaming은 이 문제를 해결하지만 앞서 언급한 것처럼 자체적으로 다른 제품이다.)

 

Kafka 소비자는 하나의 토픽에 여러개의 파티션으로 나누어 소비자 그룹이 포괄적으로 주제를 구독 한다. 

아래와 같이 카프카는 소비자 그룹과 파티션의 관계에서 1:N의 관계를 형성한다.  단 하나의 토픽에 여러개의 컨슈머 그룹을 연결하기도 한다. 소비 그룹은 소비자를 하나의 범주로 분류하는 논리적 개념이며 각 소비자는 하나의 소비 그룹에만 소속한다. 각 소비 그룹에는 고정된 이름이 있다. 소비하기 전에 소비자는 자신이 속한 소비 그룹의 이름을 지정해야 합니다. 이는 소비자 클라이언트 매개변수 group.id를 통해 수행 할 수 있다. 

 

 

■ 응용 패턴

1) 동기 요청-응답 패턴

전통적인 동기 요청-응답 패턴을 사용하여 서비스에 대한 HTTP 요청을 발행하고 응답을 받는 RESTful 서비스 호출을 할수 있다. 

 

2) 분산 수집 패턴

 분산 수집 패턴에서는 단일 게시자가 주제에 대한 메시지를 알 수 없는 구독자 수에게 동시에 게시하여 응답을 받을수 있다.

 

https://docs.nats.io/nats-concepts/overview/compare-nats

 

Compare NATS - NATS Docs

Kafka has a large number of integrations in its ecosystem, including stream processing (Storm, Samza, Flink), Hadoop, database (JDBC, Oracle Golden Gate), Search and Query (ElasticSearch, Hive), and a variety of logging and other integrations.

docs.nats.io

https://dzone.com/articles/benchmarking-nats-streaming-and-apache-kafka

 

Benchmarking NATS Streaming and Apache Kafka - DZone Performance

 

dzone.com

 

https://itnext.io/contrasting-nats-with-apache-kafka-1d3bdb9aa767

 

Contrasting NATS with Apache Kafka

TL;DR Kafka is an Event Streaming Platform, while NATS is a closer to a conventional Message Queue. Kafka is optimised around the unique…

itnext.io

 

728x90
반응형