Implante e explore um aplicativo multilocatário fragmentado

Aplica-se a:Banco de Dados SQL do Azure

Neste tutorial, você implanta e explora um aplicativo SaaS multilocatário de exemplo chamado Wingtip Tickets. O aplicativo Wingtip Tickets foi projetado para exibir recursos do Banco de Dados SQL do Azure que simplificam a implementação de cenários SaaS.

Essa implementação do aplicativo Wingtip Tickets usa um padrão de banco de dados multilocatário fragmentado. A fragmentação é por identificador de locatário. Os dados do locatário são distribuídos para um banco de dados específico de acordo com os valores do identificador do locatário.

Esse padrão de banco de dados permite armazenar um ou mais locatários em cada fragmento ou banco de dados. Você pode otimizar para obter o menor custo fazendo com que cada banco de dados seja compartilhado por vários locatários. Ou você pode otimizar para isolamento fazendo com que cada banco de dados armazene apenas um locatário. A sua escolha de otimização pode ser feita de forma independente para cada inquilino específico. A sua escolha pode ser feita quando o inquilino é armazenado pela primeira vez, ou pode mudar de ideias mais tarde. O aplicativo é projetado para funcionar bem de qualquer maneira.

O aplicativo é implantado rapidamente

O aplicativo é executado na nuvem do Azure e usa o Banco de Dados SQL do Azure. A seção de implantação a seguir fornece o botão azul Implantar no Azure . Quando o botão é pressionado, o aplicativo é totalmente implantado em sua assinatura do Azure em cinco minutos. Você tem acesso total para trabalhar com os componentes individuais do aplicativo.

O aplicativo é implantado com dados para três locatários de exemplo. Os locatários são armazenados juntos em um banco de dados multilocatário.

Qualquer pessoa pode baixar o código-fonte C# e PowerShell para Wingtip Tickets de seu repositório GitHub.

Aprenda neste tutorial

  • Como implantar o aplicativo SaaS Wingtip Tickets.
  • Onde obter o código-fonte do aplicativo e os scripts de gerenciamento.
  • Sobre os servidores 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.

Está disponível uma série de tutoriais relacionados que se baseiam nesta implementação inicial. Os tutoriais exploram uma variedade de padrões de design e gerenciamento de SaaS. Ao trabalhar nos tutoriais, você é incentivado a percorrer os scripts fornecidos para ver como os diferentes padrões SaaS são implementados.

Pré-requisitos

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

Implante o aplicativo 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 e um nome para o grupo de recursos que contém todos os recursos criados por uma implantação do aplicativo. Para uma pessoa chamada Ann Finley, sugerimos:

  • User:af1(Suas iniciais, mais um dígito. Use um valor diferente (por exemplo, af2) se você implantar o aplicativo uma segunda vez.)
  • Grupo de recursos:wingtip-mt-af1(wingtip-mt indica que este é o aplicativo multilocatário fragmentado. Anexar o nome de usuário af1 correlaciona o nome do grupo de recursos com os nomes dos recursos que ele contém.)

Escolha seus nomes agora e escreva-os.

Passos

  1. Clique no seguinte botão azul Implantar no Azure .

    • Ele abre o portal do Azure com o modelo de implantação SaaS de Wingtip Tickets.

      Button for Deploy to Azure.

  2. Insira os valores de parâmetro necessários para a implantação.

    Importante

    Para esta demonstração, não use nenhum grupo de recursos, servidores ou pools pré-existentes. Em vez disso, escolha Criar um novo grupo de recursos. Elimine este grupo de recursos quando tiver terminado com a aplicação para parar a faturação relacionada. Não use este aplicativo, ou quaisquer recursos que ele cria, para produção. Alguns aspetos da autenticação e as configurações do firewall do servidor são intencionalmente inseguros no aplicativo para facilitar a demonstração.

    • Para Grupo de recursos - Selecione Criar novo e forneça um Nome para o grupo de recursos (diferencia maiúsculas de minúsculas).
      • Selecione um local na lista suspensa.
    • Para Usuário - Recomendamos que você escolha um valor de Usuário curto.
  3. Implemente a aplicação.

    • Clique para concordar com os termos e condições.
    • Clique em Comprar.
  4. Monitore o status da implantação clicando em Notificações, que é o ícone de sino à direita da caixa de pesquisa. A implantação do aplicativo Wingtip leva aproximadamente cinco minutos.

    deployment succeeded

Baixe e desbloqueie os scripts de gerenciamento

Enquanto o aplicativo está sendo implantado, baixe o código-fonte do aplicativo e os scripts de gerenciamento.

Nota

O conteúdo executável (scripts, DLLs) pode ser bloqueado pelo Windows quando arquivos zip são baixados de uma fonte externa e extraídos. Ao extrair os scripts de um arquivo zip, use as etapas a seguir para desbloquear o arquivo .zip antes de extrair. Ao desbloquear o arquivo .zip, você garante que os scripts tenham permissão para serem executados.

  1. Navegue até o repositório GitHub WingtipTicketsSaaS-MultiTenantDb.
  2. Clique em Clonar ou baixar.
  3. Clique em Baixar ZIP e salve o arquivo.
  4. Clique com o botão direito do mouse no arquivo WingtipTicketsSaaS-MultiTenantDb-master.zip e selecione Propriedades.
  5. Na guia Geral, selecione Desbloquear e clique em Aplicar.
  6. Clique em OK.
  7. Extraia os ficheiros.

Os scripts estão localizados no .. \WingtipTicketsSaaS-MultiTenantDb-master\Learning Modules\ pasta.

Atualizar o arquivo de configuração para esta implantação

Antes de executar qualquer script, defina o grupo de recursos e os valores de usuário em UserConfig.psm1. Defina essas variáveis com os mesmos valores definidos durante a implantação.

  1. Abra ...\Learning Modules\UserConfig.psm1 no ISE do PowerShell.
  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.

Os valores definidos neste arquivo são usados por todos os scripts, por isso é importante que eles sejam precisos. Se você reimplantar o aplicativo, deverá escolher valores diferentes para Usuário e Grupo de Recursos. Em seguida, atualize o arquivo UserConfig.psm1 novamente com os novos valores.

Executar a aplicação

No aplicativo Wingtip, os inquilinos são locais. Um local pode ser uma sala de concertos, um clube desportivo ou qualquer outro local que acolha eventos. Os locais se registram na Wingtip como clientes, e um identificador de inquilino é gerado para cada local. Cada local lista seus próximos eventos em Wingtip, para que o público possa comprar ingressos para os eventos.

Cada local recebe um aplicativo Web personalizado para listar seus eventos e vender ingressos. Cada aplicativo Web é independente e isolado de outros locatários. Internamente no Banco de Dados SQL do Azure, cada um dos dados de cada locatário é armazenado em um banco de dados multilocatário fragmentado, por padrão. Todos os dados são marcados com o identificador de locatário.

Uma página da Web central do Hub de Eventos fornece uma lista de links para os locatários em sua implantação específica. Use as seguintes etapas para experimentar a página da Web do Hub de Eventos e um aplicativo Web individual:

  1. Abra o Hub de Eventos no navegador da Web:

    • http://events.wingtip-mt.<user.trafficmanager.net> (Substitua <usuário pelo valor de usuário> da sua implantação.)

      events hub

  2. Clique em Fabrikam Jazz Club no Hub de Eventos.

    Events

Gestor de Tráfego do Azure

Para controlar a distribuição de solicitações de entrada, o aplicativo Wingtip usa o Gerenciador de Tráfego do Azure. A página de eventos para cada locatário inclui o nome do locatário em sua URL. Cada URL também inclui seu valor de usuário específico. Cada URL obedece ao formato mostrado usando as seguintes etapas:

  • http://events.wingtip-mt.<usuário.trafficmanager.net/> fabrikamjazzclub
  1. O aplicativo de eventos analisa o nome do locatário a partir da URL. O nome do locatário é fabrikamjazzclub no URL de exemplo anterior.
  2. Em seguida, o aplicativo faz hash do nome do locatário para criar uma chave para acessar um catálogo usando o gerenciamento de mapa de estilhaços.
  3. O aplicativo localiza a chave no catálogo e obtém o local correspondente do banco de dados do locatário.
  4. O aplicativo usa as informações de localização para localizar e acessar o único banco de dados que contém todos os dados para o locatário.

Hub de Eventos

  1. O Hub de Eventos lista todos os locatários registrados no catálogo e seus locais.
  2. O Hub de Eventos usa metadados estendidos no catálogo para recuperar o nome do locatário associado a cada mapeamento para construir as URLs.

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

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

Agora que o aplicativo está implantado, vamos colocá-lo para trabalhar! O script PowerShell Demo-LoadGenerator inicia uma carga de trabalho em execução para cada locatário. A carga no mundo real em muitos aplicativos SaaS é normalmente esporádica e imprevisível. Para simular esse tipo de carga, o gerador produz uma carga distribuída por todos os locatários. A carga inclui explosões aleatórias em cada locatário que ocorrem em intervalos aleatórios. Leva vários minutos para o padrão de carga emergir, por isso é melhor deixar 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. Prima F5 para executar o script e iniciar o gerador de carga (deixe os valores predefinidos do parâmetro por agora).

O script Demo-LoadGenerator.ps1 abre outra sessão do PowerShell onde o gerador de carga é executado. O gerador de carga é executado nesta sessão como uma tarefa de primeiro plano que invoca trabalhos de geração de carga em segundo plano, um para cada locatário.

Depois que a tarefa em primeiro plano é iniciada, ela permanece em um estado de invocação de trabalho. A tarefa inicia trabalhos em segundo plano adicionais para quaisquer novos locatários que sejam provisionados posteriormente.

Fechar a sessão do PowerShell interrompe todos os trabalhos.

Talvez você queira reiniciar a sessão do gerador de carga para usar valores de parâmetros diferentes. Em caso afirmativo, feche a sessão de geração do PowerShell e execute novamente o Demo-LoadGenerator.ps1.

Provisionar um novo locatário no banco de dados fragmentado

A implantação inicial inclui três locatários de exemplo no banco de dados Tenants1 . Vamos criar outro locatário e observar seus efeitos no aplicativo implantado. Nesta etapa, pressione uma tecla para criar um novo locatário:

  1. Abra ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1 no ISE do PowerShell.

  2. Pressione F5 (não F8) para executar o script (deixe os valores padrão por enquanto).

    Nota

    Você deve executar os scripts do PowerShell somente pressionando a tecla F5 , não pressionando F8 para executar uma parte selecionada do script. O problema com F8 é que a variável $PSScriptRoot não é avaliada. Essa variável é necessária para muitos scripts para navegar em pastas, invocar outros scripts ou importar módulos.

O novo locatário do Red Maple Racing é adicionado ao banco de dados Tenants1 e registrado no catálogo. O site de Eventos de venda de ingressos do novo locatário é aberto no seu navegador:

New tenant

Atualize o Hub de Eventos e o novo locatário agora aparece na lista.

Provisionar um novo locatário em seu próprio banco de dados

O modelo multilocatário fragmentado permite que você escolha se deseja provisionar um novo locatário em um banco de dados que contém outros locatários ou em um banco de dados próprio. Um locatário isolado em seu próprio banco de dados desfruta dos seguintes benefícios:

  • O desempenho do banco de dados do locatário pode ser gerenciado sem a necessidade de comprometer as necessidades de outros locatários.
  • Se necessário, o banco de dados pode ser restaurado para um ponto anterior no tempo, porque nenhum outro locatário seria afetado.

Você pode optar por colocar clientes de avaliação gratuita, ou clientes econômicos, em bancos de dados multilocatário. Você pode colocar cada locatário premium em seu próprio banco de dados dedicado. Se você criar muitos bancos de dados que contenham apenas um locatário, poderá gerenciá-los todos coletivamente em um pool elástico para otimizar os custos de recursos.

Em seguida, provisionamos outro locatário, desta vez em seu próprio banco de dados:

  1. Em ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1, modifique $TenantName para Salix Salsa, $VenueType para dançar e $Scenario para 2.

  2. Pressione F5 para executar o script novamente.

    • Esta prensa F5 provisiona o novo locatário em um banco de dados separado. O banco de dados e o locatário são registrados no catálogo. Em seguida, o navegador abre para a página Eventos do locatário.

    Salix Salsa events page

    • Desloque-se até à parte inferior da página. No banner, você vê o nome do banco de dados no qual os dados do locatário estão armazenados.
  3. Atualize o Hub de Eventos e os dois novos locatários agora aparecem na lista.

Explore os servidores e bancos de dados de locatários

Agora vejamos alguns dos recursos que foram implantados:

  1. No portal do Azure, navegue até a lista de grupos de recursos. Abra o grupo de recursos que você criou quando implantou o aplicativo.

    resource group

  2. Clique em catalog-mt<user> server. O servidor de catálogo contém dois bancos de dados denominados tenantcatalog e basetenantdb. O banco de dados basetenantdb é um banco de dados de modelo vazio. Ele é copiado para criar um novo banco de dados de locatário, seja usado para muitos locatários ou apenas um locatário.

    Screenshot of the server Overview page that shows tenant catalog and base tenant db databases.

  3. Volte para o grupo de recursos e selecione o servidor tenants1-mt que contém os bancos de dados de locatário.

    • O banco de dados tenants1 é um banco de dados multilocatário no qual os três locatários originais, mais o primeiro locatário adicionado, são armazenados. Ele é configurado como um banco de dados padrão 50 DTU.
    • A base de dados Salixsalsa tem o local de dança Salix Salsa como seu único inquilino. Ele é configurado como um banco de dados de edição Standard com 50 DTUs por padrão.

    Screenshot of the tenants1-mt server Overview page that shows the salixsalsa and tenants1 databases.

Monitorar o desempenho do banco de dados

Se o gerador de carga estiver em execução por vários minutos, telemetria suficiente estará disponível para examinar os recursos de monitoramento de banco de dados incorporados ao portal do Azure.

  1. Navegue até o servidor de usuário tenants1-mt<e clique em tenants1 para exibir a utilização de recursos para o banco de> dados que tem quatro locatários. Cada inquilino está sujeito a uma carga pesada esporádica do gerador de carga:

    monitor tenants1

    O gráfico de utilização da DTU ilustra bem como um banco de dados multilocatário pode suportar uma carga de trabalho imprevisível em muitos locatários. Neste caso, o gerador de carga está aplicando uma carga esporádica de cerca de 30 DTUs para cada locatário. Essa carga equivale a 60% de utilização de um banco de dados de 50 DTU. Os picos que excedem 60% são o resultado da aplicação de carga a mais de um inquilino ao mesmo tempo.

  2. Navegue até o servidor de usuário tenants1-mt<e clique no banco de> dados salixsalsa. Você pode ver a utilização de recursos neste banco de dados que contém apenas um locatário.

    salixsalsa database

O gerador de carga está aplicando uma carga semelhante a cada locatário, independentemente do banco de dados em que cada locatário esteja. Com apenas um locatário no banco de dados salixsalsa , você pode ver que o banco de dados poderia sustentar uma carga muito maior do que o banco de dados com vários locatários.

As alocações de recursos variam de acordo com a carga de trabalho

Às vezes, um banco de dados multilocatário requer mais recursos para um bom desempenho do que um banco de dados de locatário único, mas nem sempre. A alocação ideal de recursos depende das características específicas da carga de trabalho para os locatários em seu sistema.

As cargas de trabalho geradas pelo script do gerador de carga são apenas para fins ilustrativos.

Recursos adicionais

Próximos passos

Neste tutorial, ficou a saber:

  • Como implantar o aplicativo Wingtip Tickets SaaS Multi-tenant Database.
  • Sobre os servidores e bancos de dados que compõem o aplicativo.
  • Os locatários são mapeados para seus dados com o catálogo.
  • Como provisionar novos locatários em um banco de dados multilocatário e banco de dados de locatário único.
  • 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.

Agora tente o tutorial Provisionar e catalogar.