Capítulo prático do RocketMQ - Análise de conceito do RocketMQ

Autor: Zen e a arte da programação de computadores

1. Introdução

Com o rápido desenvolvimento da Internet e o desenvolvimento contínuo dos negócios, cada vez mais pessoas estão começando a usar tecnologias emergentes, como computação em nuvem, big data e inteligência artificial para resolver problemas práticos. Essas tecnologias estão remodelando a arquitetura de TI empresarial, incluindo estrutura organizacional, funções de pessoal, processos de desenvolvimento, especificações de teste, etc. Sob esta mudança, o Sistema de Mensagens Distribuídas tornou-se um componente necessário para construir um sistema de aplicativos robusto, altamente disponível, escalável e de baixa latência.

Apache RocketMQ é um produto de middleware de mensagens distribuídas, contribuído por uma conhecida comunidade nacional de código aberto, com foco em desempenho, alto rendimento e alta disponibilidade desde o início de seu design. As vantagens do RocketMQ refletem-se principalmente nos seguintes aspectos:

  1. Tempo de inicialização rápido

    Apache RocketMQ usa o "modelo de fila" como seu principal mecanismo de comunicação. Simplificando, o remetente envia a mensagem para uma fila e o destinatário lê a mensagem da fila e a consome. Devido ao seu modelo de fila, o RocketMQ inicia muito rápido e pode ser concluído em quase segundos.

  2. Armazenamento de arquivos pequenos

    RocketMQ suporta o armazenamento de mensagens em vários servidores por meio de sharding, realizando assim o armazenamento de pequenos arquivos e reduzindo a pressão no IO do disco. Essa arquitetura pode efetivamente evitar limitações de capacidade de disco em uma única máquina.

  3. Estratégias avançadas de roteamento de mensagens

    RocketMQ fornece uma variedade de estratégias de roteamento de mensagens, incluindo transmissão, clustering, tags (tags são subconjuntos em um tópico), unicast, etc., que podem atender às necessidades de distribuição de mensagens em diferentes cenários.

  4. Alta disponibilidade

    Apache RocketMQ fornece um modo de implantação de cluster desde o início de seu design, oferece suporte à sincronização ativa e de espera, garante que as mensagens não sejam perdidas e ainda possa fornecer serviços quando o cluster falhar.

  5. Rastreamento de mensagem

    Apache RocketMQ pode usar a função de retrocesso de mensagens para ajudar os usuários a reprocessar mensagens onde ocorreram erros com base em certas regras de negócios. Por exemplo, um produtor não conseguiu trabalhar normalmente, mas as mensagens enviadas não foram consumidas normalmente pelos consumidores.Neste momento, você pode usar a função de rastreamento de mensagem para localizar a mensagem com falha e tentar novamente ou compensá-la.

Esta série de artigos irá primeiro elaborar conceitos e arquitetura relacionados ao RocketMQ e, em seguida, com base em exemplos oficiais e casos reais, para que os leitores possam ter uma compreensão mais profunda do RocketMQ e melhorar a eficiência do trabalho e a estabilidade do sistema.

2. Explicação de conceitos e termos básicos

2.1 Fila de mensagens

2.1.1 Definição de conceito

Message Queue, uma fila de mensagens, é uma tabela linear usada para armazenar ou transmitir mensagens. Permite apenas adicionar elementos na parte traseira e excluir elementos na frente. O princípio primeiro a entrar, primeiro a sair significa que as mensagens entram primeiro na fila e depois são transmitidas em ordem. Possui as seguintes características:

  1. Comunicação assíncrona: O remetente da informação apenas coloca a mensagem na fila, independentemente de a outra parte receber ou processar a mensagem, e a outra parte não sabe que recebeu a mensagem. O destinatário da informação precisa continuar perguntando se há novas informações.

  2. Redução de pico e preenchimento de vale: A fila de mensagens pode lidar com um grande número de solicitações de acesso em um instante no servidor de aplicativos. O servidor não travará devido a um aumento repentino no tráfego, nem a memória ou o uso da CPU serão excessivos devido ao acúmulo excessivo de tarefas. Portanto, ele pode lidar com solicitações durante picos de tráfego de curto prazo e equilibrar melhor a carga de cada nó.

  3. Acoplamento fraco: as filas de mensagens reduzem o acoplamento entre aplicativos. Os aplicativos podem ser executados de forma independente, sem a cooperação de outros aplicativos.

  4. Consistência sequencial: Para tipos específicos de mensagens, a fila de mensagens garante uma sequência estrita e pode implementar facilmente alguns tipos especiais de aplicativos. Por exemplo, alcançar consistência de ordens em sistemas de negociação complexos.

Em geral, fila de mensagens é uma forma de comunicação entre aplicações, usada para coordenar a comunicação assíncrona em sistemas distribuídos.

2.1.2 Padrão Iniciador/Receptor

As filas de mensagens são divididas em dois modos: publicação/assinatura e ponto a ponto.

Modelo de publicação/assinatura: as mensagens enviadas pelo editor podem ser consumidas por vários assinantes; os assinantes podem assinar um ou mais tópicos. Sua característica é que não existe uma relação direta entre editores e assinantes, permitindo a existência de formulários um para muitos ou muitos para muitos.

Modo ponto a ponto: Cada mensagem possui apenas um remetente e um destinatário. Este modo é mais adequado para cenários de aplicativos que exigem controle preciso das taxas de envio e recebimento, como aplicativos orientados a eventos.

2.2 Modelo Produtor/Consumidor

O modelo produtor/consumidor, também conhecido como comunicação um-para-muitos ou muitos-para-muitos, significa que vários produtores (Produtores) enviam o mesmo fluxo de dados para a fila de mensagens, mas apenas o consomem por alguns dos consumidores (Consumidores). ). , para economizar recursos ou acelerar o processamento. A ideia básica é aumentar a capacidade de consumo e a simultaneidade através da introdução de um pool de threads de "consumidor" dedicado para alocar tarefas diferentes para consumidores diferentes.

As mensagens enviadas pelos produtores são organizadas do modo primeiro a entrar, primeiro a sair na fila de mensagens, aguardando o consumo dos consumidores. Os consumidores consomem mensagens de forma polling, ou seja, retiram uma mensagem para consumo em intervalos regulares. Se nenhuma mensagem estiver disponível, o thread fica suspenso até que uma mensagem chegue. Portanto, na maioria dos casos, a taxa de consumo do consumidor é muito maior que a taxa de envio do produtor.

2.3 Mensagem

Uma mensagem é uma entidade que transporta dados. As propriedades da mensagem geralmente incluem:

  1. ID da mensagem: um número que identifica exclusivamente uma mensagem.

  2. Corpo da mensagem: o conteúdo da mensagem, que pode ser de qualquer tipo de dados.

  3. Atributos da mensagem: Informações adicionais sobre atributos podem ser anexadas para facilitar o processamento subsequente.

  4. Tag da mensagem: você pode adicionar uma tag à mensagem para facilitar a classificação e recuperação da mensagem.

2.4 Tópico

Um tópico é um conceito lógico de fila de mensagens e é usado para transportar várias mensagens. As mensagens são classificadas em unidades de tópicos, e tanto produtores quanto consumidores podem enviar e receber mensagens sobre tópicos específicos. Quando um consumidor precisa processar um tipo específico de mensagem, ele só precisa se inscrever no tópico para obter o efeito de filtragem de mensagens.

2.5 Aglomerado

Um cluster é a forma de implantação física de uma fila de mensagens e consiste em vários servidores para fornecer as funções de armazenamento, transmissão e processamento exigidas pela fila de mensagens. O cluster pode ser configurado em modo ativo e standby, sendo o nó ativo responsável por escrever e consumir mensagens, e o nó standby é responsável pelo backup redundante.

2.6 Corretor

Broker é um software de servidor de fila de mensagens que serve como camada proxy de armazenamento da fila de mensagens. O servidor Broker fornece serviços de armazenamento de mensagens aos consumidores e serviços de entrega de mensagens aos produtores. Geralmente, os provedores de serviços de fila de mensagens fornecerão um ou mais servidores Broker, e os usuários podem interagir com os servidores Broker por meio de APIs.

2.7 Servidor de Nomes

NameServer é o serviço de nomenclatura do RocketMQ, usado para armazenar informações de tópicos e grupos para fornecer consulta de informações de roteamento. Quando um produtor ou consumidor inicia, ele precisa iniciar uma solicitação de registro para Namesrv. Namesrv gerencia o tópico e grupo correspondente e retorna as informações de roteamento correspondentes.

2.8 Produtor

Produtor é o processo do aplicativo cliente que envia mensagens para a fila de mensagens. O produtor envia mensagens para o servidor Broker da fila de mensagens por meio da política de roteamento especificada. RocketMQ fornece três interfaces de envio de mensagens, nomeadamente síncrona, assíncrona e unidirecional.

  • Interface síncrona (Sync Producer): Quando o método send é chamado, o thread atual aguarda a resposta do corretor de forma síncrona até que a mensagem seja enviada com sucesso ou expire e, em seguida, prossegue para baixo.

  • Interface assíncrona (produtor assíncrono): um produtor não persistente é criado por padrão. A chamada do método send retorna imediatamente. O produtor usa a estrutura netty para gravar logs de forma assíncrona.

  • Interface unidirecional (Oneway Producer): não aguarda a resposta do corretor. O produtor retorna imediatamente após o envio da mensagem. É adequado para cenários de aplicação que não prestam atenção ao resultado do envio da mensagem.

2.9 Consumidor (Assinante)

Consumidor é o processo do aplicativo cliente que obtém mensagens da fila de mensagens. RocketMQ fornece quatro interfaces de recebimento de mensagens, nomeadamente push, pull, long polling e consumo em lote (transação).

  • Interface pull (Pull Consumer): O modo pull é adotado por padrão, o modo pull é utilizado para solicitar mensagens do broker e apenas as mensagens de interesse são retornadas.

  • Interface push (Push Consumer): O corretor envia a mensagem para o lado do consumidor, e o lado do consumidor não puxa a mensagem sozinho.

  • Long Polling Consumer: O consumidor registra uma conexão longa com o corretor. O corretor permanece ocioso até que a mensagem chegue e então o corretor a envia ativamente para o consumidor.

  • Interface em lote (mensagem transacional): múltiplas mensagens podem ser consumidas completamente de uma só vez por meio de mensagens transacionais. Após habilitar as mensagens de transação, se o servidor não encontrar condições anormais no raio da transação, o consumidor poderá consumir corretamente todas as mensagens, caso contrário, o raio da transação poderá ser ajustado com base no feedback para continuar consumindo.

2.10 Nomesrv

Namesrv é o servidor de nomes do RocketMQ, fornecendo funcionalidade de descoberta de serviço. Ele salva todas as informações de tópicos e grupos usadas pelo RocketMQ, monitora as solicitações de acesso do cliente e retorna as informações de roteamento correspondentes. RocketMQ precisa iniciar o servidor de nomes para funcionar corretamente.

Acho que você gosta

Origin blog.csdn.net/universsky2015/article/details/133565640
Recomendado
Clasificación