Implantar e explorar um aplicativo SaaS multilocatário que usa o padrão de banco de dados por locatário com o Banco de Dados SQL do Azure

Aplica-se a:Banco de Dados SQL do Azure

Neste tutorial, você implanta e explora o aplicativo de banco de dados SaaS de tíquetes de Wingtip por locatário (Wingtip). O aplicativo usa um padrão de banco de dados por locatário para armazenar os dados de vários locatários. O aplicativo foi projetado para exibir recursos do Banco de Dados SQL do Azure que simplificam como habilitar cenários SaaS.

Cinco minutos depois de selecionar Implantar no Azure, você terá um aplicativo SaaS multilocatário. O aplicativo inclui um banco de dados que é executado no Banco de Dados SQL do Azure. O aplicativo é implantado com três locatários de exemplo, cada um com seu próprio banco de dados. Todos os bancos de dados são implantados em um pool elástico SQL. O aplicativo é implantado em sua assinatura do Azure. Você tem acesso total para explorar e trabalhar com os componentes individuais do aplicativo. O código-fonte do aplicativo C# e os scripts de gerenciamento estão disponíveis no repositório GitHub WingtipTicketsSaaS-DbPerTenant.

Neste tutorial, ficará a saber:

  • Como implantar o aplicativo SaaS Wingtip.
  • Onde obter o código-fonte do aplicativo e os scripts de gerenciamento.
  • Sobre os servidores, pools e bancos de dados que compõem o aplicativo.
  • Como os locatários são mapeados para seus dados com o catálogo.
  • Como provisionar um novo inquilino.
  • Como monitorar a atividade do locatário no aplicativo.

Uma série de tutoriais relacionados oferece para explorar vários padrões de design e gerenciamento de SaaS. Os tutoriais são construídos além dessa implantação inicial. Ao usar os tutoriais, você pode examinar os scripts fornecidos para ver como os diferentes padrões SaaS são implementados. Os scripts demonstram como os recursos do Banco de dados SQL simplificam o desenvolvimento de aplicativos SaaS.

Pré-requisitos

Para concluir este tutorial, verifique se o Azure PowerShell está instalado. Para obter mais informações, veja Introdução ao Azure PowerShell.

Implante o aplicativo SaaS Wingtip Tickets

Planejar os nomes

Nas etapas desta seção, você fornece um valor de usuário que é usado para garantir que os nomes de recursos sejam globalmente exclusivos. Você também fornece um nome para o grupo de recursos que contém todos os recursos criados por uma implantação do aplicativo. Para uma pessoa fictícia chamada Ann Finley, sugerimos:

  • Utilizador: af1 é composto pelas iniciais de Ann Finley mais um algarismo. Se você implantar o aplicativo uma segunda vez, use um valor diferente. Um exemplo é af2.
  • Grupo de recursos: wingtip-dpt-af1 indica que este é o aplicativo de banco de dados por locatário. Anexe o nome de usuário af1 para correlacionar o nome do grupo de recursos com os nomes dos recursos que ele contém.

Escolha seus nomes agora e escreva-os.

Passos

  1. Para abrir o modelo de implantação de banco de dados SaaS de tíquetes de ponta de asa por locatário no portal do Azure, selecione Implantar no Azure.

    Image showing a button labeled

  2. Insira valores no modelo para os parâmetros necessários.

    Importante

    Alguns firewalls de autenticação e servidor são intencionalmente desprotegidos para fins de demonstração. Recomendamos que você crie um novo grupo de recursos. Não use grupos de recursos, servidores ou pools existentes. Não use este aplicativo, scripts ou quaisquer recursos implantados para produção. Exclua este grupo de recursos quando terminar o aplicativo para interromper a cobrança relacionada.

    • Grupo de recursos: selecione Criar novo e forneça o nome exclusivo escolhido anteriormente para o grupo de recursos.
    • Localização: selecione um local na lista suspensa.
    • Usuário: use o valor do nome de usuário escolhido anteriormente.
  3. Implemente a aplicação.

    a. Selecione para concordar com os termos e condições.

    b. Selecione Comprar.

  4. Para monitorar o status da implantação, selecione Notificações (o ícone de sino à direita da caixa de pesquisa). A implantação do aplicativo SaaS Wingtip Tickets leva aproximadamente cinco minutos.

    Deployment succeeded

Baixe e desbloqueie os scripts de gerenciamento de Wingtip Tickets

Enquanto o aplicativo é implantado, baixe o código-fonte e os scripts de gerenciamento.

Importante

O conteúdo executável (scripts e DLLs) pode ser bloqueado pelo Windows quando .zip arquivos são baixados de uma fonte externa e extraídos. Siga as etapas para desbloquear o arquivo .zip antes de extrair os scripts. O desbloqueio garante que os scripts possam ser executados.

  1. Navegue até o repositório GitHub WingtipTicketsSaaS-DbPerTenant.
  2. Selecione Clone or download (Clonar ou transferir).
  3. Selecione Baixar ZIP e salve o arquivo.
  4. Clique com o botão direito do mouse no arquivo WingtipTicketsSaaS-DbPerTenant-master.zip e selecione Propriedades.
  5. Na guia Geral, selecione Desbloquear>Aplicação.
  6. Selecione OK e extraia os arquivos

Os scripts estão localizados na pasta ...\WingtipTicketsSaaS-DbPerTenant-master\Learning Modules.

Atualizar o arquivo de configuração do usuário para esta implantação

Antes de executar qualquer script, atualize o grupo de recursos e os valores de usuário no arquivo de configuração do usuário. Defina essas variáveis para os valores usados durante a implantação.

  1. No ISE do PowerShell, abra ...\Learning Modules\UserConfig.psm1
  2. Atualize ResourceGroupName e Name com os valores específicos para sua implantação (somente nas linhas 10 e 11).
  3. Guarde as alterações.

Esses valores são referenciados em quase todos os scripts.

Executar a aplicação

O aplicativo mostra locais que hospedam eventos. Os tipos de locais incluem salas de concerto, clubes de jazz e clubes esportivos. Na Wingtip Tickets, os locais são registados como inquilinos. Ser um inquilino dá a um local uma maneira fácil de listar eventos e vender ingressos para seus clientes. Cada local recebe um site personalizado para listar seus eventos e vender ingressos.

Internamente no aplicativo, cada locatário obtém um banco de dados implantado em um pool elástico.

Uma página central do Hub de Eventos fornece uma lista de links para os locatários em sua implantação.

  1. Use o URL para abrir o Hub de Eventos no seu navegador da Web: http://events.wingtip-dpt.<user.trafficmanager.net>. Substitua <o usuário pelo valor de usuário> da sua implantação.

    Events Hub

  2. Selecione Fabrikam Jazz Club no Hub de Eventos.

    Events

Gestor de Tráfego do Azure

O aplicativo Wingtip usa o Gerenciador de Tráfego do Azure para controlar a distribuição de solicitações de entrada. A URL para acessar a página de eventos de um locatário específico usa o seguinte formato:

  • http://events.wingtip-dpt.<usuário.trafficmanager.net/fabrikamjazzclub>

    As partes do formato anterior são explicadas na tabela a seguir.

    Parte URL Descrição
    eventos.wingtip-dpt As partes de eventos do aplicativo Wingtip.

    -dpt distingue a implementação de banco de dados por locatário de Wingtip Tickets de outras implementações. Exemplos são as implementações de aplicativo único por locatário (-sa) ou banco de dados multilocatário (-mt).
    .<utilizador> af1 no exemplo.
    .trafficmanager.net/ Gestor de Tráfego, URL base.
    fabrikamjazzclub Identifica o locatário chamado Fabrikam Jazz Club.
  • O nome do locatário é analisado a partir da URL pelo aplicativo de eventos.

  • O nome do locatário é usado para criar uma chave.

  • A chave é usada para acessar o catálogo para obter o local do banco de dados do locatário.

    • O catálogo é implementado usando o gerenciamento de mapa de estilhaços.
  • O Hub de Eventos usa metadados estendidos no catálogo para construir as URLs de página de lista de eventos para cada locatário.

Em um ambiente de produção, normalmente você cria um registro DNS CNAME para apontar um domínio de Internet da empresa para o nome DNS do Gerenciador de Tráfego.

Nota

Pode não ser imediatamente óbvio qual é o uso do gerenciador de tráfego neste tutorial. O objetivo desta série de tutoriais é mostrar padrões que podem lidar com a escala de um ambiente de produção complexo. Nesse caso, por exemplo, você teria vários aplicativos Web distribuídos em todo o mundo, colocalizados com bancos de dados e precisaria do gerenciador de tráfego para rotear entre essas instâncias. Outro conjunto de tutoriais que ilustra o uso do gerenciador de tráfego são a restauração geográfica e os tutoriais de replicação geográfica. Nesses tutoriais, o gerenciador de tráfego é usado para ajudar a alternar para uma instância de recuperação do aplicativo SaaS no caso de uma interrupção regional.

Começar a gerar carga nas bases de dados de inquilinos

Agora que o aplicativo está implantado, vamos colocá-lo para funcionar.

O script PowerShell Demo-LoadGenerator inicia uma carga de trabalho que é executada em todos os bancos de dados de locatário. A carga do mundo real em muitos aplicativos SaaS é esporádica e imprevisível. Para simular esse tipo de carga, o gerador produz uma carga com picos aleatórios ou explosões de atividade em cada locatário. As explosões ocorrem em intervalos aleatórios. Leva vários minutos para que o padrão de carga surja. Deixe o gerador funcionar por pelo menos três ou quatro minutos antes de monitorar a carga.

  1. No ISE do PowerShell, abra o script ...\Learning Modules\Utilities\Demo-LoadGenerator.ps1 .
  2. Pressione F5 para executar o script e iniciar o gerador de carga. Deixe os valores de parâmetro padrão por enquanto.
  3. Entre na sua conta do Azure e selecione a assinatura que deseja usar, se necessário.

O script do gerador de carga inicia um trabalho em segundo plano para cada banco de dados no catálogo e, em seguida, para. Se você executar novamente o script do gerador de carga, ele interromperá todos os trabalhos em segundo plano que estão sendo executados antes de iniciar novos.

Monitorar os trabalhos em segundo plano

Se quiser controlar e monitorar os trabalhos em segundo plano, use os seguintes cmdlets:

  • Get-Job
  • Receive-Job
  • Stop-Job

Ações Demo-LoadGenerator.ps1

Demo-LoadGenerator.ps1 imita uma carga de trabalho ativa de transações de clientes. As etapas a seguir descrevem a sequência de ações que Demo-LoadGenerator.ps1 inicia:

  1. Demo-LoadGenerator.ps1 inicia LoadGenerator.ps1 em primeiro plano.

    • Ambos os arquivos .ps1 são armazenados nas pastas Learning Modules\Utilities\.
  2. LoadGenerator.ps1 percorre todos os bancos de dados de locatários no catálogo.

  3. LoadGenerator.ps1 inicia um trabalho PowerShell em segundo plano para cada banco de dados de locatário:

    • Por padrão, os trabalhos em segundo plano são executados por 120 minutos.
    • Cada trabalho causa uma carga baseada em CPU em um banco de dados de locatário executando sp_CpuLoadGenerator. A intensidade e duração da carga varia dependendo de $DemoScenario.
    • sp_CpuLoadGenerator faz um loop em torno de uma instrução SQL SELECT que causa uma alta carga de CPU. O intervalo de tempo entre as edições do SELECT varia de acordo com os valores dos parâmetros para criar uma carga de CPU controlável. Os níveis de carga e os intervalos são aleatórios para simular cargas mais realistas.
    • Esse arquivo .sql é armazenado em WingtipTenantDB\dbo\StoredProcedures\.
  4. Se $OneTime = $false, o gerador de carga inicia os trabalhos em segundo plano e, em seguida, continua a ser executado. A cada 10 segundos, ele monitora todos os novos locatários que são provisionados. Se você definir $OneTime = $true, o LoadGenerator inicia os trabalhos em segundo plano e, em seguida, para de ser executado em primeiro plano. Para este tutorial, deixe $OneTime = $false.

    Use Ctrl-C ou Stop Operation Ctrl-Break se quiser parar ou reiniciar o gerador de carga.

    Se você deixar o gerador de carga em execução em primeiro plano, use outra instância ISE do PowerShell para executar outros scripts do PowerShell.

 

Antes de continuar com a próxima seção, deixe o gerador de carga em execução no estado de chamada de trabalho.

Aprovisionar um inquilino novo

A implantação inicial cria três locatários de exemplo. Agora você cria outro locatário para ver o impacto no aplicativo implantado. No aplicativo Wingtip, o fluxo de trabalho para provisionar novos locatários é explicado no tutorial Provisionamento e catálogo. Nesta fase, você cria um novo locatário, que leva menos de um minuto.

  1. Abra um novo ISE do PowerShell.

  2. Abra ...\Learning Modules\Provision and Catalog\Demo-ProvisionAndCatalog.ps1.

  3. Para executar o script, pressione F5. Deixe os valores padrão por enquanto.

    Nota

    Muitos scripts SaaS Wingtip usam $PSScriptRoot para procurar pastas para chamar funções em outros scripts. Essa variável é avaliada somente quando o script completo é executado pressionando F5. Realçar e executar uma seleção com F8 pode resultar em erros. Para executar os scripts, pressione F5.

O novo banco de dados de locatários é:

  • Criado em um pool elástico SQL.
  • Inicializado.
  • Registado no catálogo.

Após o provisionamento bem-sucedido, o site Eventos do novo locatário aparece no navegador.

New tenant

Atualize o Hub de Eventos para fazer com que o novo locatário apareça na lista.

Explorar os servidores, os conjuntos e as bases de dados de inquilinos

Agora que você começou a executar uma carga em relação à coleção de locatários, vamos examinar alguns dos recursos que foram implantados.

  1. No portal do Azure, navegue até sua lista de servidores SQL. Em seguida, abra o servidor catalog-dpt-USER><.

    • O servidor de catálogo contém dois bancos de dados, tenantcatalog e basetenantdb (um banco de dados de modelo copiado para criar novos locatários).

    Screenshot that shows a catalog server Overview page with the two databases.

  2. Volte à sua lista de servidores SQL.

  3. Abra o servidor tenants1-dpt-USER>< que contém os bancos de dados de locatário.

  4. Veja os seguintes itens:

    • Cada banco de dados de locatário é um banco de dados Elastic Standard em um pool padrão de 50 eDTU.
    • O banco de dados Red Maple Racing é o banco de dados de locatários provisionado anteriormente.

    Screenshot that shows the four databases in the server with red maple racing database highlighted.

Monitorizar o conjunto

Depois que o LoadGenerator.ps1 for executado por vários minutos, dados suficientes devem estar disponíveis para começar a examinar alguns recursos de monitoramento. Esses recursos são incorporados em pools e bancos de dados.

Navegue até o servidor tenants1-dpt-user<> e selecione Pool1 para exibir a utilização de recursos para o pool. Nos gráficos a seguir, o gerador de carga funcionou por uma hora.

Monitor pool

  • O primeiro gráfico, rotulado Utilização de recursos, mostra a utilização do pool eDTU.
  • O segundo gráfico mostra a utilização do eDTU dos cinco bancos de dados mais ativos no pool.

Os dois gráficos ilustram que os pools elásticos e o Banco de dados SQL são adequados para cargas de trabalho imprevisíveis de aplicativos SaaS. Os gráficos mostram que quatro bancos de dados estão cada um intermitindo até 40 eDTUs e, no entanto, todos os bancos de dados são confortavelmente suportados por um pool de 50 eDTU. O pool de 50 eDTU pode suportar cargas de trabalho ainda mais pesadas. Se os bancos de dados forem provisionados como bancos de dados únicos, cada um precisará ser um S2 (50 DTU) para suportar os bursts. O custo de quatro bancos de dados S2 únicos é quase três vezes o preço do pool. Em situações reais, os clientes do Banco de dados SQL executam até 500 bancos de dados em 200 pools de eDTU. Para obter mais informações, consulte o tutorial Monitoramento de desempenho.

Recursos adicionais

Próximos passos

Neste tutorial, ficou a saber:

  • Como implantar o aplicativo SaaS Wingtip Tickets.
  • Sobre os servidores, pools e bancos de dados que compõem o aplicativo.
  • Como os locatários são mapeados para seus dados com o catálogo.
  • Como provisionar novos inquilinos.
  • Como exibir a utilização do pool para monitorar a atividade do locatário.
  • Como excluir recursos de exemplo para interromper a cobrança relacionada.

Em seguida, tente o tutorial Provisionar e catalogar.