O ApsaraMQ for RabbitMQ é um serviço de mensagens totalmente gerenciado, construído sobre uma arquitetura de armazenamento distribuída e de alta disponibilidade. Ele implementa o protocolo AMQP 0-9-1 e mantém compatibilidade com clientes RabbitMQ open-source. Em comparação ao RabbitMQ open-source, o ApsaraMQ for RabbitMQ resolve problemas comuns de estabilidade, como acúmulo de mensagens e split-brain. Além disso, oferece as vantagens de um serviço de mensagens em nuvem, incluindo alta concorrência, implantação distribuída e dimensionamento flexível.
Este tópico compara o ApsaraMQ for RabbitMQ com o RabbitMQ open-source em termos de recursos, escalabilidade, confiabilidade, exchanges e filas.
Para obter a lista completa de vantagens, consulte Benefícios.
Recursos
|
Recurso |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
Protocolo |
AMQP 0-9-1 |
AMQP 0-9-1, AMQP 1.0, STOMP, MQTT, http(S) e WebSocket |
|
sdk do cliente |
Todos os SDKs de cliente RabbitMQ open-source (qualquer linguagem, qualquer versão) |
SDKs open-source |
|
Mensagens atrasadas |
Precisão de segundos. Compatível tanto com o plug-in x-delayed-message quanto com o método TTL. Consulte Mensagens atrasadas. |
Requer plug-in ou o método de expiração e transferência de TTL da mensagem |
|
Mensagens transacionais |
Não suportado |
Suportado |
|
Mensagens ordenadas |
Suportado. Consulte Consumo ordenado de mensagens. |
Suportado |
|
Prioridade de mensagem |
Apenas instâncias dedicadas |
Suportado |
|
Nova tentativa de mensagem |
Reentrega automática quando as mensagens não são confirmadas dentro de um período de tempo limite. Consulte Política de nova tentativa. |
Sem nova tentativa integrada. Mensagens não confirmadas bloqueiam a fila, o que pode causar acúmulo e interrupção do serviço. |
|
Autenticação |
Nome de usuário e senha personalizados ou credenciais geradas a partir de um par AccessKey no Resource Access Management (RAM). Consulte Nomes de usuário e senhas estáticos e Credenciais do RAM. |
Nome de usuário e senha personalizados |
|
Controle de acesso |
Modelo de permissão open-source e autorização baseada em políticas do RAM. Consulte Gerenciamento de permissões e Controle de acesso do RAM. |
Modelo de permissão open-source |
Observabilidade
|
Capacidade |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
Painel |
Métricas integradas nos níveis de vhost, exchange e fila. A integração com Prometheus e Grafana vem pré-configurada. Consulte Painel. |
Duas opções: (1) Use a interface de gerenciamento para métricas, mas crie sua própria camada de armazenamento e visualização. (2) configure o Prometheus e o Grafana manualmente. |
|
Rastreamento de mensagens |
Visualização de rastreamento no console que mostra todo o ciclo de vida da mensagem. Permite consulta por fila, id da mensagem ou tempo de processamento. Consulte Rastreamentos de mensagens. |
Os dados de rastreamento são gravados em arquivos de log do servidor, tornando lentas a consulta e a análise de causa raiz. |
Comandos AMQP
A tabela a seguir compara o comportamento do comando AMQP BasicCancel entre o ApsaraMQ for RabbitMQ e o RabbitMQ open-source.
|
Item |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
|
Cancela a assinatura do consumidor; as mensagens já entregues retornam à fila. |
Cancela a assinatura do consumidor; as mensagens já entregues permanecem no estado Unacked. |
Essa diferença é importante ao solucionar problemas de entrega de mensagens após o cancelamento do consumidor. No ApsaraMQ for RabbitMQ, o retorno à fila após o BasicCancel significa que mensagens não confirmadas podem ser reentregues a outros consumidores. No RabbitMQ open-source, essas mensagens permanecem não confirmadas até que o canal seja fechado ou o tempo limite expire.
Escalabilidade e confiabilidade
|
Dimensão |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
Throughput do cluster |
Sem limite superior fixo. Uma arquitetura distribuída sem mestre suporta expansão horizontal. |
Limitado pela capacidade de um único nó. A expansão vertical exige atualizações de hardware. |
|
Throughput de fila única |
Sem limite superior fixo. Cada fila escala horizontalmente entre os nós. |
Limitado pelo nó que hospeda a fila. |
|
Conexões |
Escalam junto com o cluster. Adicionar nós aumenta a capacidade de conexão sem degradar o desempenho. |
Limitado pelos recursos de uma única máquina. |
|
Mensagens atrasadas |
Precisão de segundos, alto throughput, pronto para uso |
Requer configuração de plug-in |
|
Alta disponibilidade |
Implantação multizona com separação de armazenamento e computação. Nós de computação com falha podem ser removidos e isolados rapidamente. Os dados são armazenados em três cópias. |
Depende de filas espelhadas ou filas quorum. Essa implementação é propensa a problemas de split-brain. |
|
Acúmulo de mensagens |
Mantém o desempenho estável mesmo com grandes volumes acumulados. A operação normal do cluster não é afetada. |
Grandes acúmulos consomem memória do nó e podem desencadear falhas de falta de memória, levando à interrupção do serviço. |
|
Dimensionamento elástico |
Expanda ou reduza adicionando ou removendo nós do cluster sob demanda. Instâncias serverless cobram com base no volume de mensagens, eliminando a necessidade de planejamento prévio de capacidade. |
A capacidade é restrita pela maior máquina do cluster. O dimensionamento requer atualizações de hardware ou reparticionamento do cluster. |
|
Autorrecuperação |
Um sistema de inspeção integrado detecta e resolve automaticamente deadlocks e falhas de nó. |
Sem autorrecuperação automatizada. É necessária intervenção manual. |
Exchanges
O ApsaraMQ for RabbitMQ suporta os mesmos tipos e propriedades de exchange que o RabbitMQ open-source.
|
Propriedade |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
Tipos |
direct, fanout, headers, topic, x-delayed-message, x-consistent-hash |
direct, fanout, headers, topic, x-delayed-message, x-consistent-hash |
|
Persistência |
Persistente e não persistente |
Persistente e não persistente |
|
Exclusão automática |
Suportado |
Suportado |
|
Interno |
Suportado |
Suportado |
|
Exchange alternativa |
Suportado |
Suportado |
|
Exchange de hash consistente |
Suportado |
Suportado |
Filas
O ApsaraMQ for RabbitMQ abstrai as decisões de infraestrutura no nível da fila. Todas as filas executam em um cluster distribuído de alta disponibilidade, portanto, não há necessidade de escolha entre tipos de fila clássica e quorum ou de configurar a replicação manualmente.
|
Propriedade |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
Tipo de fila |
Cluster HA distribuído (nenhuma configuração necessária) |
Seleção manual necessária: fila clássica (espelhada) ou fila quorum |
|
Atribuição de nó |
Totalmente gerenciado, sem atribuição manual |
Seleção manual de nó necessária |
|
Política de nova tentativa |
Reentrega automática no tempo limite de consumo. Consulte Política de nova tentativa. |
Sem reentrega baseada em tempo limite |
|
Persistência |
Persistente e não persistente |
Persistente e não persistente |
|
Comprimento máximo / bytes de comprimento máximo / comprimento máximo em memória / bytes máximos em memória |
Nenhuma configuração necessária. Suporta acúmulo massivo de mensagens sem pressão de memória. |
Deve ser configurado para evitar falhas de falta de memória causadas por acúmulo ilimitado. |
|
Limite de entrega |
Valor padrão de 16 (estático). Consulte Política de nova tentativa. |
Configuração manual necessária |
|
Exchange de dead-letter |
Suportado |
Suportado |
|
Chave de roteamento de dead-letter |
Suportado |
Suportado |
|
Consumidor ativo único |
Suportado. Consulte Consumo ordenado de mensagens. |
Suportado |
Ação
A tabela a seguir compara o comportamento do comando AMQP BasicCancel entre o ApsaraMQ for RabbitMQ e o RabbitMQ open-source.
|
Item |
ApsaraMQ for RabbitMQ |
RabbitMQ open-source |
|
BasicCancel |
Cancela a assinatura do consumidor; as mensagens já entregues retornam à fila. |
Cancela a assinatura do consumidor; as mensagens já entregues permanecem no estado Unacked. |