메시지 대기열의 고가용성을 어떻게 보장합니까?
메시지 큐는 동시성이 높은 시나리오에서 필수적인 기술입니다. 이를 사용함에 따라 프로덕션 환경에는 다음과 같은 많은 문제가 있습니다. 메시지 큐의 고가용성을 달성하는 방법은 무엇입니까?
시나리오에는 다양한 유형의 미들웨어가 있습니다. 여기서는 분석 및 처리를 위해 일반적으로 사용되는 미들웨어를 준비합니다.
1. RabbitMQ의 고가용성
RabbitMQ는 마스터-슬레이브(비분산) 고가용성을 기반으로 하기 때문에 비교적 대표적인 것입니다. 첫 번째 유형의 고가용성을 달성하는 방법을 RabbitMQ를 예로 들어 설명하겠습니다. MQ의 달성.
RabbitMQ에는 독립형 모드, 일반 클러스터 모드, 미러 클러스터 모드의 세 가지 모드가 있습니다.
싱글 플레이어 모드
싱글 플레이어 모드는 데모 수준이며 일반적으로 재미를 위해 로컬에서 시작하며 프로덕션을 위해 독립 실행형 모드를 사용하는 사람은 없습니다.
일반 클러스터 모드(고가용성 없음)
일반 클러스터 모드는 각 시스템마다 하나씩 여러 시스템에서 여러 RabbitMQ 인스턴스를 시작하는 것을 의미합니다. 생성한 큐는 하나의 RabbitMQ 인스턴스에만 배치되지만 각 인스턴스는 큐의 메타데이터를 동기화합니다. (메타데이터는 큐의 일부 구성 정보라고 생각할 수 있습니다. 메타데이터를 통해 큐가 있는 인스턴스를 찾을 수 있습니다.) .
소비할 때 실제로 다른 인스턴스에 연결된 경우 해당 인스턴스는 대기열이 있는 인스턴스에서 데이터를 가져옵니다.
이 방법은 정말 번거롭고 별로 좋지 않습니다. 소위 배포를 달성하지 못하고 단지 일반적인 클러스터입니다. 이로 인해 소비자는 매번 인스턴스에 무작위로 연결하여 데이터를 가져오거나, 소비자가 대기열이 있는 인스턴스에 고정적으로 연결하여 데이터를 소비하게 되고, 후자는 데이터를 가져오는 오버헤드가 발생하게 됩니다. 단일 인스턴스 성능 병목 현상.
그리고 대기열을 넣은 인스턴스가 다운되면 다른 인스턴스가 해당 인스턴스에서 가져올 수 없습니다. 메시지 지속성을 활성화하고 RabbitMQ가 메시지를 저장하도록 하면 이 인스턴스를 기다려야 할 수 있습니다. 복원된 후 이 대기열에서 계속 데이터를 가져올 수 있습니다.
이 문제는 더 당황스럽습니다. 이 솔루션은 주로 처리량을 향상시키는 것, 즉 클러스터의 여러 노드가 특정 대기열의 읽기 및 쓰기 작업을 제공할 수 있도록 하는 것입니다.
미러 클러스터 모드(고가용성)
이 모드는 소위 RabbitMQ의 고가용성 모드입니다. 일반 클러스터 모드와 다른 점은 미러 클러스터 모드에서는 대기열의 메타데이터나 메시지에 관계없이 생성한 대기열이 여러 인스턴스에 존재한다는 것입니다. 즉, 각 RabbitMQ 노드에는 이 대기열의 완전한 복사본이 있습니다. 미러링은 대기열의 모든 데이터를 포함하는 것을 의미합니다. 그러면 대기열에 메시지를 쓸 때마다 메시지가 여러 인스턴스의 대기열에 자동으로 동기화됩니다.
이 미러 클러스터 모드를 활성화하는 방법은 무엇입니까? 실제로 RabbitMQ에는 백그라운드에 정책을 추가하는 좋은 관리 콘솔이 있습니다. 이 정책을 지정하면 데이터를 모든 노드에 동기화하도록 요구할 수 있습니다. 노드가 대기열을 다시 생성할 때 이 전략을 적용하면 데이터가 다른 노드에 자동으로 동기화됩니다.
이 경우 장점은 머신 중 하나가 다운되더라도 괜찮다는 것입니다. 다른 머신(노드)에는 여전히 이 대기열의 전체 데이터가 포함되어 있으며 다른 소비자는 다른 노드로 이동하여 데이터를 사용할 수 있습니다.
단점은 첫째, 성능 오버헤드가 너무 높다는 점입니다. 메시지를 모든 시스템에 동기화해야 하므로 네트워크 대역폭에 대한 부담과 소비가 커집니다.
둘째, 이러한 게임이 배포되지 않으면 확장성이 없습니다. 대기열의 로드가 너무 많아 시스템을 추가하면 새 시스템에도 대기열의 모든 데이터가 포함됩니다.
2. Kafka의 고가용성
Kafka의 기본 아키텍처 이해: 여러 브로커로 구성되며, 각 브로커는 주제를 생성하는 노드이며, 이 주제는 여러 파티션으로 나눌 수 있습니다. 서로 다른 브로커에 존재할 수 있으며 각 파티션은 데이터의 일부를 저장합니다.
이것은 자연스러운 분산 메시지 대기열입니다. 즉, 주제의 데이터가 여러 시스템에 분산되어 있고 각 시스템이 데이터의 일부를 저장한다는 의미입니다.
사실 RabbitMQ 등은 분산된 메시지 대기열이 아닙니다. 그들은 단지 일부 클러스터링 및 HA(고가용성, 고가용성) 메커니즘을 제공할 뿐입니다. 왜냐하면 어떻게 플레이하든 RabbitMQ는 다음과 같은 데이터이기 때문입니다. 대기열은 미러 클러스터 아래의 한 노드에 배치되며 각 노드는 대기열의 전체 데이터도 저장합니다.
Kafka 0.8 이전에는 HA 메커니즘이 없었습니다. 브로커가 다운되면 해당 브로커의 파티션은 쓸모가 없으며 고가용성이 전혀 없었습니다.
예를 들어, 주제를 생성하고 파티션 수를 3개 머신에 각각 3개로 지정한다고 가정합니다. 그러나 두 번째 머신이 다운되면 이 주제에 대한 데이터의 1/3이 손실되므로 가용성이 높을 수 없습니다.
Kafka 0.8 이상에서는 복제( 복제본) ) 복사 메커니즘. 각 파티션의 데이터는 다른 시스템과 동기화되어 자체 다중 복제본을 형성합니다. 모든 복제본은 리더를 선택하고 생산 및 소비는 이 리더를 처리하며 다른 복제본은 팔로어가 됩니다. 글을 쓸 때 리더는 모든 팔로워에게 데이터를 동기화할 책임이 있습니다. 읽을 때는 리더의 데이터를 직접 읽으세요. 리더만 읽고 쓸 수 있나요?
매우 간단합니다. 각 팔로어를 마음대로 읽고 쓸 수 있다면 데이터 일관성 문제를 처리해야 합니다. 시스템 복잡도가 너무 높아 문제가 발생하기 쉽습니다. Kafka는 내결함성을 향상시키기 위해 파티션의 모든 복제본을 다른 시스템에 균등하게 배포합니다.
이렇게 하면 소위 고가용성이 있습니다. 누군가 브로커가 다운되었지만 해당 브로커의 파티션은 다른 시스템에 복제되었습니다. 다운된 브로커에 특정 파티션의 리더가 있는 경우 팔로어 중에서 새 리더가 다시 선출되며 모든 사람은 계속해서 새 리더를 읽고 쓸 수 있습니다. 이를 고가용성이라고 합니다.
데이터를 쓸 때 프로듀서가 리더에 쓰고, 리더가 로컬 디스크에 데이터를 쓰고, 다른 팔로워가 주도적으로 리더에서 데이터를 가져옵니다. 모든 팔로어가 데이터를 동기화하면 리더가 모든 팔로어로부터 ack를 받은 후 성공적으로 작성된 메시지를 생산자에게 반환합니다. (물론 이것은 모드 중 하나일 뿐이며 이 동작은 적절하게 조정될 수 있습니다)
소비 시 리더에서만 읽을 수 있지만 모든 팔로어가 메시지를 동기화한 경우에만 가능합니다. , ack가 성공적으로 반환되면 소비자가 이 메시지를 읽게 됩니다.
관련 PHP 지식을 더 보려면 php 튜토리얼을 방문하세요!
위 내용은 메시지 대기열의 고가용성을 어떻게 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java Websocket 개발 실습: 메시지 큐 기능 구현 방법 소개: 인터넷의 급속한 발전으로 인해 실시간 통신이 점점 더 중요해지고 있습니다. 많은 웹 애플리케이션에서는 실시간 메시징을 통한 실시간 업데이트 및 알림 기능이 필요합니다. JavaWebsocket은 웹 애플리케이션에서 실시간 통신을 가능하게 하는 기술입니다. 이 기사에서는 JavaWebsocket을 사용하여 메시지 대기열 기능을 구현하고 특정 코드 예제를 제공하는 방법을 소개합니다. 메시지 큐의 기본 개념

FastAPI에서 비동기 작업 처리를 위해 메시지 대기열을 사용하는 방법 소개: 웹 애플리케이션에서는 이메일 보내기, 보고서 생성 등과 같이 시간이 많이 걸리는 작업을 처리해야 하는 경우가 종종 있습니다. 이러한 작업이 동기식 요청-응답 프로세스에 배치되면 사용자는 오랜 시간을 기다려야 하므로 사용자 경험과 서버 응답 속도가 저하됩니다. 이 문제를 해결하기 위해 비동기 작업 처리에 메시지 큐를 사용할 수 있습니다. 이 기사에서는 메시지 대기열을 사용하여 FastAPI 프레임워크에서 비동기 작업을 처리하는 방법을 소개합니다.

Golang 개발: NATS를 사용하여 신뢰할 수 있는 메시지 대기열을 구축하려면 특정 코드 예제가 필요합니다. 소개: 최신 분산 시스템에서 메시지 대기열은 비동기 통신을 처리하고 시스템 구성 요소를 분리하며 안정적인 메시지 전달을 달성하는 데 사용되는 중요한 구성 요소입니다. 이 기사에서는 Golang 프로그래밍 언어와 NATS(전체 이름은 "High Performance Reliable Messaging System")를 사용하여 효율적이고 안정적인 메시지 대기열을 구축하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. NATS란 무엇입니까? NATS는 경량의 오픈 소스 메시징 시스템입니다.

C# 개발에서 분산 트랜잭션과 메시지 큐를 처리하는 방법 소개: 오늘날의 분산 시스템에서 트랜잭션과 메시지 큐는 매우 중요한 구성 요소입니다. 분산 트랜잭션과 메시지 대기열은 데이터 일관성과 시스템 분리를 처리하는 데 중요한 역할을 합니다. 이 문서에서는 C# 개발에서 분산 트랜잭션 및 메시지 큐를 처리하는 방법을 소개하고 특정 코드 예제를 제공합니다. 1. 분산 트랜잭션 분산 트랜잭션은 여러 데이터베이스나 서비스에 걸쳐 있는 트랜잭션을 의미합니다. 분산 시스템에서는 데이터 일관성을 보장하는 방법이 주요 과제가 되었습니다. 여기에는 두 가지 유형이 있습니다.

Linux 스크립트 작업을 사용하여 Java에서 메시지 대기열을 구현하려면 특정 코드 예제가 필요합니다. 메시지 대기열은 서로 다른 프로세스 간에 데이터를 전송하는 데 사용되는 일반적인 통신 메커니즘입니다. Java에서는 Linux 스크립트 작업을 사용하여 메시지 대기열을 구현할 수 있으므로 대기열과 쉽게 메시지를 보내거나 대기열에서 메시지를 받을 수 있습니다. 이 기사에서는 Java 및 Linux 스크립트를 사용하여 메시지 대기열을 구현하는 방법을 자세히 설명하고 구체적인 코드 예제를 제공합니다. Java 및 Lin을 시작하려면

메시지 대기열에서 Redis의 놀라운 활용 메시지 대기열은 애플리케이션 간에 비동기 메시지를 전달하는 데 사용되는 일반적인 분리형 아키텍처입니다. 큐에 메시지를 보내면 발신자는 수신자의 응답을 기다리지 않고 다른 작업을 계속 수행할 수 있습니다. 그리고 수신자는 대기열에서 메시지를 가져와 적절한 시간에 처리할 수 있습니다. Redis는 고성능 및 영구 스토리지 기능을 갖춘 일반적으로 사용되는 오픈 소스 인 메모리 데이터베이스입니다. 메시지 대기열에서 Redis의 다양한 데이터 구조와 탁월한 성능은 이상적인 선택입니다.

Redis와 Golang을 사용하여 간단한 메시지 큐를 구현하는 방법 소개 메시지 큐는 시스템 구성 요소 분리, 피크 감소 및 밸리 채우기, 비동기 통신 등과 같은 다양한 애플리케이션 시나리오에서 널리 사용됩니다. 이 기사에서는 Redis와 Golang을 사용하여 간단한 메시지 대기열을 구현하는 방법을 소개하여 독자가 메시지 대기열의 기본 원칙과 구현 방법을 이해할 수 있도록 돕습니다. Redis 소개 Redis는 C 언어로 작성된 오픈 소스 인메모리 데이터베이스로, 일반적으로 사용되는 기타 데이터 구조에 대한 키-값 쌍 저장 및 처리 기능을 제공합니다. Redis는 고성능으로 유명합니다.

Kafka 메시지 큐의 기본 구현 원리 개요 Kafka는 대량의 데이터를 처리할 수 있고 높은 처리량과 낮은 대기 시간을 갖는 확장 가능한 분산형 메시지 큐 시스템입니다. Kafka는 원래 LinkedIn에서 개발되었으며 현재 Apache Software Foundation의 최상위 프로젝트입니다. 아키텍처 Kafka는 여러 서버로 구성된 분산 시스템입니다. 각 서버를 노드라고 하며, 각 노드는 독립적인 프로세스입니다. 노드들은 네트워크를 통해 연결되어 클러스터를 형성합니다. 케이
