Saiba como provisionar novos locatários e registrá-los no catálogo

Aplica-se a:Banco de Dados SQL do Azure

Neste tutorial, você aprenderá a provisionar e catalogar padrões SaaS. Você também aprende como eles são implementados no aplicativo de banco de dados SaaS do Wingtip Tickets por locatário. Você cria e inicializa novos bancos de dados de locatários e os registra no catálogo de locatários do aplicativo. O catálogo é um banco de dados que mantém o mapeamento entre os muitos locatários do aplicativo SaaS e seus dados. O catálogo desempenha um papel importante no direcionamento de solicitações de aplicativo e gerenciamento para o banco de dados correto.

Neste tutorial, irá aprender a:

  • Provisionar um único novo locatário.
  • Provisionar um lote de locatários adicionais.

Para concluir este tutorial, devem ser cumpridos os seguintes pré-requisitos:

  • O aplicativo de banco de dados SaaS Wingtip Tickets por locatário é implantado. Para implantá-lo em menos de cinco minutos, consulte Implantar e explorar o aplicativo de banco de dados SaaS de tíquetes Wingtip por locatário.
  • O Azure PowerShell está instalado. Para obter mais informações, veja Introdução ao Azure PowerShell.

Introdução ao padrão de catálogo SaaS

Em um aplicativo SaaS multilocatário apoiado em banco de dados, é importante saber onde as informações de cada locatário são armazenadas. No padrão de catálogo SaaS, um banco de dados de catálogo é usado para manter o mapeamento entre cada locatário e o banco de dados no qual seus dados são armazenados. Esse padrão se aplica sempre que os dados do locatário são distribuídos em vários bancos de dados.

Cada locatário é identificado por uma chave no catálogo, que é mapeada para o local de seu banco de dados. Na aplicação Wingtip Tickets, a chave é formada a partir de um hash do nome do inquilino. Esse esquema permite que o aplicativo construa a chave a partir do nome do locatário incluído na URL do aplicativo. Outros esquemas de chaves de locatário podem ser usados.

O catálogo permite que o nome ou o local do banco de dados seja alterado com impacto mínimo no aplicativo. Em um modelo de banco de dados multilocatário, esse recurso também acomoda mover um locatário entre bancos de dados. O catálogo também pode ser usado para indicar se um locatário ou banco de dados está offline para manutenção ou outras ações. Esse recurso é explorado no tutorial Restaurar locatário único.

O catálogo também pode armazenar metadados adicionais de locatário ou banco de dados, como a versão do esquema, plano de serviço ou SLAs oferecidos aos locatários. O catálogo pode armazenar outras informações que permitem o gerenciamento de aplicativos, suporte ao cliente ou DevOps.

Além do aplicativo SaaS, o catálogo pode habilitar ferramentas de banco de dados. No exemplo de banco de dados SaaS de tíquetes de ponta de asa por locatário, o catálogo é usado para habilitar a consulta entre locatários, que é explorada no tutorial de relatórios ad hoc. O gerenciamento de tarefas entre bancos de dados é explorado nos tutoriais Gerenciamento de esquema e Análise de locatários.

Nos exemplos de SaaS de tíquetes de ponta de asa, o catálogo é implementado usando os recursos de gerenciamento de estilhaços da biblioteca de cliente do Elastic Database (EDCL). O EDCL está disponível em Java e no .NET Framework. O EDCL permite que um aplicativo crie, gerencie e use um mapa de estilhaços com suporte de banco de dados.

Um mapa de estilhaços contém uma lista de fragmentos (bancos de dados) e o mapeamento entre chaves (locatários) e fragmentos. As funções EDCL são usadas durante o provisionamento do locatário para criar as entradas no mapa de estilhaços. Eles são usados em tempo de execução por aplicativos para se conectar ao banco de dados correto. O EDCL armazena em cache informações de conexão para minimizar o tráfego para o banco de dados de catálogo e acelerar o aplicativo.

Importante

Os dados de mapeamento podem ser acessados no banco de dados do catálogo, mas não os edite. Edite dados de mapeamento usando somente APIs da Biblioteca de Cliente do Banco de Dados Elástico. A manipulação direta dos dados de mapeamento corre o risco de corromper o catálogo e não é suportada.

Introdução ao padrão de provisionamento SaaS

Ao adicionar um novo locatário em um aplicativo SaaS que usa um modelo de banco de dados de locatário único, você deve provisionar um novo banco de dados de locatário. O banco de dados deve ser criado no local e na camada de serviço apropriados. Ele também deve ser inicializado com o esquema apropriado e dados de referência. E ele deve ser registrado no catálogo sob a chave de locatário apropriada.

Diferentes abordagens para o provisionamento de banco de dados podem ser usadas. Você pode executar scripts SQL, implantar um bacpac ou copiar um banco de dados de modelo.

O provisionamento de banco de dados precisa fazer parte de sua estratégia de gerenciamento de esquema. Você deve certificar-se de que os novos bancos de dados sejam provisionados com o esquema mais recente. Esse requisito é explorado no tutorial de gerenciamento de esquema.

O aplicativo de banco de dados Wingtip Tickets por locatário provisiona novos locatários copiando um banco de dados de modelo chamado basetenantdb, que é implantado no servidor de catálogo. O provisionamento pode ser integrado ao aplicativo como parte de uma experiência de inscrição. Ele também pode ser suportado offline usando scripts. Este tutorial explora o provisionamento usando o PowerShell.

Os scripts de provisionamento copiam o banco de dados basetenantdb para criar um novo banco de dados de locatário em um pool elástico. O banco de dados do locatário é criado no servidor do locatário mapeado para o alias DNS do novo locatário . Esse alias mantém uma referência ao servidor usado para provisionar novos locatários e é atualizado para apontar para um servidor locatário de recuperação nos tutoriais de recuperação de desastres (DR usando restauração geográfica, DR usando georeplicação). Em seguida, os scripts inicializam o banco de dados com informações específicas do locatário e as registram no mapa de estilhaços do catálogo. Os bancos de dados de locatários recebem nomes com base no nome do locatário. Esse esquema de nomenclatura não é uma parte crítica do padrão. O catálogo mapeia a chave do locatário para o nome do banco de dados, portanto, qualquer convenção de nomenclatura pode ser usada.

Obtenha os scripts de aplicativo de banco de dados SaaS por locatário do Wingtip Tickets

Os scripts SaaS e o código-fonte do aplicativo Wingtip Tickets estão disponíveis no repositório GitHub WingtipTicketsSaaS-DbPerTenant . Confira as orientações gerais para conhecer as etapas para baixar e desbloquear os scripts SaaS do Wingtip Tickets.

Instruções detalhadas sobre o aprovisionamento e a catalogação

Para entender como o aplicativo Wingtip Tickets implementa o provisionamento de novos locatários, adicione um ponto de interrupção e siga o fluxo de trabalho enquanto provisiona um locatário.

  1. No ISE do PowerShell, abra ...\Learning Modules\ProvisionAndCatalog\Demo-ProvisionAndCatalog.ps1 e defina os seguintes parâmetros:

    • $TenantName = o nome do novo local (por exemplo, Bushwillow Blues).
    • $VenueType = um dos tipos de locais predefinidos: blues, música clássica, dança, jazz, judô, automobilismo, multiuso, ópera, rockmusic, futebol.
    • = $DemoScenario 1, Prover um único inquilino.
  2. Para adicionar um ponto de interrupção, coloque o cursor em qualquer lugar na linha que diz New-Tenant '. Em seguida, pressione F9.

    Screenshot shows a script with New-Tenant highlighted for adding a breakpoint.

  3. Para executar o script, pressione F5.

  4. Depois que a execução do script parar no ponto de interrupção, pressione F11 para entrar no código.

    Debugging

Rastreie a execução do script usando as opções do menu Depurar . Pressione F10 e F11 para passar por cima ou entrar nas funções chamadas. Para obter mais informações sobre como depurar scripts do PowerShell, consulte Dicas sobre como trabalhar com scripts do PowerShell e depurá-los.

Não é necessário seguir explicitamente este fluxo de trabalho. Ele explica como depurar o script.

  • Importe o módulo CatalogAndDatabaseManagement.psm1. Ele fornece uma abstração de catálogo e nível de locatário sobre as funções de gerenciamento de estilhaços. Este módulo encapsula grande parte do padrão do catálogo e vale a pena explorar.

  • Importe o módulo SubscriptionManagement.psm1. Ele contém funções para entrar no Azure e selecionar a assinatura do Azure com a qual você deseja trabalhar.

  • Obter os detalhes de configuração. Entre em Get-Configuration usando F11 e veja como a configuração do aplicativo é especificada. Nomes de recursos e outros valores específicos do aplicativo são definidos aqui. Não altere esses valores até estar familiarizado com os scripts.

  • Obter o objeto de catálogo. Entre em Get-Catalog, que compõe e retorna um objeto de catálogo usado no script de nível superior. Esta função usa funções de Gerenciamento de Fragmentos que são importadas do AzureShardManagement.psm1. O objeto catalog é composto pelos seguintes elementos:

    • $catalogServerFullyQualifiedName é construído usando o tronco padrão mais seu nome de usuário: catalog-user.database.windows<> .net.
    • $catalogDatabaseName é obtido a partir da configuração: tenantcatalog.
    • O objeto $shardMapManager é inicializado a partir da base de dados do catálogo.
    • O objeto $shardMap é inicializado a partir do mapa de partições horizontais tenantcatalog na base de dados do catálogo. Um objeto de catálogo é composto e retornado. Ele é usado no script de nível superior.
  • Calcular a nova chave de inquilino. É utilizada uma função hash para criar a chave do inquilino a partir do nome do inquilino.

  • Verificar se a chave de inquilino existe. O catálogo é verificado para garantir que a chave esteja disponível.

  • A base de dados do inquilino é aprovisionada com New-TenantDatabase. Use F11 para entender como o banco de dados é provisionado usando um modelo do Azure Resource Manager.

    O nome de base de dados é construído a partir do nome de inquilino para ficar claro quais as partições horizontais que pertencem a que inquilino. Você também pode usar outras convenções de nomenclatura de banco de dados. Um modelo do Resource Manager cria um banco de dados de locatário copiando um banco de dados de modelo (baseTenantDB) no servidor de catálogo. Como alternativa, você pode criar um banco de dados e inicializá-lo importando um bacpac. Ou você pode executar um script de inicialização a partir de um local conhecido.

    O modelo do Resource Manager está na pasta ...\Learning Modules\Common\: tenantdatabasecopytemplate.json

  • O banco de dados do locatário é inicializado posteriormente. O nome do local (locatário) e o tipo de local são adicionados. Você também pode fazer outras inicializações aqui.

  • O banco de dados de locatários é registrado no catálogo. Ele é registrado com Add-TenantDatabaseToCatalog usando a chave de locatário. Utilize F11 para avançar para os detalhes:

    • A base de dados do catálogo é adicionada ao mapa de partições horizontais (a lista de bases de dados conhecidas).
    • É criado o mapeamento que liga o valor da chave à partição horizontal.
    • Metadados adicionais sobre o locatário (o nome do local) são adicionados à tabela Locatários no catálogo. A tabela Locatários não faz parte do esquema de Gerenciamento de Fragmentos e não é instalada pela EDCL. Esta tabela ilustra como o banco de dados de catálogo pode ser estendido para oferecer suporte a dados adicionais específicos do aplicativo.

Após a conclusão do provisionamento, a execução retorna ao script Demo-ProvisionAndCatalog original. A página Eventos é aberta para o novo locatário no navegador.

Events page

Provisionar um lote de locatários

Este exercício prevê um lote de 17 inquilinos. Recomendamos que você provisione esse lote de locatários antes de iniciar outros tutoriais de banco de dados SaaS do Wingtip Tickets por locatário. Há mais do que apenas alguns bancos de dados para trabalhar.

  1. No ISE do PowerShell, abra ...\Learning Modules\ProvisionAndCatalog\Demo-ProvisionAndCatalog.ps1. Altere o parâmetro $DemoScenario para 3:

    • = $DemoScenario 3, Provisionar um lote de locatários.
  2. Para executar o script, pressione F5.

O script implementa um lote de inquilinos adicionais. Ele usa um modelo do Azure Resource Manager que controla o lote e delega o provisionamento de cada banco de dados a um modelo vinculado. Utilizar modelos desta forma permite que o Azure Resource Manager funcione como o mediador no processo de aprovisionamento do script. Os modelos provisionam bancos de dados em paralelo e lidam com tentativas, se necessário. O script é idempotente, portanto, se falhar ou parar por qualquer motivo, execute-o novamente.

Verifique o lote de locatários que foi implantado com êxito

Outros padrões de aprovisionamento

Outros padrões de provisionamento não incluídos neste tutorial:

Bancos de dados de pré-provisionamento: o padrão de pré-provisionamento explora o fato de que os bancos de dados em um pool elástico não adicionam custo extra. O faturamento é para o pool elástico, não para os bancos de dados. Bancos de dados ociosos não consomem recursos. Ao pré-provisionar bancos de dados em um pool e alocá-los quando necessário, você pode reduzir o tempo para adicionar locatários. O número de bancos de dados pré-provisionados pode ser ajustado conforme necessário para manter um buffer adequado para a taxa de provisionamento prevista.

Provisionamento automático: no padrão de provisionamento automático, um serviço de provisionamento provisiona servidores, pools e bancos de dados automaticamente, conforme necessário. Se desejar, você pode incluir bancos de dados de pré-provisionamento em pools elásticos. Se os bancos de dados forem desativados e excluídos, as lacunas nos pools elásticos poderão ser preenchidas pelo serviço de provisionamento. Esse serviço pode ser simples ou complexo, como lidar com o provisionamento em várias regiões geográficas e configurar a replicação geográfica para recuperação de desastres.

Com o padrão de provisionamento automático, um aplicativo cliente ou script envia uma solicitação de provisionamento para uma fila a ser processada pelo serviço de provisionamento. Em seguida, sonda o serviço para determinar a conclusão. Se o pré-provisionamento for usado, as solicitações serão tratadas rapidamente. O serviço fornece um banco de dados de substituição em segundo plano.

Próximos passos

Neste tutorial, ficou a saber como:

  • Provisionar um único novo locatário.
  • Provisionar um lote de locatários adicionais.
  • Entre nos detalhes do provisionamento de locatários e registre-os no catálogo.

Experimente o tutorial Monitoramento de desempenho.

Recursos adicionais