RabbitMQ High Availability -- Princípio da Fila de Quorum (Fila de Arbitragem)

URL original: RabbitMQ High Availability--Principle of Quorum Queue (Fila de arbitragem) - Programador procurado

Introdução

ilustrar

        Este artigo apresenta o uso e o princípio da Fila de Quorum do RabbitMQ (fila de arbitragem).

        O RabbitMQ juntou-se à função de fila de quorum desde a versão 3.8.0, que é uma alternativa às filas espelhadas. Possui a capacidade de replicação de filas para garantir alta disponibilidade e segurança dos dados. As filas de quorum podem ser usadas para replicar dados de fila entre nós RabbitMQ, e a fila ainda pode fornecer serviços quando um nó ficar inativo.

URL do site oficial

https://www.rabbitmq.com/quorum-queues.html

URLs relacionados

Alta Disponibilidade do RabbitMQ - Uso da Fila de Quorum (Fila de Arbitragem) - Programador Procurado

Observação

        O RabbitMQ já possui uma implementação de uma fila de alta disponibilidade: Filas de Espelho. Antes do RabbitMQ 3.8.0, a fila espelhada era a única maneira de obter alta disponibilidade de dados, mas tinha falhas de design. As filas de quorum são projetadas para resolver os problemas de desempenho e sincronização de filas espelhadas.

Características das filas de quórum

  1. A fila de quorum implementa uma fila FIFO persistente e replicada usando o algoritmo Raft, focando mais na segurança dos dados.
    1. Não haverá uma situação em que a fila de espelhos apareça e o número de dois nós na mesma fila seja muito diferente.
    2. As mensagens na fila Quorum serão gravadas na fila somente depois que a maioria dos nós no cluster concordar. Essa fila é semelhante ao cluster do Ledger no RocketMQ, o que garante que as mensagens não sejam perdidas dentro do cluster.
  2. Depois que a fila de Quorum atingir uma determinada carga, ela não continuará aceitando novas mensagens. Mantenha seu equilíbrio.

Cenários de uso da fila de quórum

cenas a serem usadas

  1. fila de longo prazo
  2. Os requisitos de tolerância a falhas e segurança de dados são relativamente altos e podem tolerar respostas mais lentas.
  3. sem persistência

Cenários não adequados para uso

  1. Algumas filas de uso temporário: como filas temporárias transitórias, filas exclusivas exclusivas ou filas que são frequentemente modificadas e excluídas
  2. Altos requisitos para baixo atraso de mensagem: o algoritmo de consistência afetará o atraso da mensagem
  3. Baixos requisitos de segurança de dados: as filas de quórum exigem notificação manual pelos consumidores ou confirmação manual pelos produtores
  4. A lista de pendências de mensagens da fila é séria: se a mensagem na fila for grande ou a lista de pendências de mensagens for grande, não use a fila de Quorum. As filas de quorum atualmente mantêm todas as mensagens na memória até que o limite de uso de memória seja atingido.

Comparação da Fila de Quorum e Fila de Espelhamento

Característica

Espelhado clássico

Quorum

caudas não duráveis

sim

não

Exclusividade

sim

não

Persistência por mensagem

por mensagem

sempre

Alterações de associação

automático

manual

Mensagem TTL (tempo de vida)

sim

sim ( desde 3.10 )

Fila TTL

sim

sim

Limites de comprimento da fila

sim

sim (exceto x-overflow: rejeitar-publicar-dlx)

Comportamento preguiçoso

sim

sempre (desde 3.10) ou através do  recurso Memory Limit  (antes de 3.10)

Prioridade da mensagem

sim

não

Prioridade do consumidor

sim

sim

Trocas de cartas mortas

sim

sim

Adere às  políticas

sim

sim (consulte  Suporte de política )

Tratamento de mensagens envenenadas

não

sim

Pré-busca de QoS global 

sim

não

Mensagem de veneno

        Isso significa que as mensagens não podem ser consumidas o tempo todo, o que fará com que as mensagens entrem novamente na fila continuamente, de modo que essas mensagens se tornem mensagens venenosas. Para o processamento de mensagens envenenadas, na fila clássica, você pode finalmente transferir a mensagem para a fila de mensagens mortas para processamento definindo o parâmetro do limite superior do número de entradas da fila, enquanto na fila de Quorum, há uma atualização método de processamento.

Vantagens das filas de quórum

  1. Os clientes não precisam alterar seus métodos de produção e assinatura, independentemente do tipo de fila.
    1. A única diferença é que quando o cliente define a fila, ela precisa ser definida como uma fila de arbitragem (adicionar propriedades relacionadas no código)
  2. Resolvido quando o nó estiver online novamente, os dados não serão perdidos (resolvido o problema de sincronização da fila de espelhos)
    1. A réplica primária começa a replicar mensagens diretamente de onde a réplica secundária parou. O processo de replicação não é bloqueante, portanto, toda a fila não será afetada pela adição de novas réplicas. O único efeito é o uso da rede.
    2. Sem o problema de sincronização, não apenas a fila de quorum é mais confiável que a fila de espelhos, mas ao mesmo tempo, como as gravações devem ser aceitas por mais da metade das réplicas, os dados não serão perdidos devido ao cérebro dividido.
  3. O protocolo Raft é mais eficiente do que o algoritmo de fila espelhada e pode fornecer uma melhor taxa de transferência de mensagens.

Para resumir, as filas de quorum podem fornecer maior desempenho, melhor segurança de dados e atualizações contínuas mais fáceis de nós.

Desvantagens das filas de quórum

Menos recursos

Esses recursos não estarão disponíveis na primeira versão do Quorum Queue

  1. mensagem não persistente
  2. fila exclusiva
  3. TTL de fila/mensagem (tempo limite)
  4. Algumas regras (Policy) não estão disponíveis, apenas dead letter queues e limites de comprimento de fila estão disponíveis
  5. prioridade
  6. fila preguiçosa
  7. Pré-busca de mensagem não global (QoS)

Uso do disco - amplificação de gravação

As filas de quórum têm configurações de disco e memória diferentes das filas normais.

fila normal

        As filas comuns usam um modelo de armazenamento "compartilhado". Para que uma mensagem seja entregue a várias filas, ela será armazenada apenas uma vez e outras filas salvarão apenas uma referência à mensagem. Ou seja, no modelo de publicação-assinatura, o tamanho do armazenamento de uma mensagem que será entregue a várias filas não aumentará linearmente com o número de filas entregues a ela.

        Por exemplo, usamos um tipo de troca fanout, vinculado a 10 filas. Cada uma dessas 10 filas é definida com 5 filas espelhadas de réplica. Depois que uma mensagem é publicada, apenas 5 mensagens são armazenadas no cluster, 1 por nó. Portanto, a amplificação de gravação neste caso é 5 vezes.

Fila de quórum

        As filas de quorum usam um modelo de armazenamento "compartilhado" na memória, onde cada mensagem é armazenada separadamente no disco. Portanto, o modelo de publicação-assinatura causará uma amplificação de gravação mais severa, o que pode levar a um uso maior do disco e até mesmo a desistir do uso de filas de quorum.

        Ainda no exemplo acima, quando cada fila se torna um quorum e o fator de replicação é 5, 50 mensagens são armazenadas em disco no cluster final, e a amplificação de gravação de cada mensagem é de 50 vezes.

        Portanto, não é apropriado usar trocas de fanout com filas de quorum.

A mensagem está sempre na memória

        Todas as mensagens para a fila de quorum são mantidas na memória o tempo todo, o que aumenta o uso da memória e pode eventualmente fazer com que o cluster fique indisponível. Sem alguma verificação e monitoramento, as mensagens da fila continuam se acumulando, potencialmente fazendo com que a produção pare (limite máximo de memória) até que as mensagens sejam consumidas ou removidas da memória. Portanto, ao usar filas de quorum, é muito importante definir o limite de comprimento da fila. Além disso, é necessário usar a fila lenta como a fila de mensagens mortas da fila de arbitragem e encaminhar essas mensagens para a fila de mensagens mortas por meio da troca de mensagens mortas.

        Portanto, o planejamento e monitoramento de filas são mais importantes do que cenários comuns. Interrupções ou lentidão downstream (consumidores e serviços downstream) podem levar ao acúmulo de várias mensagens de fila, exigindo planejamento e medidas correspondentes. De quantas filas de quorum você precisa, quais são suas taxas de gravação e outras filas serão afetadas quando o cluster atingir o limite máximo de memória?

Fila indisponível quando o nó principal é perdido

Se mais da metade das réplicas da fila de quorum forem perdidas permanentemente, os dados da fila serão perdidos para sempre. Mesmo que um pequeno número de réplicas ainda esteja disponível, a fila ainda não tem como se recuperar e só pode ser excluída à força. Embora esse cenário seja menos provável, ainda existe esse perigo. Portanto, é recomendável usar discos confiáveis ​​e definir o fator de replicação para 5 ~ 3.

Atraso

        Embora a taxa de transferência da fila de quorum seja maior, a latência também pode ser maior devido ao uso do protocolo Raft. Em uma fila de quorum, todas as mensagens são persistentes e todas as mensagens são salvas em disco em cada réplica. A segurança é o principal objetivo das filas de quórum.

おすすめ

転載: blog.csdn.net/feiying0canglang/article/details/126738084