기술나눔

기초 구축 100일 중 17일차 - 메시지 큐 시작하기

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

기초 구축 100일 중 17일차 - 메시지 큐 시작하기

기본 개념

메시지 대기열이란 무엇입니까?

MQ:메시지 큐

메시지를 저장하는 대기열입니다. 메시지를 소비할 때 메시지는 순서대로 소비됩니다(큐 선입선출).

메시징에 관련된 두 당사자를 이라고 합니다. 생산자 그리고소비자 , 생산자는 메시지 전송을 담당하고 소비자는 메시지 처리를 담당합니다.

메시지 대기열의 용도는 무엇입니까?

세 가지 친숙한 이점

  • 비동기 처리: 메시지 큐를 통해 비동기 처리가 구현되며 해당 메시지를 메시지 큐로 보낸 후 결과가 즉시 반환되므로 응답 시간이 단축되고 사용자 경험이 향상됩니다. 그 후 시스템은 메시지를 소비합니다.
  • 피크 클리핑/전류 제한: 먼저 짧은 시간 내에 높은 동시성으로 생성된 트랜잭션 메시지를 메시지 큐에 저장한 다음 백엔드 서비스가 자체 기능에 따라 이러한 메시지를 천천히 소비하므로 백엔드가 직접적으로 패배하는 것을 방지합니다. -서비스 종료.
  • 시스템 결합 감소: 모듈 간에 직접적인 호출이 없으므로 모듈을 추가하거나 수정해도 다른 모듈에 미치는 영향이 줄어듭니다.

엔터프라이즈 애플리케이션 시나리오

  • 분산 트랜잭션 구현: 분산 트랜잭션을 위한 솔루션 중 하나는 대부분의 MQ에서 지원되는 MQ 트랜잭션입니다.트랜잭션을 통해 이벤트 스트리밍 애플리케이션은 다음을 수행할 수 있습니다.소비하다, 가공하다, 생산하다전체 메시지 프로세스는 원자성 작업으로 정의됩니다.
  • 순서 보장: 데이터 순서에 대한 엄격한 요구 사항이 있는 시나리오에 적합하며 대부분의 MQ에서 지원됩니다.
  • 지연/타이밍 처리: 메시지는 전송 직후에 소비되지 않고, 지정된 시간 이후에 소비됩니다.
  • 데이터 스트림 처리: 비즈니스 로그, 모니터링 데이터, 사용자 행동 등과 같이 분산 시스템에서 생성되는 대규모 데이터 스트림의 경우 메시지 큐는 이러한 데이터를 실시간 또는 일괄 수집하여 빅 데이터 처리 엔진으로 가져올 수 있습니다. 효율적인 데이터 처리를 달성합니다. 스트림 관리 및 처리.

메시지 대기열을 사용하면 어떤 문제가 발생합니까?

시스템 가용성 감소: 시스템 가용성이 어느 정도 감소합니다. 왜 이런 말을 합니까? MQ에 가입하기 전에는 메시지 손실이나 MQ 끊김 등을 걱정할 필요가 없습니다. 하지만 MQ를 도입한 후에는 생각해 볼 필요가 있습니다!

시스템 복잡성 증가: MQ에 가입한 후에는 메시지가 반복적으로 소비되지 않는지 확인하고, 메시지 손실을 처리하고, 메시지 전달 순서를 확인하는 등의 문제를 해결해야 합니다!

일관성 문제: 위에서 메시지 큐가 비동기식 구현을 달성할 수 있고 메시지 큐가 가져온 비동기식은 실제로 시스템 응답 속도를 향상시킬 수 있다고 언급했습니다. 하지만 메시지의 실제 소비자가 메시지를 올바르게 소비하지 않으면 어떻게 될까요? 이로 인해 데이터 불일치가 발생합니다!

공통 메시지 대기열

카프카

Kafka는 LinkedIn의 오픈 소스 버전입니다.분산 스트리밍 플랫폼는 Apache의 최상위 프로젝트가 되었으며 초기에는 대용량 로그를 처리하는 데 사용되었으며 나중에는 모든 기능을 갖춘 고성능 메시지 대기열로 발전했습니다.

스트리밍 플랫폼에는 세 가지 주요 기능이 있습니다.

  1. 메시지 대기열: 메시지 스트림을 게시하고 구독합니다. 이 기능은 메시지 대기열과 유사하므로 Kafka도 메시지 대기열로 분류됩니다.
  2. 기록 메시지 스트림의 내결함성 영구 저장: Kafka는 메시지를 디스크에 유지하여 메시지 손실 위험을 효과적으로 방지합니다.
  3. 스트리밍 처리 플랫폼: 메시지가 게시될 때 처리하기 위해 Kafka는 완전한 스트림 처리 라이브러리를 제공합니다.

로켓MQ

RocketMQ는 Alibaba가 오픈소스로 제공하는 클라우드 기반의 "메시지, 이벤트, 스트림" 실시간 데이터 처리 플랫폼으로 Kafka를 기반으로 하며 최고 수준의 Apache 프로젝트가 되었습니다.

RocketMQ의 핵심 기능(RocketMQ 공식 웹사이트에서 발췌):

  • 클라우드 네이티브: 클라우드와 함께 탄생, 클라우드와 함께 성장, 무제한의 탄력적 확장, K8s 친화적
  • 높은 처리량: 마이크로서비스 및 빅 데이터 시나리오를 모두 충족하여 1000조 수준의 처리량을 보장합니다.
  • 스트림 처리: 가볍고 확장성이 뛰어나며 성능이 뛰어나고 기능이 풍부한 스트림 컴퓨팅 엔진을 제공합니다.
  • 금융 등급: 금융 등급의 안정성으로 핵심 거래 링크에 널리 사용됩니다.
  • 미니멀리스트 아키텍처: 외부 종속성 없음, 공유 없음 아키텍처.
  • 친환경성: 마이크로서비스, 실시간 컴퓨팅, 데이터 레이크 등 주변 생태계와 원활하게 연결됩니다.

래빗MQ

RocketMQ는 Alibaba가 오픈소스로 제공하는 클라우드 기반의 "메시지, 이벤트, 스트림" 실시간 데이터 처리 플랫폼으로 Kafka를 기반으로 하며 최고 수준의 Apache 프로젝트가 되었습니다.

RocketMQ의 핵심 기능(RocketMQ 공식 웹사이트에서 발췌):

  • 클라우드 네이티브: 클라우드와 함께 탄생, 클라우드와 함께 성장, 무제한의 탄력적 확장, K8s 친화적
  • 높은 처리량: 마이크로서비스 및 빅 데이터 시나리오를 모두 충족하여 1000조 수준의 처리량을 보장합니다.
  • 스트림 처리: 가볍고 확장성이 뛰어나며 성능이 뛰어나고 기능이 풍부한 스트림 컴퓨팅 엔진을 제공합니다.
  • 금융 등급: 금융 등급의 안정성으로 핵심 거래 링크에 널리 사용됩니다.
  • 미니멀리스트 아키텍처: 외부 종속성 없음, 공유 없음 아키텍처.
  • 친환경성: 마이크로서비스, 실시간 컴퓨팅, 데이터 레이크 등 주변 생태계와 원활하게 연결됩니다.

펄서

Pulsar는 원래 Yahoo에서 개발되었으며 최상위 Apache 프로젝트가 된 차세대 클라우드 기반 분산 메시지 흐름 플랫폼입니다.

Pulsar는 메시징, 스토리지 및 경량 기능 컴퓨팅을 통합하여 다중 테넌트, 영구 스토리지 및 다중 기계실 간 지역 데이터 복제를 지원하는 컴퓨팅 및 스토리지 분리 아키텍처 설계를 채택합니다. 강력한 일관성, 높은 처리량, 낮은 대기 시간을 제공합니다. , 확장성과 같은 스트리밍 데이터 저장 기능은 클라우드 네이티브 시대의 실시간 메시지 스트리밍 전송, 저장 및 컴퓨팅을 위한 최고의 솔루션으로 간주됩니다.

Pulsar의 주요 기능은 다음과 같습니다(공식 웹사이트에서 발췌):

  • 차세대 클라우드 기반 분산 메시지 흐름 플랫폼입니다.
  • Pulsar의 단일 인스턴스는 기본적으로 여러 클러스터를 지원하며 컴퓨터실 전체의 클러스터 간 메시지 복제를 원활하게 완료할 수 있습니다.
  • 매우 낮은 릴리스 대기 시간과 엔드투엔드 대기 시간.
  • 1백만 개가 넘는 주제로 원활하게 확장됩니다.
  • Java, Go, Python 및 C++를 지원하는 간단한 클라이언트 API입니다.
  • 주제에 대한 다양한 구독 모드(독점, 공유 및 장애 조치)
  • Apache BookKeeper가 제공하는 영구 메시지 저장 메커니즘을 통해 메시지 전달이 보장됩니다.
  • 경량 서버리스 컴퓨팅 프레임워크인 Pulsar Functions는 스트림 기반 데이터 처리를 구현합니다.
  • Pulsar Functions를 기반으로 하는 서버리스 커넥터 프레임워크인 Pulsar IO를 사용하면 Apache Pulsar 안팎으로 데이터를 더 쉽게 이동할 수 있습니다.
  • 계층형 스토리지는 데이터가 오래되면 핫 스토리지에서 콜드/장기 스토리지(예: S3, GCS)로 데이터를 오프로드할 수 있습니다.

위 MQ의 비교:

대비 방향요약
처리량10,000 수준 ActiveMQ 및 RabbitMQ(ActiveMQ 성능이 가장 낮음)의 처리량은 100,000 수준 또는 심지어 백만 수준 RocketMQ 및 Kafka보다 훨씬 낮습니다.
유효성 모두 고가용성을 달성할 수 있습니다. ActiveMQ와 RabbitMQ는 모두 고가용성을 달성하기 위해 마스터-슬레이브 아키텍처를 기반으로 합니다. RocketMQ는 분산 아키텍처를 기반으로 합니다. Kafka는 또한 하나의 데이터에 대한 여러 복사본을 포함하여 배포됩니다. 몇 대의 시스템이 다운되더라도 데이터 손실이나 가용성이 발생하지 않습니다.
적시RabbitMQ는 Erlang을 기반으로 개발되었으므로 강력한 동시성 기능, 매우 우수한 성능, 매우 낮은 대기 시간, 마이크로초 수준에 도달하고 다른 것들은 ms 수준입니다.
기능 지원Pulsar는 보다 포괄적인 기능을 갖추고 있으며 다중 테넌트, 다중 소비 모델 및 지속성 모드를 지원합니다. 차세대 클라우드 기반 분산 메시지 흐름 플랫폼입니다.
메시지 분실ActiveMQ와 RabbitMQ는 손실 가능성이 매우 낮으며 Kafka, RocketMQ, Pulsar는 이론적으로 손실 0을 달성할 수 있습니다.

요약하다:

  • RabbitMQ는 처리량 측면에서 Kafka, RocketMQ, Pulsar에 비해 약간 열등하지만 Erlang을 기반으로 개발되었기 때문에 강력한 동시성 기능, 매우 우수한 성능, 마이크로초 수준에 도달하는 매우 낮은 지연 시간을 갖추고 있습니다. 하지만 RabbitMQ는 Erlang을 기반으로 개발되었기 때문에 Erlang 소스코드 수준에서 연구와 커스터마이징을 할 수 있는 역량을 갖춘 국내 기업은 거의 없습니다. 비즈니스 시나리오의 동시성 요구 사항이 너무 높지 않은 경우(100,000 또는 1백만 수준) RabbitMQ가 이러한 메시지 대기열 중에서 첫 번째 선택이 될 수 있습니다.
  • RocketMQ 및 Pulsar는 강력한 일관성을 지원하며 메시지 일관성 요구 사항이 높은 시나리오에서 사용할 수 있습니다.
  • RocketMQ는 Alibaba에서 제작한 Java 오픈 소스 프로젝트로, 소스 코드를 직접 읽고 자사의 MQ를 사용자 정의할 수 있으며 Alibaba의 실제 비즈니스 시나리오에서 테스트되었습니다.
  • Kafka의 특징은 실제로 매우 분명합니다. 즉, 더 적은 수의 핵심 기능만 제공하지만 매우 높은 처리량, ms 수준의 대기 시간, 극도로 높은 가용성 및 안정성을 제공하며 배포를 임의로 확장할 수 있습니다. 동시에 Kafka는 초고속 처리량을 보장하기 위해 더 적은 수의 주제를 지원하는 것이 가장 좋습니다. Kafka의 유일한 단점은 메시지가 반복적으로 소비될 수 있다는 것인데, 이는 데이터 정확성에 아주 약간의 영향을 미칩니다. 빅데이터 및 로그 수집 분야에서는 이 작은 영향을 무시할 수 있지만, 이 기능은 당연히 빅데이터 실제에 적합합니다. - 시간 계산 및 로그 수집. 빅 데이터 분야의 실시간 컴퓨팅, 로그 수집 및 기타 시나리오라면 Kafka를 사용하는 것이 업계 표준이며 커뮤니티가 매우 활발하고 결코 음란물이 아닐 것입니다. 전 세계적으로 이 분야의 사실상 표준이 되었습니다.

기업 차원의 자체 개발 MQ에 대한 간단한 설문조사

Alibaba 자체 개발: RocketMQ, RabbitMQ

Tencent 자체 개발: TDMQ, CMQ

Baidu 자체 연구: 조사 예정

바이트 자체 연구: BMQ

Meituan 자체 개발: Mafma

Qunar.com에서 자체 개발: QMQ

JD.com 자체 개발: JMQ

다른 것들은 조사되어야 한다. .