Compartilhamento de tecnologia

Dia 17 de 100 dias de construção da fundação – Introdução ao enfileiramento de mensagens

2024-07-12

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

Dia 17 de 100 dias de construção da fundação – Introdução ao enfileiramento de mensagens

Conceitos Básicos

O que é uma fila de mensagens?

MQ:Fila de mensagens

Uma fila que armazena mensagens Ao consumir mensagens, elas são consumidas em ordem (fila primeiro a entrar, primeiro a sair).

As duas partes envolvidas nas mensagens são chamadas produtor econsumidor , o produtor é responsável pelo envio das mensagens e o consumidor é responsável pelo processamento das mensagens.

Qual é a utilidade da fila de mensagens?

Três benefícios familiares

  • Processamento assíncrono: O processamento assíncrono é implementado através da fila de mensagens. Após o envio da mensagem correspondente à fila de mensagens, o resultado é retornado imediatamente, reduzindo o tempo de resposta e melhorando a experiência do usuário. Posteriormente, o sistema consome a mensagem.
  • Recorte de pico/limitação de corrente: primeiro armazene as mensagens de transação geradas por alta simultaneidade em um curto período de tempo na fila de mensagens e, em seguida, o serviço de back-end consumirá lentamente essas mensagens de acordo com suas próprias capacidades, evitando assim derrotar diretamente o back-end -serviço final.
  • Reduza o acoplamento do sistema: Não há chamadas diretas entre módulos, portanto, adicionar ou modificar módulos terá pouco impacto em outros módulos.

Cenários de aplicativos corporativos

  • Implementar transações distribuídas: Uma das soluções para transações distribuídas são as transações MQ, que são suportadas pela maioria dos MQs.As transações permitem que aplicativos de streaming de eventosconsumir, processar, produzirTodo o processo da mensagem é definido como uma operação atômica.
  • Garantia de sequência: adequada para cenários que possuem requisitos rígidos de ordem de dados, suportados pela maioria do MQ.
  • Processamento de atraso/tempo: a mensagem não será consumida imediatamente após ser enviada, mas será consumida após um tempo especificado.
  • Processamento de fluxo de dados: para fluxos massivos de dados gerados por sistemas distribuídos, como logs de negócios, dados de monitoramento, comportamento do usuário, etc., a fila de mensagens pode coletar esses dados em tempo real ou em lotes e importá-los para o mecanismo de processamento de big data para alcançar processamento de dados eficiente Gerenciamento e processamento de fluxo.

Que problemas o uso de filas de mensagens traz?

Disponibilidade reduzida do sistema: A disponibilidade do sistema é reduzida até certo ponto. Por que você diz isso? Antes de ingressar no MQ, você não precisa pensar em perda de mensagens ou desligamento do MQ, etc. No entanto, após apresentar o MQ, você precisa pensar sobre isso!

Maior complexidade do sistema: Depois de ingressar no MQ, você precisa garantir que as mensagens não sejam consumidas repetidamente, lidar com a perda de mensagens, garantir a ordem de entrega das mensagens e outros problemas!

Problemas de consistência: Mencionei acima que a fila de mensagens pode alcançar implementação assíncrona, e o assíncrono trazido pela fila de mensagens pode de fato melhorar a velocidade de resposta do sistema. Mas e se o verdadeiro consumidor da mensagem não a consumir corretamente? Isso levará à inconsistência de dados!

Filas de mensagens comuns

Kafka

Kafka é uma versão de código aberto do LinkedInPlataforma de streaming distribuída, tornou-se um projeto de nível superior do Apache. Ele foi usado para processar logs massivos nos primeiros dias e, mais tarde, desenvolveu-se gradualmente em uma fila de mensagens completa e de alto desempenho.

Uma plataforma de streaming tem três funções principais:

  1. fila de mensagens: publique e assine fluxos de mensagens. Essa função é semelhante a uma fila de mensagens, e é por isso que o Kafka também é classificado como uma fila de mensagens.
  2. Armazenamento persistente tolerante a falhas de fluxos de mensagens gravadas: Kafka persistirá as mensagens no disco, evitando efetivamente o risco de perda de mensagens.
  3. Plataforma de processamento de streaming: Para processar mensagens quando elas são publicadas, Kafka fornece uma biblioteca completa de processamento de fluxo.

RocketMQ

RocketMQ é uma plataforma de processamento de dados em tempo real de "mensagem, evento, fluxo" nativa da nuvem, de código aberto do Alibaba. Ele se baseia no Kafka e se tornou um projeto Apache de nível superior.

Os principais recursos do RocketMQ (extraídos do site oficial do RocketMQ):

  • Nativo da nuvem: nasceu com a nuvem, cresceu com a nuvem, escalabilidade elástica ilimitada, compatível com K8s
  • Alto rendimento: rendimento garantido em nível de trilhão, atendendo a cenários de microsserviços e big data.
  • Processamento de fluxo: fornece um mecanismo de computação de fluxo leve, altamente escalável, de alto desempenho e rico em recursos.
  • Grau financeiro: Estabilidade de grau financeiro, amplamente utilizada em links de transações principais.
  • Arquitetura minimalista: zero dependências externas, arquitetura sem compartilhamento.
  • Ecologicamente correto: conecta-se perfeitamente aos ecossistemas circundantes, como microsserviços, computação em tempo real e data lakes.

CoelhoMQ

RocketMQ é uma plataforma de processamento de dados em tempo real de "mensagem, evento, fluxo" nativa da nuvem, de código aberto do Alibaba. Ele se baseia no Kafka e se tornou um projeto Apache de nível superior.

Os principais recursos do RocketMQ (extraídos do site oficial do RocketMQ):

  • Nativo da nuvem: nasceu com a nuvem, cresceu com a nuvem, escalabilidade elástica ilimitada, compatível com K8s
  • Alto rendimento: rendimento garantido em nível de trilhão, atendendo a cenários de microsserviços e big data.
  • Processamento de fluxo: fornece um mecanismo de computação de fluxo leve, altamente escalável, de alto desempenho e rico em recursos.
  • Grau financeiro: Estabilidade de grau financeiro, amplamente utilizada em links de transações principais.
  • Arquitetura minimalista: zero dependências externas, arquitetura sem compartilhamento.
  • Ecologicamente correto: conecta-se perfeitamente aos ecossistemas circundantes, como microsserviços, computação em tempo real e data lakes.

Pulsar

Pulsar é uma plataforma de fluxo de mensagens distribuídas nativa da nuvem de próxima geração. Foi originalmente desenvolvida pelo Yahoo e se tornou um projeto Apache de nível superior.

Pulsar integra mensagens, armazenamento e computação funcional leve. Ele adota um design de arquitetura de separação de computação e armazenamento para oferecer suporte a vários locatários, armazenamento persistente e replicação de dados entre regiões em salas de várias máquinas. , e recursos de armazenamento de dados de streaming de alto desempenho, como escalabilidade, são considerados a melhor solução para transmissão, armazenamento e computação de streaming de mensagens em tempo real na era nativa da nuvem.

Os principais recursos do Pulsar são os seguintes (extraídos do site oficial):

  • É a próxima geração de plataforma de fluxo de mensagens distribuídas nativa da nuvem.
  • Uma única instância do Pulsar oferece suporte nativo a vários clusters e pode concluir perfeitamente a replicação de mensagens entre clusters em salas de computadores.
  • Latência de liberação extremamente baixa e latência ponta a ponta.
  • Expande-se perfeitamente para mais de 1 milhão de tópicos.
  • API cliente simples com suporte para Java, Go, Python e C++.
  • Vários modos de assinatura para tópicos (exclusivo, compartilhado e failover).
  • A entrega de mensagens é garantida através do mecanismo persistente de armazenamento de mensagens fornecido pelo Apache BookKeeper.
  • A estrutura leve de computação sem servidor Pulsar Functions implementa processamento de dados nativo de fluxo.
  • Pulsar IO, uma estrutura de conector sem servidor baseada em Pulsar Functions, facilita a movimentação de dados para dentro e para fora do Apache Pulsar.
  • O armazenamento em camadas pode transferir dados do armazenamento quente para o armazenamento frio/de longo prazo (como S3, GCS) quando os dados ficam obsoletos.

Comparação do MQ acima:

Direção de contrasteresumo
Taxa de transferênciaA taxa de transferência do ActiveMQ e RabbitMQ de nível 10.000 (o ActiveMQ tem o pior desempenho) é uma ordem de magnitude inferior à do RocketMQ e Kafka de nível 100.000 ou mesmo de um milhão de níveis.
Disponibilidade Todos podem alcançar alta disponibilidade. ActiveMQ e RabbitMQ são baseados na arquitetura master-slave para alcançar alta disponibilidade. RocketMQ é baseado em uma arquitetura distribuída. Kafka também é distribuído, com múltiplas cópias de um dado. Se algumas máquinas falharem, não haverá perda ou indisponibilidade de dados.
OportunidadeRabbitMQ é desenvolvido com base em Erlang, portanto possui fortes capacidades de simultaneidade, desempenho extremamente bom, latência muito baixa, atingindo o nível de microssegundos, e outros estão no nível de ms.
Suporte de funçãoPulsar tem funções mais abrangentes e suporta multilocação, vários modelos de consumo e modos de persistência. É uma plataforma de fluxo de mensagens distribuídas nativa da nuvem de próxima geração.
Mensagem perdidaActiveMQ e RabbitMQ têm uma possibilidade de perda muito baixa, e Kafka, RocketMQ e Pulsar podem teoricamente atingir 0 perda.

Resumir:

  • Embora RabbitMQ seja ligeiramente inferior a Kafka, RocketMQ e Pulsar em termos de rendimento, por ser desenvolvido com base em Erlang, possui fortes capacidades de simultaneidade, desempenho extremamente bom e latência muito baixa, atingindo o nível de microssegundos. No entanto, como o RabbitMQ é desenvolvido com base em Erlang, poucas empresas nacionais têm força para fazer pesquisas e customização no nível do código-fonte de Erlang. Se o cenário de negócios não tiver requisitos de simultaneidade muito altos (100.000 ou um milhão de níveis), o RabbitMQ poderá ser sua primeira escolha entre essas filas de mensagens.
  • RocketMQ e Pulsar suportam consistência forte e podem ser usados ​​em cenários com altos requisitos de consistência de mensagens.
  • RocketMQ é produzido pela Alibaba e é um projeto de código aberto Java. Podemos ler o código-fonte diretamente e, em seguida, personalizar o MQ de nossa própria empresa e ser testado nos cenários reais de negócios do Alibaba.
  • As características do Kafka são na verdade muito óbvias, ou seja, ele fornece apenas menos funções principais, mas fornece rendimento ultra-alto, latência de nível ms, disponibilidade e confiabilidade extremamente altas, e a distribuição pode ser expandida arbitrariamente. Ao mesmo tempo, é melhor que o Kafka suporte um número menor de tópicos para garantir seu rendimento ultra-alto. A única desvantagem do Kafka é que as mensagens podem ser consumidas repetidamente, o que terá um impacto muito leve na precisão dos dados. No campo de big data e coleta de logs, esse leve impacto pode ser ignorado. Este recurso é naturalmente adequado para big data real. computação em tempo real e coleta de logs. Se for computação em tempo real, coleta de logs e outros cenários na área de big data, usar Kafka é o padrão da indústria, e não há absolutamente nenhum problema. A comunidade é muito ativa e definitivamente não será pornográfica, sem falar nisso. é quase um padrão de facto neste campo em todo o mundo.

Uma pesquisa simples sobre MQ autodesenvolvido em nível empresarial

Alibaba autodesenvolvido: RocketMQ, RabbitMQ

Tencent autodesenvolvido: TDMQ, CMQ

Autopesquisa do Baidu: a ser investigada

Autopesquisa de bytes: BMQ

Autodesenvolvido pela Meituan: Mafma

Autodesenvolvido por Qunar.com: QMQ

JD.com autodesenvolvido: JMQ

Outros deverão ser investigados. .