Multilocação e Armazenamento de Filas do Azure

Armazenamento de Filas do Azure armazena mensagens para processamento assíncrono. Este artigo descreve estratégias de particionamento, modelos de isolamento e recursos de Armazenamento de Filas para soluções multilocatário. Ele fornece diretrizes que podem ajudá-lo a distribuir a carga de mensagens, isolar as mensagens dos locatários e gerenciar o acesso, a criptografia e o uso.

Estratégias de particionamento

O Armazenamento de Filas não expõe uma chave de partição ou subfila dentro de uma fila. A fila é o menor limite que você pode usar para distribuir o carregamento de mensagens e a conta de armazenamento é o próximo limite. Uma fila compartilhada não fornece taxa de transferência específica por tenant nem isolamento de desempenho.

Para mensagens que são 1 KiB, uma única fila tem uma taxa de transferência de destino de até 2.000 mensagens por segundo e uma conta de armazenamento tem uma taxa de solicitação máxima de 20.000 mensagens por segundo. O tamanho da mensagem e os padrões de acesso afetam a taxa de transferência que sua carga de trabalho obtém. As mensagens de fila podem ter até 64 KiB. Para mensagens maiores ou recursos avançados do broker, considere usar Barramento de Serviço do Azure.

Se sua carga de trabalho puder exceder a meta por fila, distribua mensagens em várias filas. Dependendo dos requisitos operacionais e de roteamento, você pode particionar filas por locatário, grupo de locatários ou camada de serviço, carga de trabalho funcional, selo de implantação ou região. Um tenant de alto volume que compartilha uma fila com outros tenants pode consumir uma parte desproporcional da taxa de transferência da fila e causar limitação de taxa para outros tenants.

Várias filas na mesma conta de armazenamento ainda compartilham a capacidade da conta e a configuração no nível da conta. Se a carga de trabalho agregada puder exceder o limite da conta de armazenamento ou se um locatário precisar de escala independente ou configuração regional, distribua filas entre várias contas de armazenamento. Monitore a limitação de taxa, use repetições de retirada exponencial e teste sua carga de trabalho em relação às metas de escalabilidade documentadas do Armazenamento de Filas. Para obter opções de acesso de locatário e isolamento de dados, consulte modelos de isolamento.

Modelos de isolamento

Depois de determinar como distribuir o carregamento da mensagem, determine o nível de isolamento do locatário a ser aplicado. O Armazenamento de Filas dá suporte a filas compartilhadas, filas para cada locatário e contas de armazenamento para cada locatário. A tabela a seguir resume as diferenças entre os principais modelos de isolamento de locatário para o Armazenamento de Filas.

Consideration Filas compartilhadas Filas para cada inquilino Contas de armazenamento para cada locatário
Isolamento de dados Baixo. O aplicativo impõe isolamento. Médio-baixo Alta
Isolamento de desempenho Low Baixo. A maioria das cotas e limites se aplicam a toda a conta de armazenamento. Alta
Complexidade da implantação Low Medium Alta
Complexidade operacional Low Medium Alta
Cenário de exemplo Uma grande solução multilocatário tem uma camada de aplicativo compartilhada. As URLs de SAS (assinatura de acesso compartilhado) com escopo de locatário são emitidas. Cada locatário tem seu próprio selo de implantação.

Note

Considere cotas e limites ao selecionar um modelo de isolamento. Esses limites incluem limites de serviço do Azure, metas de escalabilidade do Armazenamento de Filas e metas de escalabilidade para o provedor de recursos de Armazenamento.

Filas compartilhadas

Se você compartilhar uma fila, todos os locatários compartilharão sua meta de taxa de transferência. Um locatário sobrecarregado pode causar limitação de taxa para outros locatários. Para estratégias de distribuição de carga de mensagens, consulte Estratégias de particionamento.

As filas não fornecem particionamento ou subfilas e, portanto, os dados de todos os locatários podem se misturar. Seu aplicativo deve identificar o tenant de cada mensagem e impor o isolamento durante o processamento. Não conceda aos locatários acesso direto a uma fila compartilhada se eles não devem acessar as mensagens de outros locatários.

Filas para cada inquilino

Você pode criar filas individuais para cada locatário em uma única conta de armazenamento. Não há limite para o número de filas que você pode criar em uma conta de armazenamento.

As filas para cada tenant fornecem um limite de roteamento e controle de acesso, mas não fornecem isolamento de desempenho. Todas as filas na conta compartilham a capacidade e as metas de desempenho da conta de armazenamento.

Para esse cenário, você pode usar o controle de acesso do Armazenamento de Filas, incluindo SAS, para gerenciar o acesso aos dados de cada tenant.

Ao criar filas dinamicamente para cada locatário, considere como a camada de aplicativo consome as mensagens da fila de cada locatário. Para cenários avançados, considere o uso de Barramento de Serviço do Azure, que dá suporte a recursos como sessões, encaminhamento automático de mensagens e tópicos e assinaturas.

Contas de armazenamento para cada locatário

O nível mais forte de isolamento usa uma conta de armazenamento dedicada para cada locatário. Esse modelo garante o isolamento total das chaves da conta de armazenamento, que você pode rotacionar independentemente. Ele também permite que você dimensione sua solução além dos limites e cotas para cada conta de armazenamento. Considere esse modelo para locatários que têm volumes de mensagens elevados sustentados ou exigem metas de desempenho ou configuração regional independentes. Mas você também deve considerar o número máximo de contas de armazenamento permitidas em uma única assinatura do Azure.

Recursos do Armazenamento do Filas que dão suporte à multilocação

Os seguintes recursos de Armazenamento de Filas podem ajudá-lo a implementar e operar o modelo de isolamento escolhido.

Assinaturas de acesso compartilhado

Ao usar o Queue Storage de um aplicativo cliente, considere se é necessário rotear solicitações por meio da camada de aplicativo ou permitir que os clientes se conectem diretamente a uma fila. O acesso direto ao cliente pode reduzir a carga em seus aplicativos de back-end e o número de saltos de rede.

Uma SAS (assinatura de acesso compartilhado) permite que você forneça aplicativos cliente com acesso limitado a uma fila. Você pode restringir as operações que um cliente pode executar e o período de tempo em que o acesso é permitido. Por exemplo, você pode emitir uma SAS que permite que um locatário adicione mensagens à sua própria fila sem permitir que ele leia ou exclua mensagens.

Use o padrão Chave Limitada para emitir tokens SAS restritos e com escopo na camada de aplicativo. Autentique o cliente usando o sistema de autenticação do aplicativo, determine a fila do tenant que ele pode acessar e emita um token apenas para as operações necessárias.

As políticas de acesso armazenadas permitem definir uma única política a ser usada quando você emite vários tokens SAS de serviço. As políticas de acesso armazenado não se aplicam a tokens SAS de delegação de usuário ou tokens SAS de conta.

SAS de delegação do usuário

Uma SAS de serviço ou sas de conta é assinada com uma de suas chaves de conta de armazenamento. Em vez disso, uma SAS de delegação de usuário é protegida com credenciais de Microsoft Entra. A camada de aplicativo solicita uma chave de delegação de usuário usando a própria identidade gerenciada e, em seguida, assina tokens com escopo e tempo limitados para cada locatário. Você não distribui ou armazena chaves de conta. Microsoft recomenda usar uma SAS de delegação de usuário em vez de uma SAS de chave de conta quando seu design dá suporte a ela.

Use tempos de vida curtos para tokens e planeje como revogar o acesso se um token estiver comprometido. Para correlacionar seus logs de aplicativos com logs de Armazenamento de Filas, defina uma ID de solicitação do cliente (x-ms-client-request-id) em solicitações de armazenamento e registre-a junto com a ID do locatário.

Controle de acesso baseado em identidade

O Armazenamento de Filas fornece controle de acesso baseado em identidade por meio de Microsoft Entra ID. Use identidades gerenciadas e o controle de acesso baseado em função do Azure (Azure RBAC) para autorizar seu aplicativo a acessar filas sem armazenar chaves de conta. Restrinja o escopo do acesso à fila de cada locatário quando os locatários exigirem acesso direto. A autorização no nível da fila não isola as mensagens de tenants individuais dentro de uma fila compartilhada.

Encryption

O Queue Storage criptografa dados em repouso com chaves gerenciadas pela Microsoft por padrão. Para usar chaves gerenciadas pelo cliente, configure a conta de armazenamento para usar uma chave de criptografia com escopo de conta para filas ao criar a conta. Você não pode alterar esse escopo de chave de criptografia após a criação da conta.

Se os locatários exigirem chaves gerenciadas pelo cliente separadas, use contas de armazenamento separadas. Os escopos de criptografia do Armazenamento de Blobs e as chaves fornecidas pelo cliente em solicitações individuais não se aplicam ao Armazenamento de Filas. Planeje a rotação e a revogação de chaves junto com o ciclo de vida do tenant.

Monitoring

Em uma solução multilocatário, considere se você precisa medir o consumo de cada locatário. Defina as métricas específicas a serem rastreadas, como o número de mensagens ou operações para cada locatário. Você também pode usar a alocação de custos para acompanhar o custo do uso de cada locatário e habilitar o chargeback em várias assinaturas.

O Armazenamento de Filas fornece recursos de monitoramento internos. Quando os tenants compartilham uma fila, inclua identificadores de tenant na telemetria do aplicativo para que você possa atribuir o processamento e o uso de mensagens ao tenant correto.

Monitore as taxas de solicitação e as respostas HTTP 500 e 503 para detectar filas ou contas que se aproximam dos limites de escalabilidade. Correlacione essa telemetria com identificadores de locatário para que você possa identificar locatários cujo uso afeta a capacidade compartilhada.

Você pode coletar logs de solicitação e, em seguida, agregar e analisá-los junto com a telemetria do aplicativo. Em soluções que criam grandes volumes de solicitações, considere se o benefício justifica o custo para capturar e processar esses logs.

Contributors

A Microsoft mantém este artigo. Os colaboradores a seguir escreveram este artigo.

Autor principal:

  • John Downs | Principal Engenheiro de Software, Padrões do Azure & Práticas

Outros colaboradores:

Para ver perfis de LinkedIn não públicos, entre em LinkedIn.