Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Armazenamento de Filas do Azure armazena mensagens para processamento assíncrono. Este artigo descreve estratégias de particionamento, modelos de isolamento e funcionalidades do Queue Storage para soluções multicliente. Fornece orientações que podem ajudar a distribuir a carga de mensagens, isolar as mensagens dos inquilinos e gerir acessos, encriptação e utilização.
Estratégias de particionamento
Queue Storage não expõe uma chave de partição ou subfila dentro de uma fila. A fila é a fronteira mais pequena que pode utilizar para distribuir a carga das mensagens, e a conta de armazenamento é a fronteira seguinte. Uma fila partilhada não fornece um débito de processamento específico do locatário nem isolamento de desempenho.
Para mensagens de 1 KiB, uma única fila tem um débito alvo de até 2.000 mensagens por segundo, e uma conta de armazenamento tem uma taxa máxima de pedidos de 20.000 mensagens por segundo. O tamanho da mensagem e os padrões de acesso afetam a taxa de transferência que a sua carga de trabalho atinge. As mensagens de fila podem chegar até 64 KiB. Para mensagens maiores ou funcionalidades avançadas de broker, considere usar o Azure Service Bus.
Se a sua carga de trabalho puder exceder o objetivo por fila, distribua as mensagens por várias filas. Dependendo dos seus requisitos de roteamento e operacionais, pode dividir as filas por locatário, grupo de locatários ou nível de serviço, carga de trabalho funcional, stamp de implementação ou região. Um tenant de grande volume que partilha uma fila com outros tenants pode consumir uma fatia desproporcional do débito da fila e causar estrangulamento para outros tenants.
Múltiplas filas na mesma conta de armazenamento continuam a partilhar a capacidade da conta e a configuração ao nível da conta. Se a carga de trabalho agregada puder exceder o limite da conta de armazenamento, ou se um tenant precisar de uma configuração independente de escala ou regional, distribua as filas por várias contas de armazenamento. Monitorize a limitação de taxa, use tentativas com recuo exponencial e teste a sua carga de trabalho em relação aos limites de escalabilidade documentados do Armazenamento de Filas. Para opções de acesso ao tenant e isolamento de dados, consulte Modelos de isolamento.
Modelos de isolamento
Depois de determinar como distribuir a carga das mensagens, determine o nível de isolamento do tenant a aplicar. O Armazenamento de Filas suporta filas partilhadas, filas para cada tenant e contas de armazenamento para cada tenant. A tabela seguinte resume as diferenças entre os principais modelos de isolamento de locatários para o Queue Storage.
| Consideration | Filas compartilhadas | Filas para cada inquilino | Contas de armazenamento para cada locatário |
|---|---|---|---|
| Isolamento de dados | Baixo. O aplicativo impõe isolamento. | Baixo-médio | Alto |
| Isolamento de desempenho | Baixo | Baixo. A maioria das cotas e limites se aplica a toda a conta de armazenamento. | Alto |
| Complexidade da implantação | Baixo | Medium | Alto |
| Complexidade operacional | Baixo | Medium | Alto |
| Cenário de exemplo | Uma grande solução multilocatária tem uma camada de aplicativo compartilhada. | São emitidas URLs de assinatura de acesso partilhado (SAS) com âmbito de locatário. | Cada locatário tem seu próprio selo de implantação. |
Note
Considere quotas e limites ao selecionar um modelo de isolamento. Estes limites incluem limites de serviços Azure, objetivos de escalabilidade do Queue Storage e objetivos de escalabilidade para o fornecedor de recursos de Storage.
Filas compartilhadas
Se partilhar uma fila, todos os tenants partilham o seu alvo de throughput. Um tenant ocupado pode causar limitação para outros tenants. Para estratégias de distribuição da carga de mensagens, veja Estratégias de particionamento.
As filas não fornecem particionamento ou subfilas, portanto, todos os dados dos locatários podem ficar misturados. A sua aplicação deve identificar o tenant de cada mensagem e impor o isolamento durante o processamento. Não conceda aos inquilinos acesso direto a uma fila partilhada se não deverem aceder às mensagens de outros inquilinos.
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 controlo de acesso, mas não proporcionam isolamento de desempenho. Todas as filas na conta partilham a capacidade e os objetivos de desempenho da conta de armazenamento.
Neste cenário, pode usar o controlo de acesso do Queue Storage, incluindo SAS, para gerir o acesso aos dados de cada locatário.
Ao criar filas dinamicamente para cada locatário, considere como sua camada de aplicativo consome as mensagens da fila de cada locatário. Para cenários avançados, considere usar o Azure Service Bus, que suporta funcionalidades como sessões, encaminhamento automático de mensagens e tópicos e subscrições.
Contas de armazenamento para cada locatário
O nível mais forte de isolamento usa uma conta de armazenamento dedicada para cada locatário. Este modelo garante o isolamento total das chaves da conta de armazenamento, as quais pode alternar de forma independente. Ele também permite que você dimensione sua solução além dos limites e cotas para cada conta de armazenamento. Considere este modelo para locatários que têm registado volumes de mensagens elevados ou que requerem configurações regionais e metas de desempenho independentes. Mas você também deve considerar o número máximo de contas de armazenamento permitido em uma única assinatura do Azure.
Funcionalidades do Queue Storage que suportam multi-inquilino
As seguintes funcionalidades de Armazenamento em Fila podem ajudá-lo a implementar e operar o modelo de isolamento escolhido.
Assinaturas de acesso compartilhado
Quando usar Queue Storage a partir de uma aplicação cliente, considere se deve encaminhar pedidos pela sua camada de aplicação ou permitir que os clientes se liguem diretamente a uma fila. O acesso direto do cliente pode reduzir a carga nas suas aplicações back-end e o número de saltos na rede.
Uma assinatura de acesso partilhado (SAS) permite-lhe fornecer às aplicações clientes acesso limitado a uma fila. Pode restringir as operações que um cliente pode realizar e o período de tempo em que o acesso é permitido. Por exemplo, pode emitir um SAS que permite a um locatário adicionar mensagens à sua própria fila sem permitir que leia ou apague mensagens.
Use o padrão Valet Key para emitir tokens SAS restritos e com escopo da sua camada de aplicação. Autentique o cliente usando o sistema de autenticação da sua aplicação, determine a que fila do tenant pode aceder e emita um token apenas para as operações necessárias.
As políticas de acesso armazenado permitem-lhe definir uma única política a usar quando emite múltiplos tokens SAS de serviço. As políticas de acesso armazenado não se aplicam a tokens SAS de delegação de utilizadores ou tokens SAS de conta.
Delegação de usuários SAS
Um SAS de serviço ou SAS de conta é assinado com uma das suas chaves de conta de armazenamento. Um SAS de delegação de utilizadores é protegido com credenciais Microsoft Entra em vez disso. A sua camada de aplicação solicita uma chave de delegação de utilizador usando a sua própria identidade gerida, depois assina tokens com escopo e tempo limitado para cada tenant. Não distribuas nem guardes chaves de conta. A Microsoft recomenda usar um SAS de delegação de utilizador em vez de um SAS com chave de conta quando o seu design o suporta.
Utilize tempos de vida curtos dos tokens e planeie como revogar o acesso caso um token seja comprometido. Para correlacionar os registos da sua aplicação com os registos do Armazenamento de Filas, defina um ID de pedido de cliente (x-ms-client-request-id) nos pedidos de armazenamento e registe-o juntamente com o ID do tenant.
Controle de acesso baseado em identidade
O Armazenamento em Fila fornece controlo de acesso baseado em identidade através do Microsoft Entra ID. Utilize identidades geridas e controlo de acesso baseado em funções no Azure para autorizar a sua aplicação a aceder a filas sem armazenar chaves de conta. Definir o acesso à fila de cada tenant quando estes necessitarem de acesso direto. A autorização ao nível da fila não isola as mensagens individuais dos locatários dentro de uma fila partilhada.
Encryption
O Armazenamento em Fila encripta os dados em repouso com chaves geridas pela Microsoft por defeito. Para usar chaves geridas pelo cliente, configure a conta de armazenamento para usar uma chave de encriptação com escopo de conta para filas quando criar a conta. Não podes alterar o escopo desta chave de encriptação após a criação da conta.
Se os locatários exigirem chaves separadas geridas pelo cliente, use contas de armazenamento separadas. Os escopos de encriptação do Armazenamento de Blobs e as chaves fornecidas pelo cliente em pedidos individuais não se aplicam ao Queue Storage. Planeie a rotação de chaves e a revogação juntamente 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 acompanhar, como o número de mensagens ou operações para cada tenant. Você também pode usar a alocação de custos para acompanhar o custo de uso de cada locatário e habilitar o estorno em várias assinaturas.
O Armazenamento em Fila oferece capacidades de monitorização integradas. Quando os locatários partilham uma queue, inclua identificadores de locatário na telemetria da sua aplicação para que possa atribuir o processamento e a utilização de mensagens ao locatário correto.
Monitorize as taxas de pedidos e as respostas HTTP 500 e 503 para detetar filas ou contas que se aproximam dos limites de escalabilidade. Correlaciona esta telemetria com identificadores de locatários para que possas identificar locatários cujo uso afeta a capacidade partilhada.
Pode recolher registos de pedidos, depois agrupá-los e analisá-los juntamente com a telemetria da sua aplicação. Em soluções que geram grandes volumes de solicitações, considere se o benefício justifica o custo de capturar e processar esses registos.
Contributors
A Microsoft mantém este artigo. Os seguintes colaboradores escreveram este artigo.
Autor principal:
- John Downs | Engenheiro de Software Principal, Azure Patterns & Practices
Outros contribuidores:
- Dr. Christian Geuer-Pollmann | Engenheiro de Clientes Principal, FastTrack for Azure
- Patrick Horn | Gestor Sénior de Engenharia de Clientes, FastTrack for Azure
- Ben Hummerstone | Engenheiro de Clientes Principal, FastTrack for Azure
- Vic Perdana | Arquiteto de Soluções na Nuvem, Azure ISV
- Daniel Scott-Raynsford | Arquiteto de Soluções de Parceiros, Dados e IA
- Arsen Vladimirskiy | Engenheiro de Clientes Principal, FastTrack for Azure
Para ver perfis não públicos do LinkedIn, faça login no LinkedIn.