Compartilhar via


Multilocatário e Azure Cosmos DB

Nesta página, descrevemos alguns dos recursos do Azure Cosmos DB que são úteis quando você está trabalhando com sistemas multilocatários. Também fornecemos links para diretrizes e exemplos de como usar o Azure Cosmos DB em uma solução multilocatário.

Recursos do Azure Cosmos DB que dão suporte à multilocação

Particionamento

Usando partições com seus contêineres do Azure Cosmos DB, você pode criar contêineres compartilhados entre vários locatários. Normalmente, você usa o identificador de locatário como uma chave de partição, mas também pode considerar o uso de várias chaves de partição em um locatário. Uma estratégia de particionamento bem planejada implementa efetivamente o Padrão de fragmentação. Em contêineres grandes, o Azure Cosmos DB espalha os locatários entre vários nós físicos para atingir um alto grau de escala.

Recomendamos que você explore o uso de chaves de partição hierárquicas para melhorar o desempenho de sua solução multilocatário. As chaves de partição hierárquicas permitem criar uma chave de partição que inclua vários valores. Por exemplo, você pode usar uma chave de partição hierárquica que inclua o identificador de locatário e o tipo de dados que você está armazenando. Essa abordagem permite que você dimensione além do limite de partição lógica de 20 GB por valor de chave de partição.

Para obter mais informações:

Como gerenciar unidades de solicitação

O modelo de preços do Azure Cosmos DB baseia-se no número de unidades de solicitação por segundo que você provisiona ou consome. Uma unidade de solicitação é uma abstração lógica do custo de uma operação ou consulta de banco de dados. Normalmente, você provisiona um número definido de unidades de solicitação por segundo para sua carga de trabalho, que é conhecida como taxa de transferência. O Azure Cosmos DB fornece várias opções para provisionar a taxa de transferência. Em um ambiente multilocatário, a seleção que você faz afeta o desempenho e o preço dos recursos do Azure Cosmos DB.

Um modelo de locação do Azure Cosmos DB envolve a implantação de contêineres separados para cada locatário em um banco de dados compartilhado. O Azure Cosmos DB permite provisionar unidades de solicitação para um banco de dados e todos os contêineres compartilham as unidades de solicitação. Se suas cargas de trabalho de locatário normalmente não se sobrepõem, essa abordagem pode ajudar a reduzir seus custos operacionais. No entanto, essa abordagem é suscetível ao problema do "vizinho barulhento" porque um contêiner de locatário único pode consumir uma quantidade desproporcional das unidades de solicitação provisionadas compartilhadas. Para atenuar esse problema, primeiro identifique os locatários barulhentos. Em seguida, como opção, você pode definir a taxa de transferência provisionada em um contêiner específico. Os outros contêineres no banco de dados continuam compartilhando a taxa de transferência, mas o locatário barulhento consome a própria taxa de transferência dedicada.

O Azure Cosmos DB também fornece uma camada sem servidor, que é adequada para cargas de trabalho com tráfego intermitente ou imprevisível. Como alternativa, o dimensionamento automático permite que você configure políticas para especificar a escala da taxa de transferência provisionada. Além disso, você pode aproveitar a capacidade de intermitência do Azure Cosmos DB, maximizando a utilização da capacidade de taxa de transferência provisionada, que teria sido limitada de outra forma. Em uma solução multilocatário, você pode combinar todas essas abordagens para dar suporte a diferentes tipos de locatário.

Observação

Ao planejar sua configuração do Azure Cosmos DB, considere as cotas e os limites de serviço.

Para monitorar e gerenciar os custos associados a cada locatário, cada operação que usa a API do Azure Cosmos DB inclui as unidades de solicitação consumidas. Você pode usar essas informações para agregar e comparar as unidades de solicitação reais consumidas em cada locatário e identificar locatários com características de desempenho diferentes.

Para obter mais informações:

Chaves gerenciadas pelo cliente

Alguns locatários podem exigir o uso das próprias chaves de criptografia. O Azure Cosmos DB fornece um recurso de chave gerenciada pelo cliente. Esse recurso é aplicado no nível de uma conta do Azure Cosmos DB, portanto, os locatários que exigem as próprias chaves de criptografia precisam ser implantados usando contas dedicadas do Azure Cosmos DB.

Para obter mais informações:

Modelos de isolamento

Ao trabalhar com um sistema multilocatário que usa o Azure Cosmos DB, você precisa tomar uma decisão sobre o nível de isolamento que deseja usar. B2B (entre empresas) refere-se à venda para uma empresa. BB2C (entre empresa e consumidor) refere-se à venda direta para um cliente individual que usa o produto ou serviço. O Azure Cosmos DB dá suporte a vários modelos de isolamento:

Necessidade de carga de trabalho Chave de partição por locatário Contêineres por locatário (taxa de transferência compartilhada) Contêiner por locatário (taxa de transferência dedicada) Banco de dados por locatário Conta do banco de dados por locatário
Consultas entre locatários Fácil (o contêiner atua como limite para consultas) Reserva fixa Reserva fixa Reserva fixa Reserva fixa
Densidade do locatário Alta (menor custo por locatário) Médio Baixo Baixo Baixo
Exclusão de dados do locatário Reserva fixa Fácil (remover contêiner quando o locatário sair) Fácil (remover contêiner quando o locatário sair) Fácil (remover banco de dados quando o locatário sair) Fácil (remover banco de dados quando o locatário sair)
Isolamento de segurança de acesso a dados Precisa ser implementada no aplicativo Contêiner de RBAC Contêiner de RBAC RBAC do banco de dados RBAC
Replicação geográfica A replicação geográfica por locatário não é possível Agrupar locatários em contas de banco de dados com base nos requisitos Agrupar locatários em contas de banco de dados com base nos requisitos Agrupar locatários em contas de banco de dados com base nos requisitos Agrupar locatários em contas de banco de dados com base nos requisitos
Prevenção de vizinhos barulhentos Nenhum Nenhum Sim Sim Sim
Latência de criação de novo locatário Imediata Rápido Rápido Médio Lento
Vantagens da modelagem de dados Nenhum colocação de entidades colocação de entidades Vários contêineres para entidades de locatário de modelo Vários contêineres e bancos de dados para locatários de modelo
Chave de criptografia O mesmo para todos os locatários O mesmo para todos os locatários O mesmo para todos os locatários O mesmo para todos os locatários Chave gerenciada pelo cliente por locatário
Requisitos de taxa de transferência >0 RUs por locatário >100 RUs por locatário >100 RUs por locatário (somente com dimensionamento automático, caso contrário >, 400 RUs por locatário) >400 RUs por locatário >400 RUs por locatário
Exemplos de casos de uso Aplicativos B2C Oferta Standard para aplicativos B2B Oferta Premium para aplicativos B2B Oferta Premium para aplicativos B2B Oferta Premium para aplicativos B2B

Chave de partição por locatário

Ao usar um contêiner único para múltiplos locatários, você poderá usar o suporte de particionamento do Azure Cosmos DB. Usando chaves de partição separadas para cada locatário, você pode consultar facilmente os dados para um locatário. Você também pode consultar vários locatários, mesmo que eles estejam em partições separadas. No entanto, as consultas entre partições têm um custo de RU (unidade de solicitação) maior do que as consultas de partição única.

Essa abordagem tende a funcionar bem quando a quantidade de dados armazenados em cada locatário é pequena. Pode ser uma boa opção para criar um modelo de preços que inclua uma camada gratuita e soluções B2C (empresa para consumidor). Em geral, usando contêineres compartilhados, você obtém uma densidade maior de locatários e, portanto, o menor preço por locatário.

É importante considerar a taxa de transferência do contêiner. Todos os locatários vão compartilhar a taxa de transferência do contêiner, portanto, o problema do "vizinho barulhento" poderá causar dificuldades de desempenho se os seus locatários tiverem cargas de trabalho altas ou sobrepostas. Às vezes, esse problema pode ser resolvido agrupando subconjuntos de locatários em contêineres diferentes e garantindo que cada grupo de locatários tenha padrões de uso compatíveis. Como alternativa, você pode considerar um modelo híbrido de locatário único e multilocatário. Agrupe locatários menores em contêineres particionados compartilhados e forneça contêineres dedicados a grandes clientes. Além disso, há recursos que podem ajudar a controlar o problema do vizinho barulhento ao modelar o locatário por partição, como realocação de taxa de transferência, capacidade de intermitência e controle de taxa de transferência no Java SDK.

Também é importante considerar a quantidade de dados que você armazena em cada partição lógica. O Azure Cosmos DB permite que cada partição lógica cresça até 20 GB. Se você tiver um locatário que precise armazenar mais de 20 GB de dados, considere distribuir os dados em várias partições lógicas. Por exemplo, em vez de ter uma chave de partição única de Contoso, você pode incluir sal nas chaves de partição criando várias chaves de partição para um locatário, como Contoso1, Contoso2 e assim por diante. Ao consultar os dados de um locatário, você pode usar a cláusula WHERE IN para corresponder a todas as chaves de partição. As chaves de partição hierárquicas também podem ser usadas para oferecer suporte a locatários grandes, com armazenamento superior a 20 GB, sem precisar usar chaves de partição sintéticas ou múltiplos de chave de partição por locatário.

Considere os aspectos operacionais da sua solução e as diferentes fases do ciclo de vida do locatário. Por exemplo, quando um locatário for movido para um tipo de preço dedicado, você provavelmente precisará migrar os dados para um contêiner diferente. Quando um locatário for desprovisionado, você precisará executar uma consulta de exclusão no contêiner para remover os dados e, para locatários grandes, essa consulta pode consumir uma quantidade significativa de taxa de transferência enquanto ela é executada.

Contêiner por locatário

Você pode provisionar contêineres dedicados para cada locatário. Os contêineres dedicados funcionam bem quando os dados que você armazena do locatário podem ser combinados em um contêiner único. Esse modelo fornece maior isolamento de desempenho do que o modelo de chave de partição por locatário acima e também fornece maior isolamento de segurança de acesso a dados por meio do RBAC do Azure.

Ao usar um contêiner para cada locatário, considere compartilhar a taxa de transferência com outros locatários provisionando a taxa de transferência no nível do banco de dados. Considere as restrições e os limites em relação ao número mínimo de unidades de solicitação para o banco de dados e ao número máximo de contêineres no banco de dados. Além disso, considere se os seus locatários exigem um nível garantido de desempenho e se eles estão suscetíveis ao problema do vizinho barulhento. Quando você compartilha a taxa de transferência no nível do banco de dados, a carga de trabalho ou o armazenamento em todos os contêineres deve ser relativamente uniforme. Caso contrário, você poderá ter um problema de vizinho barulhento, se houver um ou mais locatários grandes. Se necessário, planeje agrupar esses locatários em diferentes bancos de dados baseados em padrões de carga de trabalho.

Como alternativa, você pode provisionar a taxa de transferência dedicada para cada contêiner. Essa abordagem funciona bem em locatários maiores e em locatários que têm risco de ter o problema do vizinho barulhento. No entanto, a taxa de transferência de linha de base para cada locatário é maior, portanto, considere os requisitos mínimos e as implicações de custo desse modelo.

Se o modelo de dados do locatário requerer mais de uma entidade, desde que todas as entidades possam compartilhar a mesma chave de partição, elas poderão ser colocadas no mesmo contêiner. No entanto, se o modelo de dados do locatário for mais complexo e exigir entidades que não possam compartilhar a mesma chave de partição, considere os modelos de banco de dados por locatário ou conta de banco de dados por locatário abaixo. Confira nosso artigo sobre como modelar e particionar dados no Azure Cosmos DB usando um exemplo do mundo real para obter mais orientação.

O gerenciamento do ciclo de vida geralmente é mais simples quando os contêineres são dedicados aos locatários. Você pode migrar facilmente locatários entre modelos de taxa de transferência compartilhados e dedicados e, ao desprovisionar um locatário, você pode excluir rapidamente o contêiner.

Banco de dados por locatário

Você pode provisionar bancos de dados para cada locatário, na mesma conta de banco de dados. Assim como no modelo contêiner por locatário acima, esse modelo proporciona maior isolamento de desempenho do que o modelo chave de partição por locatário e também proporciona maior isolamento de segurança de acesso a dados por meio do RBAC do Azure.

Assim como o modelo de conta por locatário abaixo, essa abordagem oferece o mais alto nível de isolamento de desempenho, mas fornece a menor densidade de locatário. No entanto, essa opção é melhor quando cada locatário requer um modelo de dados mais complicado do que é viável no modelo de contêiner por locatário. Ou então, você deverá seguir essa abordagem quando for um requisito para que a criação de novos locatários seja rápida e/ou livre de qualquer sobrecarga para criar contas de locatário antecipadamente. Também pode ser o caso, para a estrutura de desenvolvimento de software específica que está sendo usada, que o modelo de banco de dados por locatário seja o único nível de isolamento de desempenho reconhecido nessa estrutura. Geralmente, o isolamento no nível de entidade (contêiner) e a colocação de entidade não têm suporte nativamente em tais estruturas.

Conta do banco de dados por locatário

O Azure Cosmos DB permite provisionar contas de banco de dados separadas para cada locatário, o que fornece o nível mais alto de isolamento, mas a densidade mais baixa. Assim como os modelos de contêiner por locatário e banco de dados por locatário acima, esse modelo fornece maior isolamento de desempenho do que o modelo de chave de partição por locatário. Ele também fornece maior isolamento de segurança de acesso a dados por meio do RBAC do Azure. Além disso, esse modelo fornece isolamento de segurança de criptografia de banco de dados no nível do locatário por meio de chaves gerenciadas pelo cliente.

Uma conta de banco de dados individual é dedicada a um locatário, o que significa que eles não estão sujeitos ao problema de vizinho barulhento. Você pode configurar o local da conta de banco de dados de acordo com os requisitos do locatário. Você também pode ajustar a configuração dos recursos do Azure Cosmos DB, como replicação geográfica e chaves de criptografia gerenciadas pelo cliente, para atender aos requisitos de cada locatário. Ao usar uma conta dedicada do Azure Cosmos DB por locatário, considere o número máximo de contas do Azure Cosmos DB por assinatura do Azure.

Se você usar esse modelo, deverá considerar a velocidade com que seu aplicativo precisa gerar novos locatários. A criação de conta no Azure Cosmos DB pode levar alguns minutos, portanto, talvez seja necessário criar contas antecipadamente. Se essa abordagem não for viável, considere o modelo de banco de dados por locatário.

Se você permitir que os locatários migrem de uma conta compartilhada para uma conta dedicada do Azure Cosmos DB, considere a abordagem de migração que você usará para mover os dados de um locatário entre as contas antigas e novas.

Abordagens híbridas

Você pode considerar uma combinação das abordagens acima para atender aos requisitos de diferentes locatários e ao seu modelo de preços. Por exemplo:

  • Provisione todos os clientes de avaliação gratuita em um contêiner compartilhado e use a ID do locatário ou uma chave de partição de chave sintética.
  • Ofereça uma camada Bronze paga que implanta um contêiner dedicado por locatário, mas com taxa de transferência compartilhada em um banco de dados.
  • Ofereça uma camada Silver superior que provisione a taxa de transferência dedicada para o contêiner do locatário.
  • Ofereça a camada Gold mais alta e forneça uma conta de banco de dados dedicada para o locatário, o que também permite que os locatários selecionem a geografia da implantação.

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Principais autores:

  • Paul Burpo | Engenheiro de cliente principal, FastTrack para Azure
  • John Downs | Engenheiro de software principal

Outros colaboradores:

  • Mark Brown | Gerente Principal de PM, Azure Cosmos DB
  • Deborah Chen | Gerente Principal de Programas
  • Theo van Kraay | Gerente Sênior de Programa, Azure Cosmos DB
  • Arsen Vladimirskiy | Engenheiro principal de atendimento ao cliente, FastTrack for Azure
  • Thomas Weiss | Gerente Principal de Programas
  • Vic Perdana | Arquiteto de Soluções de Nuvem, ISV do Azure

Para ver perfis não públicos do LinkedIn, entre no LinkedIn.

Próximas etapas

Examine as abordagens de armazenamento e de dados para multilocação.

Saiba mais sobre multilocação e o Azure Cosmos DB:

Consulte alguns de nossos outros cenários de arquitetura do Cosmos DB: