오늘 우리는 RabbitMQ 덕분에 매우 간단하게 관리되는 가장 무거운 처리를 비동기식으로 실행하여 페이지 로딩 시간을 단축하는 방법을 볼 것입니다.

애플리케이션이나 웹사이트의 안정성과 속도는 확실히 사용자에게 가장 중요한 요소 중 하나입니다. 너무 오래 걸려 첫 페이지를 보기도 전에 사이트를 떠나지 않은 사람이 있습니까?

RabbitMQ란?

RabbitMQ는 생산자와 소비자 간의 효율적인 통신을 위한 중개자 역할을 하는 확장 가능한 오픈 소스 분산 메시징 브로커입니다.

RabbitMQ는 애플리케이션 계층 메시징 프로토콜 AMQP를 구현합니다. 이 프로토콜은 브로커에서 생산자로, 소비자에서 생산자로 메시지 수신 확인을 통해 전달 보장과 함께 비동기 메시지 통신에 중점을 둡니다.

RabbitHQ는 어떻게 작동합니까?

간소화된 방식으로 RabbitMQ는 소비 애플리케이션이 메시지를 받아 처리할 때까지 생산자가 보낸 메시지를 저장할 대기열을 정의합니다. 이를 통해 시스템이 메시지를 통해 서로 통신하는 독립적인 모듈로 분할되는 분산 시스템을 설계하고 구현할 수 있습니다.

모든 커뮤니케이션과 마찬가지로 생산자, 메시지 및 수신자가 필요합니다. 케이크 중앙에는 메시지가 수신자를 기다리는 곳인 RabbitMQ가 있습니다.

메시지 교환을 나타내는 교환 유형을 알면 작동 방식을 더 잘 이해할 수 있습니다.

교환 유형

교환을 통해 RabbitMQ를 통해 메시지를 보낼 때마다 대기열로 직접 보내지 않습니다. 다른 시스템이 읽을 수 있도록 교환기로 보내면 메시지를 다른 대기열로 전달하는 역할을 합니다.

이미지 제공: CloudAQMP

교환 유형은 직접, 팬아웃, 주제 및 독자입니다.

직접 교환

생산자가 세 명의 소비자에게 구매 확인 메시지를 발행해야 한다고 가정합니다. 즉, 시스템은 구매를 위해 세 개의 다른 시스템과 통신해야 합니다.

RabbitMQ는 메시지를 각 대기열에 개별적으로 전송하므로 이러한 다른 시스템이 메시지를 직접 수신하도록 하는 추진력이 있습니다.

일반적으로 교환기는 메시지를 대기열로 전달하지만 우리는 메시지가 모든 대기열로 전송되는 것을 원하지 않는 경우가 많습니다. 따라서 교환 작업을 하기 위해 적용할 수 있는 몇 가지 조건이 있습니다.

  Linux에서 CPU를 확인하는 방법

따라서 한 명의 소비자에게만 메시지를 보낼 수 있습니다. 모든 사람에게 보내는 대신.

Binding Key: Queue를 Exchange에 연결하려면 커넥터와 같이 Queue와 Exchange 간의 관계인 Bind를 만들어야 합니다.

라우팅 키: 이 바인드에서 라우팅 키라는 요소를 만들 수도 있습니다. 즉, 메시지를 특정 대기열로 전달하는 키입니다.

라우팅 키 X, 라우팅 키 Y 및 라우팅 키 Z가 있는 경우 예를 들어 라우팅 키 Y가 있는 메시지는 대기열 Y를 통과하여 메시지를 수신하도록 정의한 소비자에게 직접 전달됩니다.

이러한 방식으로 교환기에 연결된 여러 대기열을 가질 수 있지만 동시에 라우팅 키를 사용하여 교환과 다른 관계를 가질 수도 있습니다.

팬아웃 교환

메시지가 교환기로 전송되면 연결된 모든 대기열로 전송됩니다. 따라서 팬아웃 교환에 연결된 10개의 대기열이 있는 경우 모든 대기열은 전송된 메시지를 수신합니다.

주제 교환

주제에 따라 메시지를 보낼 수 있는 가장 유연한 교환 중 하나입니다. 그리고 라우팅 키의 이름을 지정하는 방식에 따라 시스템 간의 규칙 및 관계 패턴을 생성할 수 있습니다.

예: 라우팅 키(x.*); 라우팅 키(*.z); 라우팅 키(*.y.*).

RabbitMQ의 AQMP란?

AMQP(Advanced Message Queuing Protocol)는 여러 애플리케이션 간의 메시지 전송을 정의하는 데 사용되는 개방형 메시징 프로토콜입니다. 비동기 전송을 허용한다는 점을 제외하면 유선 수준 프로토콜이라는 점에서 HTTP 및 TCP 프로토콜과 유사합니다.

RabbitMQ는 몇 가지 이유로 AMQP를 구현하기로 선택했습니다. 첫 번째는 이 프로토콜이 API를 정의하는 JMS와 달리 미들웨어의 표준으로 기술된다는 점이다.

Red Hat, Cisco Systems 및 Microsoft와 같은 대기업을 포함한 국제 컨소시엄이 이 AMQP 사양을 작성했습니다. 두 번째는 AMQP를 구현하는 모든 애플리케이션이 AMQP 브로커와 통신할 수 있도록 하는 이 프로토콜의 상호 운용성입니다.

AMQP는 RabbitMQ에서 사용하는 유일한 프로토콜이 아닙니다. 아래 이미지는 RabbitMQ에서 구현 및/또는 지원하는 모든 프로토콜, 언어 및 API를 나타냅니다.

RabbitMQ의 가장 큰 특징

RabbitMQ는 서로 다른 위치에서 비동기식으로 메시지를 통해 서로 다른 응용 프로그램을 통합할 수 있는 것 외에도 메시징 브로커 세계에서 매우 인기 있는 다른 기능을 제공합니다.

안정적인 스토리지

RabbitMQ는 메시지 전달을 보장할 수 있는 여러 기능을 통합합니다. 이 중에서 소비자가 메시지를 받을 수 없을 때 스토리지를 제공합니다. 이를 통해 소비자는 메시지 전달을 수락하여 메시지가 성공적으로 처리되었는지 확인할 수 있습니다.

  소셜 네트워크 식별 주의

처리가 실패하면 RabbitMQ는 메시지가 소비자의 다른 인스턴스에 의해 소비되거나 복구 시 처음에 실패한 동일한 소비자에 의해 다시 처리되도록 대기열에 메시지를 다시 넣을 수 있습니다.

RabbitMQ는 메시지 전달 순서도 보장합니다. 즉, RabbitMQ 대기열에 도착한 순서대로 소비됩니다.

클러스터 생성

RabbitMQ는 초당 수천 개의 메시지를 처리하여 뛰어난 성능을 제공하지만 때로는 애플리케이션 성능에 영향을 주지 않고 더 많은 수의 메시지를 처리할 수 있어야 합니다.

이를 위해 RabbitMQ는 생산자와 소비자 모두에게 투명한 솔루션을 수평으로 확장하는 클러스터 생성을 허용합니다.

고가용성 대기열

RabbitMQ에서 큐는 클러스터의 여러 노드에 걸쳐 복제될 수 있으므로 노드 장애 또는 다운타임이 발생하는 경우에도 브로커가 생산자로부터 메시지를 계속 수신하고 적절한 소비자에게 전달할 수 있습니다.

유연한 라우팅

RabbitMQ에서는 바인딩을 통해 exchange와 queue 간에 메시지를 라우팅하기 위해 특정 패턴을 따르더라도 유연한 라우팅 규칙을 정의할 수 있습니다.

다중 프로토콜 지원

AMQP 프로토콜 지원 외에도 RabbitMQ는 플러그인을 통해 STOMP, MQTT 및 HTTP를 지원합니다. 또한 각 브로커 구성 요소에 대한 인증 및 액세스 제어 메커니즘을 통합합니다.

RabbitMQ의 실제 사용 사례

RabbitMQ의 가장 중요한 사용 사례는 응용 프로그램 간의 비동기성 보장, 응용 프로그램 간의 결합 감소, 경고 배포 및 백그라운드에서 작업 대기열 제어를 가능하게 하는 것입니다.

그러나 RabbitMQ의 실제 사용 사례는 유통 및 송장 발행과 같은 다른 부문의 시스템으로 판매 주문을 조작, 처리 및 전달하는 데 사용되는 전자 상거래에 있습니다.

주문을 처리할 때 판매 메시지를 유통 센터 및 송장 영역으로 전달할 수 있습니다. 이 방식에서는 모든 것이 수평적으로 작동하며 메시지 전송을 위한 비동기식 패턴을 따르지만 여러 대기열에 작업을 전송하는 것이 가능한 경우가 많습니다.

앞의 예에 따라 이 기능은 고객이 구매를 하고 제품의 유통, 운송 및 송장을 준비해야 할 때 매우 유용할 수 있습니다.

그리고 이러한 각 섹터는 서로 다른 시스템이므로 RabbitMQ의 목표는 이러한 모든 메시지를 해당 시스템으로 전달하는 것입니다.

토끼 MQ 대안:

RabbitMQ는 보이는 것보다 훨씬 간단하며 다음과 같은 몇 가지 대안이 있습니다.

#1. IronMQ

IronMQ는 초고속 메시지 대기열 소프트웨어입니다. 가용성이 높고 디자인이 내구성이 있으며 일회성 배송이 바람직합니다. IronMQ는 최신 애플리케이션 아키텍처를 위한 가장 강력한 클라우드 네이티브 솔루션입니다.

  Gmail에서 비밀 모드를 사용하는 방법

푸시 대기열, 풀 대기열 및 긴 폴링을 지원하여 폴링 요청을 더 오래 열어둡니다. 또한 여러 고가용성 데이터 센터를 사용할 수 있어 확장성이 용이합니다.

클라우드, 공유 또는 전용 하드웨어 또는 온프레미스에 배포할 수 있습니다. 또한 읽기 쉬운 문서가 포함된 다양한 클라이언트 라이브러리가 있습니다.

#2. 아파치 카프카

Kafka는 분산 이벤트 스트리밍 분야에서 강력한 존재감을 지닌 플랫폼입니다. 핵심적으로 Kafka는 복제되고 분산된 영구 커밋 로그로 설계되었습니다.

가장 큰 유용성은 이벤트 기반 전력 마이크로 서비스 또는 대규모 스트림 처리 응용 프로그램에 있으며, 내결함성과 고가용성을 위해 클러스터 내에서 비동기식으로 이벤트를 자동으로 복제합니다.

#삼. 아파치 ActiveMQ

ActiveMQ는 Java 기반 다중 프로토콜 메시지 브로커입니다. 이를 통해 응용 프로그램 계층에서 AMQP 메시지 대기열 프로토콜을 사용하여 응용 프로그램을 통합할 수 있습니다.

JMS(네이티브 Java) 및 Stomp(PHP 애플리케이션에서 사용할 수 있음)와 같은 통합을 위한 여러 프로토콜을 구현합니다.

또한 Amazon에는 Amazon MQ라는 “관리형” 버전이 있어 서비스를 훨씬 쉽게 사용할 수 있습니다.

마지막 말

메시징 브로커는 전통적으로 조직의 아키텍처 내에서 중요한 부분이었습니다. 그러나 다양한 채널을 통해 회사 시스템에 진입하는 사용자가 증가함에 따라 낮은 비용으로 수평적으로 확장할 수 있는 제품이 필요합니다. 초당 많은 수의 메시지를 처리할 수 있습니다.

이것은 RabbitMQ와 같은 차세대 브로커가 고객에게 높은 수준의 가용성, 안정성, 상호 운용성 및 성능을 제공하고자 하는 최신 애플리케이션에서 점점 더 관련성이 높아지고 있는 곳입니다.

애플리케이션을 위한 안정적인 RabbitMQ 호스팅 플랫폼을 탐색할 수도 있습니다.

x