Multilocação para pesquisa vetorial no Azure Cosmos DB
"A OpenAI confia no Cosmos DB para escalar dinamicamente seu serviço ChatGPT – um dos aplicativos de consumo de crescimento mais rápido de todos os tempos – permitindo alta confiabilidade e baixa manutenção." — Satya Nadella
O Azure Cosmos DB destaca-se como a primeira base de dados operacional sem servidor completa do mundo com pesquisa vetorial, oferecendo escalabilidade e desempenho incomparáveis. Usando o Azure Cosmos DB, os usuários podem aprimorar seus recursos de pesquisa vetorial, garantindo alta confiabilidade e baixa manutenção para aplicativos multilocatário.
A multilocação permite que uma única instância de um banco de dados atenda vários clientes ou locatários simultaneamente. Essa abordagem compartilha eficientemente a infraestrutura e as despesas gerais operacionais, resultando em economia de custos e gerenciamento simplificado. É uma consideração de design crucial para aplicativos SaaS e algumas soluções corporativas internas.
A multilocação introduz complexidade. Seu sistema deve ser dimensionado de forma eficiente para manter o alto desempenho em todos os locatários, que podem ter cargas de trabalho, requisitos e SLAs (contratos de nível de serviço) exclusivos.
Imagine uma plataforma de pesquisa fictícia assistida por IA chamada ResearchHub. Servindo milhares de empresas e pesquisadores individuais, o ResearchHub gerencia diferentes bases de usuários, escalas de dados e SLAs. Garantir baixa latência de consulta e alto desempenho é vital para manter uma excelente experiência do usuário.
O Azure Cosmos DB, com sua capacidade de índice vetorial DiskANN, simplifica o design multilocatário, fornecendo armazenamento de dados eficiente e mecanismos de acesso para aplicativos de alto desempenho.
Modelos de multilocação no Azure Cosmos DB
No Azure Cosmos DB, recomendamos duas abordagens principais para gerenciar a multilocação: chave de partição por locatário ou conta por locatário, cada uma com seu próprio conjunto de benefícios e compensações.
1. Chave de partição por inquilino
Para uma maior densidade de locatários e menor isolamento, o modelo de chave de partição por locatário é eficaz. A cada locatário é atribuída uma chave de partição exclusiva dentro de um determinado contêiner, permitindo a separação lógica de dados. Essa estratégia funciona melhor quando cada locatário tem aproximadamente o mesmo volume de carga de trabalho. Se houver distorção significativa, os clientes devem considerar isolar esses inquilinos em sua própria conta. Além disso, se um único locatário tiver mais de 20 GB de dados, chaves de partição hierárquicas (HPK) devem ser usadas. Para a pesquisa vetorial em particular, o índice quantizedFlat pode ter um desempenho muito bom se as consultas de pesquisa vetorial puderem ser focadas em uma partição específica ou conjuntos de partições.
Benefícios:
- Eficiência de custos: compartilhar uma única conta do Cosmos DB entre vários locatários reduz a sobrecarga.
- Escalabilidade: Pode gerenciar um grande número de locatários, cada um isolado dentro de sua chave de partição.
- Gerenciamento simplificado: menos contas do Cosmos DB para gerenciar.
- Chaves de partição hierárquicas (HPK): otimiza a organização de dados e o desempenho de consultas em aplicativos multilocatários com um alto número de locatários.
Desvantagens:
- Contenção de recursos: recursos compartilhados podem levar à contenção durante o pico de uso.
- Isolamento limitado: Isolamento lógico, mas não físico, que pode não atender aos requisitos estritos de isolamento.
- Menos flexibilidade: flexibilidade reduzida por locatário para habilitar recursos no nível da conta, como replicação geográfica, restauração point-in-time (PITR) e chaves gerenciadas pelo cliente (CMK).
Particionamento hierárquico: organização de dados aprimorada
O particionamento hierárquico baseia-se no modelo de chave de partição por locatário, adicionando níveis mais profundos de organização de dados. Esse método envolve a criação de vários níveis de chaves de partição para gerenciamento de dados mais granular. O nível mais baixo de particionamento hierárquico deve ter alta cardinalidade. Normalmente, recomenda-se usar um ID/guid para esse nível para garantir escalabilidade contínua além de 20 GB por locatário.
Vantagens:
- Consultas otimizadas: o direcionamento mais preciso de subpartições no nível da partição pai reduz a latência da consulta.
- Escalabilidade aprimorada: facilita a segmentação de dados mais profunda para facilitar o dimensionamento.
- Melhor alocação de recursos: distribui uniformemente as cargas de trabalho, minimizando gargalos para altas contagens de locatários.
Considerações:
- Se os aplicativos tiverem poucos locatários e usarem particionamento hierárquico, isso pode levar a gargalos, já que todos os documentos com a mesma chave de primeiro nível gravarão na(s) mesma(s) partição(ões) física(s).
Exemplo: o ResearchHub pode estratificar dados dentro da partição de cada locatário organizando-os em vários níveis, como "DepartmentId" e "ResearcherId", facilitando o gerenciamento eficiente e as consultas.
2. Conta por inquilino
Para isolamento máximo, o modelo de conta por locatário é preferível. Cada locatário recebe uma conta dedicada do Cosmos DB, garantindo a separação completa dos recursos.
Benefícios:
- Alto isolamento: Sem contenção ou interferência devido a recursos dedicados.
- SLAs personalizados: os recursos e SLAs podem ser adaptados às necessidades individuais do locatário.
- Segurança reforçada: O isolamento físico de dados garante uma segurança robusta.
- Flexibilidade: os locatários podem habilitar recursos no nível da conta, como replicação geográfica, restauração point-in-time (PITR) e chaves gerenciadas pelo cliente (CMK), conforme necessário.
Desvantagens:
- Gerenciamento aumentado: maior complexidade no gerenciamento de várias contas do Cosmos DB.
- Custos mais elevados: Mais contas significam custos de infraestrutura mais elevados.
Isolamento de segurança com chaves gerenciadas pelo cliente
O Azure Cosmos DB permite chaves gerenciadas pelo cliente para criptografia de dados, adicionando uma camada extra de segurança para ambientes multilocatário.
Passos a implementar:
- Configurar o Cofre de Chaves do Azure: armazene suas chaves de criptografia com segurança.
- Link para o Cosmos DB: associe seu Cofre de Chaves à sua conta do Cosmos DB.
- Gire as chaves regularmente: melhore a segurança atualizando suas chaves rotineiramente.
O uso de chaves gerenciadas pelo cliente garante que os dados de cada locatário sejam criptografados exclusivamente, fornecendo segurança e conformidade robustas.
Outros modelos de isolamento
Isolamento de contêiner e banco de dados
Além dos modelos de chave de partição por locatário e conta por locatário, o Azure Cosmos DB fornece outros métodos de isolamento, como isolamento de contêiner e isolamento de banco de dados. Essas abordagens oferecem diferentes graus de isolamento de desempenho, embora não forneçam o mesmo nível de isolamento de segurança que o modelo de conta por locatário.
Isolamento de contentores
No modelo de isolamento de contêiner, cada locatário recebe um contêiner separado dentro de uma conta compartilhada do Cosmos DB. Este modelo permite algum nível de isolamento em termos de desempenho e alocação de recursos.
Benefícios:
- Melhor isolamento de desempenho: os contêineres podem receber recursos de desempenho específicos, minimizando o impacto da carga de trabalho de um locatário em outro.
- Gerenciamento mais fácil: gerenciar vários contêineres em uma única conta geralmente é mais fácil do que gerenciar várias contas.
- Eficiência de custos: Semelhante ao modelo de chave de partição por locatário, esse método reduz a sobrecarga de várias contas.
Desvantagens:
- Isolamento de segurança limitado: ao contrário de contas separadas, os contêineres dentro da mesma conta não fornecem isolamento de dados físicos. Assim, este modelo pode não cumprir requisitos de segurança rigorosos.
- Contenção de recursos: cargas de trabalho pesadas em um contêiner ainda podem afetar outros se os limites de recursos forem violados.
Isolamento do banco de dados
O modelo de isolamento de banco de dados atribui a cada locatário um banco de dados separado dentro de uma conta compartilhada do Cosmos DB. Isso proporciona um isolamento aprimorado em termos de alocação e gerenciamento de recursos.
Benefícios:
- Desempenho aprimorado: bancos de dados separados reduzem o risco de contenção de recursos, oferecendo melhor isolamento de desempenho.
- Alocação flexível de recursos: os recursos podem ser alocados e gerenciados no nível do banco de dados, fornecendo recursos de desempenho personalizados.
- Gerenciamento centralizado: mais fácil de gerenciar em comparação com várias contas, mas oferecendo mais isolamento do que a separação no nível do contêiner.
Desvantagens:
- Isolamento de segurança limitado: semelhante ao isolamento de contêiner, ter bancos de dados separados em uma única conta não fornece isolamento de dados físicos.
- Complexidade: gerenciar vários bancos de dados pode ser mais complexo do que gerenciar contêineres, especialmente à medida que o número de locatários cresce.
Embora os modelos de isolamento de contêiner e banco de dados não ofereçam o mesmo nível de isolamento de segurança que o modelo de conta por locatário, eles ainda podem ser úteis para obter isolamento de desempenho e gerenciamento flexível de recursos. Esses métodos são benéficos para cenários em que a eficiência de custos e o gerenciamento simplificado são prioridades, e o isolamento de segurança rigoroso não é um requisito crítico.
Ao avaliar cuidadosamente as necessidades e restrições específicas de seu aplicativo multilocatário, você pode escolher o modelo de isolamento mais adequado no Azure Cosmos DB, equilibrando desempenho, segurança e considerações de custo para obter os melhores resultados para seus locatários.
Considerações sobre implementação no mundo real
Ao projetar um sistema multilocatário com o Cosmos DB, considere estes fatores:
- Carga de trabalho do locatário: avalie o tamanho e a atividade dos dados para selecionar o modelo de isolamento apropriado.
- Requisitos de desempenho: alinhe sua arquitetura com SLAs e métricas de desempenho definidos.
- Gestão de custos: equilibre os custos de infraestrutura com a necessidade de isolamento e desempenho.
- Escalabilidade: planeje o crescimento escolhendo modelos escaláveis.
Implementação prática no Azure Cosmos DB
Chave de partição por locatário:
- Atribuir chaves de partição: chaves exclusivas para cada locatário garantem a separação lógica.
- Dados de armazenamento: Os dados do locatário estão confinados às respetivas chaves de partição.
- Otimizar consultas: use chaves de partição para consultas eficientes e direcionadas.
Particionamento hierárquico:
- Criar chaves de vários níveis: organize ainda mais os dados dentro das partições do locatário.
- Consultas direcionadas: melhore o desempenho com segmentação precisa de subpartições.
- Gerenciar recursos: distribua as cargas de trabalho uniformemente para evitar gargalos.
Conta por locatário:
- Fornecer contas separadas: cada locatário recebe uma conta dedicada do Cosmos DB.
- Personalizar recursos: adapte o desempenho e os SLAs aos requisitos do locatário.
- Garanta a segurança: o isolamento físico de dados oferece segurança e conformidade robustas.
Práticas recomendadas para usar o Azure Cosmos DB com pesquisa vetorial
O suporte do Azure Cosmos DB para a capacidade de índice vetorial DiskANN o torna uma excelente escolha para aplicativos que exigem pesquisas rápidas e de alta dimensão, como plataformas de pesquisa assistidas por IA, como o ResearchHub. Veja como você pode aproveitar esses recursos:
Armazenamento e recuperação eficientes:
- Indexação vetorial: use o índice vetorial DiskANN para armazenar e recuperar vetores de alta dimensão de forma eficiente. Isso é útil para aplicativos que envolvem pesquisas de semelhança em grandes conjuntos de dados, como reconhecimento de imagem ou semelhança de documentos.
- Otimização de desempenho: os recursos de pesquisa vetorial do DiskANN permitem pesquisas rápidas e precisas, garantindo baixa latência e alto desempenho, o que é fundamental para manter uma boa experiência do usuário.
Dimensionamento entre locatários:
- Chave de partição por locatário: utilize chaves de partição para isolar logicamente os dados do locatário enquanto se beneficia da infraestrutura escalável do Cosmos DB.
- Particionamento hierárquico: implemente o particionamento hierárquico para segmentar ainda mais os dados dentro da partição de cada locatário, melhorando o desempenho da consulta e a distribuição de recursos.
Segurança e conformidade:
- Chaves gerenciadas pelo cliente: implemente chaves gerenciadas pelo cliente para criptografia de dados em repouso, garantindo que os dados de cada locatário sejam isolados com segurança.
- Rotação regular de chaves: melhore a segurança girando regularmente as chaves de criptografia armazenadas no Cofre de Chaves do Azure.
Exemplo do mundo real: implementação do ResearchHub
Chave de partição por locatário:
- Atribuir chaves de partição: a cada organização (locatário) é atribuída uma chave de partição exclusiva.
- Armazenamento de dados: Todos os dados dos pesquisadores para um locatário são armazenados em sua partição, garantindo a separação lógica.
- Otimização de consultas: as consultas são executadas usando a chave de partição do locatário, melhorando o desempenho isolando o acesso aos dados.
Particionamento hierárquico:
- Chaves de partição de vários níveis: os dados dentro da partição de um locatário são segmentados por "DepartmentId" e "ResearcherId" ou outros atributos relevantes.
- Gerenciamento granular de dados: essa abordagem hierárquica permite que o ResearchHub gerencie e consulte dados de forma mais eficiente, reduzindo a latência e melhorando os tempos de resposta.
Conta por locatário:
- Contas separadas do Cosmos DB: Clientes de alto perfil ou aqueles com dados confidenciais recebem contas individuais do Cosmos DB.
- Configurações personalizadas: Os recursos e SLAs são adaptados para atender às necessidades específicas de cada locatário, garantindo desempenho e segurança ideais.
- Segurança de dados aprimorada: a separação física de dados com chaves de criptografia gerenciadas pelo cliente garante uma conformidade de segurança robusta.
Conclusão
A multilocação no Azure Cosmos DB, especialmente com seu recurso de índice vetorial DiskANN, oferece uma solução poderosa para criar aplicativos de IA escaláveis e de alto desempenho. Quer escolha modelos de chave de partição por inquilino, particionamento hierárquico ou conta por inquilino, pode equilibrar eficazmente o custo, a segurança e o desempenho. Usando esses modelos e práticas recomendadas, você pode garantir que seu aplicativo multilocatário atenda às diversas necessidades de seus clientes, oferecendo uma experiência de usuário excecional.
O Azure Cosmos DB fornece as ferramentas necessárias para criar um ambiente multilocatário robusto, seguro e escalável. Com o poder da indexação vetorial DiskANN, você pode fornecer pesquisas rápidas e de alta dimensão que impulsionam seus aplicativos de IA.
Soluções de banco de dados vetorial
Extensão pgvector do Azure PostgreSQL Server