Revisão do Azure Well-Architected Framework – Azure Cosmos DB para NoSQL
Este artigo descreve as práticas recomendadas para o Azure Cosmos DB para NoSQL. Essas práticas recomendadas garantem que você possa implantar soluções no Azure Cosmos DB que sejam eficientes, confiáveis, seguras, otimizadas para custo e operacionalmente excelentes. Esta orientação se concentra nos cinco pilares da excelência da arquitetura no Well-Architected Framework:
Este guia de revisão pressupõe que você tenha um conhecimento prático do Azure Cosmos DB e conheça bem seus recursos. Para obter mais informações, consulte Azure Cosmos DB para NoSQL.
Pré-requisitos
Compreender os pilares do Well-Architected Framework pode ajudar a produzir uma arquitetura de nuvem de alta qualidade, estável e eficiente. Recomendamos que você comece revisando sua carga de trabalho usando a avaliação da Revisão do Azure Well-Architected Framework.
Para obter mais contexto, revise várias arquiteturas de referência que refletem as considerações deste guia em seu design. Essas arquiteturas incluem, mas não estão limitadas a:
- Aplicativos de missão crítica distribuídos globalmente usando o Azure Cosmos DB
- Aplicativos sem servidor usando o Azure Cosmos DB
- Aplicativo Web de várias regiões com replicação do Azure Cosmos DB
Confiabilidade
Como em qualquer serviço de nuvem, podem ocorrer falhas tanto no serviço quanto no lado da carga de trabalho. É impossível evitar todas as possíveis falhas, mas é um objetivo melhor minimizar os efeitos que uma única falha de componente pode ter em toda a sua carga de trabalho. Esta seção inclui considerações e recomendações para minimizar as consequências de uma falha pontual.
Lista de verificação de projeto
- Considere como o nível de consistência e o modo de replicação selecionados afetam o RPO (Recovery Point Objective, objetivo de ponto de recuperação) em uma paralisação em toda a região.
- Projete sua implantação de conta de banco de dados para que ela abranja pelo menos duas regiões no Azure. Além disso, distribua sua conta em várias zonas de disponibilidade quando oferecido em sua região do Azure.
- Avalie as estratégias de gravação de várias regiões e de uma única região para sua carga de trabalho. Para gravação de região única, projete sua carga de trabalho para ter pelo menos uma segunda região de leitura para failover. Habilite o failover automático para cenários de gravação de região única e leitura de várias regiões. Para gravação em várias regiões, compare as compensações em complexidade e consistência com as vantagens de gravar em várias regiões. Analise as expectativas durante uma paralisação regional para contas de gravação de uma e várias regiões.
- Habilite o failover gerenciado por serviço para sua conta.
- Projete um teste completo de alta disponibilidade para seu aplicativo.
- Percorra processos de backup comuns, incluindo, mas não limitado a: restauração point-in-time, recuperação de operações destrutivas acidentais, restauração de recursos excluídos e restauração para outra região em um point-in-time. Configure a conta com backup contínuo, escolhendo o período de retenção apropriado com base em suas necessidades de negócios.
- Explore o guia de criação de aplicativos resilientes, revise a política de repetição padrão para os SDKs e planeje o tratamento personalizado para erros transitórios específicos. Esses guias fornecerão práticas recomendadas para tornar o código do aplicativo resiliente a erros transitórios.
Recomendações
Recomendação | Benefício |
---|---|
Distribua sua conta do Azure Cosmos DB entre zonas de disponibilidade (quando disponível). | As zonas de disponibilidade fornecem energia, rede e resfriamento distintos, isolando falhas de hardware para um subconjunto de suas réplicas. O Azure Cosmos DB tem várias réplicas que abrangem uma única zona de disponibilidade aleatória quando o recurso de zonas de disponibilidade não é usado. Se o recurso de zona de disponibilidade for usado, as réplicas se estenderão por várias zonas de disponibilidade. |
Configure sua conta do Azure Cosmos DB para abranger pelo menos duas regiões. | A abrangência de várias regiões impede que sua conta fique totalmente indisponível se houver uma interrupção de região isolada. |
Habilite o failover gerenciado por serviço para sua conta. | O failover gerenciado por serviço permite que o Azure Cosmos DB altere a região de gravação de uma conta de várias regiões para preservar a disponibilidade. Essa alteração ocorre sem a interação do usuário. Compreenda as compensações com o failover gerenciado por serviço e planeje o failover forçado, se necessário. Para obter mais informações, consulte Criando aplicativos altamente disponíveis. |
Valide a disponibilidade testando o failover manualmente com o failover gerenciado pelo serviço desabilitado temporariamente. | Desabilitar temporariamente o failover de gerenciamento de serviço permite validar a alta disponibilidade de ponta a ponta do seu aplicativo com um failover manual iniciado usando um script ou o portal do Azure. Depois, você pode reativar o failover gerenciado pelo serviço. |
Definições do Azure Policy
- Política: Exigir pelo menos duas regiões
- Política: habilitar failover gerenciado por serviço
- Política: Exigir regiões de implantação específicas
Segurança
A segurança é uma parte crítica de qualquer arquitetura que pode ser facilmente negligenciada por conveniência. Reforce a segurança de sua carga de trabalho final considerando várias práticas recomendadas de segurança antecipadamente antes que o primeiro recurso ou prova de conceito seja criado. Esta seção inclui considerações e recomendações para reduzir o número de vulnerabilidades de segurança para sua carga de trabalho final.
Lista de verificação de projeto
- Reduza a área de ataque de superfície projetando para usar pontos de extremidade privados de acordo com a linha de base de segurança do Azure Cosmos DB.
- Crie funções, grupos e atribuições para acesso no plano de controle e no plano de dados à sua conta de acordo com o princípio de acesso com privilégios mínimos. Considere desabilitar a autenticação baseada em chave.
- Avalie a conformidade e as certificações de nível de serviço no contexto dos atuais requisitos globais de dados pessoais.
- Criptografe dados em repouso ou em movimento usando chaves gerenciadas por serviço ou chaves gerenciadas pelo cliente (CMKs).
- Audite o acesso do usuário, as violações de segurança e as operações de recursos com logs do plano de controle..
- Monitore a saída de dados, as alterações de dados, o uso e a latência com métricas de plano de dados.
Recomendações
Recomendação | Benefício |
---|---|
Implemente, no mínimo, as linhas de base de segurança de proteção de dados e gerenciamento de identidade. | Passe pela linha de base de segurança, incluindo gerenciamento de identidade e proteção de dados. Implemente as recomendações para proteger sua conta do Azure Cosmos DB. |
Desative pontos de extremidade públicos e use pontos de extremidade privados sempre que possível. | Evite deixar pontos de extremidade públicos desnecessários ou não utilizados disponíveis para ataques de área de superfície para sua conta. |
Use o controle de acesso baseado em função para limitar o acesso do plano de controle a identidades e grupos específicos e dentro do escopo de atribuições bem definidas. | Use o controle de acesso baseado em função para impedir o acesso não intencional à sua conta. Atribua funções e permissões apropriadas a usuários ou aplicativos que acessam o Azure Cosmos DB. |
Crie regras e pontos de extremidade de rede virtual para limitar o acesso à conta. | Implemente pontos de extremidade de serviço de rede virtual e regras de firewall para restringir o acesso à sua conta do Azure Cosmos DB. Use NSGs (grupos de segurança de rede) para controlar o tráfego de entrada e saída de e para os recursos do Azure Cosmos DB. Limitar o acesso a redes confiáveis e aplicar medidas de segurança de rede apropriadas ajuda a proteger seus dados contra acesso não autorizado. |
Siga as melhores práticas de desenvolvimento de software para acesso seguro aos dados. | Siga práticas de codificação seguras e execute revisões de código seguras ao desenvolver aplicativos que interagem com o Azure Cosmos DB. Proteja-se contra vulnerabilidades de segurança comuns, como ataques de injeção, scripts entre sites (XSS) ou referências diretas de objetos inseguras (IDOR). Implemente validação de entrada, consultas parametrizadas e tratamento de erros apropriado para códigos de status HTTP comuns para evitar riscos de segurança. |
Monitore os logs do plano de controle em busca de violações. | O monitoramento ajuda a rastrear padrões de acesso e logs de auditoria, garantindo que seu banco de dados permaneça seguro e em conformidade com as regulamentações relevantes de proteção de dados. O monitoramento de métricas de plano de dados também pode ajudar a identificar padrões desconhecidos que podem revelar uma violação de segurança. Para obter mais informações, consulte Lista de verificação de segurança para bancos de dados do Azure. |
Habilitar o Microsoft Defender para Azure Cosmos DB | O Microsoft Defender detecta tentativas de explorar bancos de dados em sua conta do Azure Cosmos DB para NoSQL. O Defender detecta possíveis injeções de SQL, padrões de acesso suspeitos e outras possíveis explorações. |
Definições do Azure Policy
- Política: Habilitar o Microsoft Defender
- Política: Exigir um ponto de extremidade de serviço de rede virtual
- Política: Desabilitar a autenticação local
- Política: Exigir regras de firewall
Otimização de custo
As características da sua carga de trabalho e a implementação da sua solução podem influenciar o custo final da execução no Azure. Considere os principais drivers, como sua estratégia de particionamento, nível de consistência, replicação e tipo de gravação ao projetar sua carga de trabalho. Ao dimensionar sua carga de trabalho, considere a natureza de leitura/gravação de seus dados, o tamanho dos itens médios, a normalização e o TTL. Esta seção inclui considerações e recomendações para otimizar os custos de sua carga de trabalho.
- Crie uma política de indexação que considere as operações e consultas que você normalmente faz em sua carga de trabalho.
- Determine uma chave de partição ou um conjunto de chaves de partição que tenham um valor que tenha alta cardinalidade e não seja alterado. Use as diretrizes e práticas recomendadas existentes para ajudar a selecionar uma chave de partição apropriada. Além disso, considere sua política de indexação ao determinar uma chave de partição.
- Selecione um esquema de alocação de taxa de transferência apropriado para sua carga de trabalho. Analise os benefícios da taxa de transferência padrão e de dimensionamento automático distribuída no nível do banco de dados ou do contêiner. Além disso, considere serverless quando apropriado. Revise os padrões de tráfego da carga de trabalho no contexto da seleção de um esquema de alocação de taxa de transferência.
- Considere os níveis de consistência relacionados à sua carga de trabalho. Além disso, considere se as sessões do cliente devem alterar o nível de consistência padrão.
- Calcule o armazenamento de dados geral esperado para sua carga de trabalho. O tamanho dos itens e índices influenciam o custo de armazenamento de dados. Dimensione o impacto da replicação e do backup nos custos de armazenamento.
- Crie uma estratégia para remover automaticamente itens mais antigos que não são mais usados ou necessários. Se necessário, exporte esses itens para uma solução de armazenamento de baixo custo antes de serem removidos.
- Avalie suas consultas mais comuns que minimizam pesquisas entre partições. Use essas informações para informar o processo de seleção de uma chave de partição ou personalização de uma política de indexação.
Recomendações
Recomendação | Benefício |
---|---|
Monitore a utilização e os padrões de RU/s. | Use métricas para monitorar o consumo de RU desde o início da sua solução. Use consultas e outras técnicas de pesquisa de dados para localizar antipadrões no código do aplicativo. |
Personalize sua política de indexação para mapear para sua carga de trabalho. | A política de indexação padrão indexa todos os caminhos em um item, e essa política pode ter impactos significativos no consumo e nos custos da RU. Use uma política de indexação criada com base apenas nos caminhos que você precisa indexar para suas consultas comuns. Para cargas de trabalho pesadas de gravação, desabilite a indexação automática de colunas não usadas em consultas. |
Selecione a(s) chave(s) de partição que são ideais para sua carga de trabalho. | As chaves de partição devem distribuir o consumo de taxa de transferência e o armazenamento de dados uniformemente entre partições lógicas. A seleção também deve minimizar o número de consultas de partição cruzada não limitadas. Evite partições quentes que recebem uma quantidade desproporcional de tráfego, pois partições desbalanceadas podem aumentar os custos de taxa de transferência e erros transitórios. Use as consultas de pesquisa mais comuns para determinar possíveis chaves de partição que provavelmente executam apenas consultas de partição única ou de partição cruzada limitada. |
Use taxa de transferência provisionada ou sem servidor, provisionamento manual ou dimensionamento automático, no nível do banco de dados ou do contêiner, quando apropriado para sua carga de trabalho. | Compare os tipos de taxa de transferência provisionada e selecione a opção apropriada para sua carga de trabalho. Geralmente, cargas de trabalho menores e de desenvolvimento/teste podem se beneficiar da taxa de transferência sem servidor ou da taxa de transferência compartilhada manual no nível do banco de dados. Cargas de trabalho maiores e de missão crítica podem se beneficiar da taxa de transferência provisionada atribuída no nível do contêiner. |
Configure o nível de consistência padrão para seu aplicativo. Quando apropriado, faça downgrade do nível de consistência padrão em sessões de cliente. | Talvez nem sempre seja necessário alterar o nível de consistência padrão padrão ou substituí-lo em sessões de cliente. Considere os custos mais altos associados a leituras em níveis de consistência mais fortes. |
Para cargas de trabalho de desenvolvimento/teste, use o emulador do Azure Cosmos DB. | O emulador do Azure Cosmos DB é uma opção para desenvolvimento/teste e integração contínua que pode economizar nos custos dessas cargas de trabalho comuns para sua equipe de desenvolvimento. O emulador também está disponível como uma imagem de contêiner do Docker. |
Usar operações de lote transacionais | Projete partições para aproveitar as operações transacionais em lote dentro de uma chave de partição lógica para inserir. Use operações em lote em SDKs do lado do cliente para inserir, atualizar ou excluir vários documentos em uma única solicitação de transação. Essa etapa pode reduzir o número de solicitações individuais e, eventualmente, levar a uma melhor eficiência da taxa de transferência. |
Use a projeção para reduzir os custos de taxa de transferência de grandes conjuntos de resultados de consulta. | Consultas de autor para projetar apenas o número mínimo de campos necessários de um conjunto de resultados. Se forem necessários cálculos em campos, avalie o custo de taxa de transferência da execução desses cálculos no lado do servidor versus no lado do cliente. |
Evite usar consultas de partição cruzada ilimitadas. | Avalie e crie consultas para garantir que elas pesquisem em uma única partição lógica sempre que possível. Use filtros de consulta para controlar quais partições lógicas os destinos de consulta. Se uma consulta precisar pesquisar em partições lógicas, vincule-a a pesquisar apenas um subconjunto de partições lógicas em vez de uma verificação completa. |
Implemente o tempo de vida útil (TTL) para remover itens não utilizados. | Use o TTL para excluir automaticamente os dados que não são mais necessários. Gerencie os custos de armazenamento removendo dados expirados ou obsoletos. Se necessário, exporte os dados expirados para uma solução de armazenamento de baixo custo. |
Considere um armazenamento analítico para agregações pesadas. | O repositório analítico do Azure Cosmos DB sincroniza automaticamente seus dados com um repositório de colunas separado para otimizar grandes agregações, relatórios e consultas analíticas. |
Definições do Azure Policy
Excelência operacional
As cargas de trabalho devem ser monitoradas após serem implantadas para garantir que tenham o desempenho esperado. Além disso, o monitoramento de cargas de trabalho pode ajudar a desbloquear novas eficiências não imediatamente óbvias durante a fase de planejamento. Em cenários catastróficos, os dados de diagnóstico são a chave para descobrir por que um incidente de alta gravidade pode ter ocorrido. Esta seção inclui considerações e recomendações para monitorar eventos e características de suas cargas de trabalho.
Lista de verificação de projeto
- Elabore uma estratégia de monitoramento de log e métricas para diferenciar diferentes cargas de trabalho, sinalizar cenários excepcionais, controlar padrões em exceções/erros e controlar o desempenho da máquina host.
- Projete grandes cargas de trabalho para usar operações em massa sempre que possível.
- Defina vários alertas para monitorar a limitação, analisar a alocação de taxa de transferência e controlar o tamanho dos dados.
- Projete uma estratégia de monitoramento para a disponibilidade de sua solução entre regiões.
- Crie e aplique práticas recomendadas para automatizar a implantação de sua conta e recursos do Azure Cosmos DB para NoSQL.
- Planeje limites de métrica esperados com base no design de partição e índice. Certifique-se de que haja um plano para monitorar essas métricas para determinar o quão perto elas estão dos limites planejados.
Recomendações
Recomendação | Benefício |
---|---|
Verifique se os desenvolvedores de aplicativos estão usando a versão mais recente do SDK do desenvolvedor. | Cada SDK do Azure Cosmos DB para NoSQL tem uma versão mínima recomendada. Para obter mais informações, consulte SDK do .NET e SDK do Java. |
Crie identificadores no aplicativo cliente para diferenciar cargas de trabalho. | Considere sinalizadores, como o sufixo user-agent, para identificar a qual carga de trabalho cada entrada de log ou métrica deve ser associada. |
Capture diagnósticos complementares usando o SDK do desenvolvedor. | Use as técnicas de injeção de diagnóstico para cada SDK para adicionar informações suplementares sobre a carga de trabalho junto com métricas e logs padrão. Para obter mais informações, consulte SDK do .NET e SDK do Java. |
Crie alertas associados aos recursos da máquina host. | Problemas de conectividade e disponibilidade podem ocorrer devido a problemas na máquina host do lado do cliente. Monitore recursos como CPU, memória e armazenamento em computadores host com aplicativos cliente usando o Azure Cosmos DB para SDKs NoSQL. |
Use os recursos em massa dos SDKs de cliente para grandes operações. | Cenários que exigem um alto grau de taxa de transferência se beneficiam do uso do recurso em massa do SDK. O recurso em massa gerencia e agrupa automaticamente as operações para maximizar a taxa de transferência. |
Crie alertas para limitação de taxa de transferência. | Use alertas para controlar a limitação da taxa de transferência além dos limites esperados. Com o tempo, revise e ajuste alertas à medida que você aprende mais sobre sua carga de trabalho em relação ao Azure Cosmos DB. A métrica Consumo de RU Normalizado é uma métrica que mede a porcentagem de utilização da taxa de transferência provisionada em um banco de dados ou contêiner. Se essa métrica estiver consistentemente em 100%, as solicitações provavelmente retornarão um erro transitório. |
Acompanhe o desempenho da consulta usando métricas. | Use métricas para acompanhar o desempenho de suas principais consultas ao longo do tempo. Avalie se há eficiências a serem encontradas atualizando a política de indexação ou alterando consultas. Se o desempenho da consulta for ruim, solucione problemas de desempenho e aplique as práticas recomendadas de consulta. Para obter mais informações, consulte Dicas de desempenho de consulta. |
Use modelos para implantar automaticamente os recursos da conta. | Considere os modelos do Gerenciador de Recursos do Azure, Bicep ou Terraform para automatizar a implantação de sua conta e recursos subsequentes. Certifique-se de que sua equipe esteja usando os mesmos modelos para implantar em outros ambientes que não sejam de produção. |
Acompanhe as principais métricas para identificar problemas comuns em sua carga de trabalho. | Use métricas específicas para encontrar problemas comuns em sua carga de trabalho, incluindo, mas não limitado a; Utilização de RU, utilização de RU por partição, limitação e volumes de solicitação por tipo. Para obter mais informações, consulte Monitorar referência de dados. |
Definições do Azure Policy
Eficiência de desempenho
- Defina uma linha de base de desempenho para seu aplicativo. Meça quantos usuários e transações simultâneas você pode precisar manipular. Considere as características da carga de trabalho, como o fluxo médio de usuários, as operações comuns e os picos de uso.
- Pesquise suas consultas mais comuns e complexas. Identifique consultas que usam várias pesquisas, associações ou agregações. Considere essas consultas em quaisquer considerações de design para a chave de partição ou política de indexação.
- Para as consultas mais comuns, determine o número de resultados esperados por página. Esse número ajudará a formalizar uma contagem de itens em buffer para resultados pré-buscados.
- Pesquise seus usuários-alvo. Determine quais regiões do Azure estão mais próximas delas.
- Identificar consultas que usam um ou mais campos de ordenação. Além disso, identifique as operações que afetam vários campos. Inclua esses campos explicitamente no design da política de indexação.
- Projete itens para que seus documentos JSON correspondentes sejam os menores possíveis. Considerar a divisão de dados entre vários itens, se necessário.
- Identifique consultas em matrizes filhas e determine se elas são candidatas a subconsultas mais eficientes.
- Determine se sua carga de trabalho requer um armazenamento analítico. Considere armazenamentos analíticos e serviços como o Azure Synapse Link para consultas extremamente complexas.
Recomendação | Benefício |
---|---|
Configure sua taxa de transferência com base em sua linha de base de desempenho. | Use ferramentas como a calculadora de capacidade para determinar a quantidade de taxa de transferência necessária para sua linha de base de desempenho. Use recursos como o dimensionamento automático para dimensionar sua taxa de transferência real para corresponder mais à sua carga de trabalho real. Monitore seu consumo real de taxa de transferência depois e faça ajustes. |
Use técnicas de otimização nos lados do cliente e do servidor quando apropriado. | Aproveite o cache integrado integrado. Configure o SDK para gerenciar quantos itens são pré-buscados (armazenados em buffer) e retornados para cada página. |
Implante o Azure Cosmos DB para NoSQL nas regiões mais próximas de seus usuários finais. | Reduza a latência implantando o Azure Cosmos DB para NoSQL nas regiões mais próximas de seus usuários finais, tanto quanto possível. Aproveite a replicação de leitura para fornecer desempenho de leitura com desempenho, independentemente de como você configura a gravação (uma ou várias regiões). Configure o SDK (.NET/Java) para preferir regiões mais próximas do usuário final. |
Configure o SDK para o modo direto. | O modo direto é a opção preferida para melhor desempenho. Esse modo permite que o cliente abra conexões TCP diretamente para partições no serviço e envie solicitações diretamente sem gateway intermediário. Esse modo oferece melhor desempenho porque há menos saltos de rede. |
Desative a indexação para operações em massa. | Se houver muitas operações de inserção/substituição/upsert, desabilite a indexação para melhorar a velocidade da operação ao usar o suporte em massa do SDK correspondente. A indexação pode ser reativada imediatamente mais tarde. |
Crie índices compostos para campos que são usados em operações complexas. | Índices compostos podem aumentar a eficiência das operações em vários campos por ordens de magnitude. Em muitos casos, use índices compostos para ORDER BY instruções com vários campos. |
Otimize as máquinas cliente host para os SDKs. | Para os casos mais comuns, use pelo menos 4 núcleos e 8 GB de memória em máquinas host de 64 bits usando os SDKs (.NET/Java). Além disso, habilite a rede acelerada em máquinas host. |
Use o padrão singleton para a CosmosClient classe na maioria dos SDKs. |
Use a classe de cliente na maioria dos SDKs como um singleton. A classe de cliente gerencia seu próprio ciclo de vida e foi projetada para não ser descartada. A criação e o descarte constantes de instâncias podem resultar em desempenho reduzido. |
Mantenha tamanhos de item inferiores a 100 KB . | Itens maiores consomem mais taxa de transferência para operações comuns de leitura e gravação. Consultas em itens maiores que projetam todos os campos também podem ter um custo de taxa de transferência significativo. |
Use subconsultas estrategicamente para otimizar consultas que unem grandes conjuntos de dados. | As consultas que unem matrizes filhas podem aumentar em complexidade se várias matrizes estiverem envolvidas e não forem filtradas. Por exemplo, uma consulta que une mais de duas matrizes de pelo menos 10 itens cada pode ser expandida para 1.000+ tuplas. Otimize expressões de associação automática usando subconsultas para filtrar as matrizes antes de unir matrizes no item. Para consultas entre partições, otimize sua consulta para incluir um filtro na chave de partição para otimizar o roteamento da consulta para a menor quantidade de partições possível. |
Use cargas de trabalho analíticas para as consultas mais complexas. | Se você executar agregações frequentes ou ingressar em consultas em contêineres grandes, considere habilitar o repositório analítico e fazer consultas no Azure Synapse Analytics. |
Definições do Azure Policy
Recursos adicionais
Considere mais recursos relacionados ao Azure Cosmos DB para NoSQL.
Diretrizes do Centro de Arquitetura do Azure
- Multilocatário e Azure Cosmos DB
- Pesquisa visual no varejo com o Azure Cosmos DB
- Jogos com o Azure Cosmos DB
- Aplicativos sem servidor usando o Azure Cosmos DB
- Personalização usando o Azure Cosmos DB