Aplicações MultiTenant no ASP.NET Core 2.0 utilizando o SaaSKit

Luigi Tavolaro
Jun 8, 2018 · 4 min read

Nesse artigo vamos ver o que é uma Arquitetura MultiTenant e como aplicar no .Net Core, lembrando que a arquitetura MultiTenant não é exclusividade do .Net

Multi-Tenant ou também chamado de Multitenancy, significa dizer que uma única aplicação Web pode responder a diversos clientes de uma forma que aparenta que eles estão falando com diferentes aplicações, ou seja, diversos clientes acessando o mesmo host, porém isso é transparente para o usuário que esta usando o sistema.

Os diferentes interfaces dos aplicativo são chamados de Tenants (inquilinos), porque conceitualmente eles vivem no mesmo espaço, no caso a aplicação WEB e podem ser endereçados individualmente. Isso significa dizer que todas minhas aplicações estarão hospedadas em único e no mesmo servidor, mas cada um terá seu endereço, no caso sua url.

Ou seja, TENANT -> CLIENTES

Fazendo uma analogia, por exemplo uma cidade em que temos as casas, cada casa tem seu endereço e não temos acesso aos pertences da casa do vizinho, porém compartilhamos recursos da cidade como ruas, parques e calçadas.

À esquerda temos um exemplo de um único cliente, cada um com seu serviço e seu banco dados. Ao meio, temos diversos clientes acessando um único serviço, exemplificando a arquitetura MultiTenant. À direita, mais um exemplo de MultiTenant, nessa figura, temos 3 clientes acessando um único serviço e um único banco de dados.

A ideia principal de uma aplicação MultiTenant é garantir o isolamento de implementação, de dados e de customização.

  • Isolamento dos dados.
  • Ser flexível.
  • Solução escalável.

Vantagens do MultiTenant no SaaS

  • Reduz os custos de investimento a longo prazo.
  • Atualizações simples.
  • Fácil customização.
  • Maximização do uso de recursos.
  • Infinitos Clientes.
  • Dependendo da implementação da arquitetura, uma manutenção serve para todos os clientes.
  • Escalabilidade

Desvantagens do MultiTenant no SaaS

  • Mais Complexo.
  • Menos Flexível em alguns casos.
  • Se o servidor cair, todos os clientes cairão.

Como começar?

Instalar o SaasKit.Multitenancy via nuget:

  • Install-Package SaasKit.Multitenancy -Version 1.1.4 (ou outra versão, avaliar no link a última versão do pacote)

Criar um arquivo AppTenant.cs

Essa classe representa os nossos tenants, onde a propriedade Name é o nome do tenant (ex: abc) e o HostNames são os hosts (ex: abc.com, xyz.com)

Após essa etapa, criar o arquivo AppTenantResolver.cs

Das linhas 11 a 21, crio uma lista com meus Tenants que serão utilizados, essa lista poderia vir de um banco de dados. Essa classe implementa a interface ITenantResolver que é do pacote SaaSKit e portanto precisamos implementar o método ResolveAsync que fará a captação do host. Nas linhas 27 e 28 captamos pelo host qual é meu Tenant. Retornando assim o cliente que fez a chamada do serviço.

Feito isso, precisamos alterar nossa Program.cs para ficar dessa maneira

Percebam a linha 12, estou utilizando o Kestrel e na linha 14 adiciono minhas urls que serão aceitas pela aplicação.

Agora temos que alterar nosso arquivo de Startup.cs para ficar da seguinte maneira

Percebam a linha 17 onde adiciono via AddMultitenancy os objetos que representam os tenants (AppTenant) e o objeto Resolver que implementa a interface do SaaSKit (AppTenantResolver). E a linha 33 que adiciono no pipeline a utilização do MultiTenant

Agora precisamo alterar nossa Controller para receber o tenant via GET, no caso do exemplo, fiz a alteração na HomeController.cs

Percebam a linha 9 que adiciono uma propriedade privada AppTenant e no parâmetro do construtor eu recebo via injeção de dependência o meu Tenant, com isso podemos buscar as configurações específicas do Tenant no banco de dados por exemplo.

Agora devemos alterar nossa View, para o exemplo alterei no _Layout.cshtml, mas vocês podem alterar como acharem melhor

Percebam a linha 1 que eu injeto o Tenant que veio da minha Controller. Das linhas 21 a 37, muda a cor de fundo conforme meu Tenant, se Tenant 1, cor de fundo verde claro se não cor de fundo azul claro

E por fim, devemos alterar o arquivo launchSettings.json que esta na pasta Properties

Finalmente Adiciono um configuração para iniciar o projeto da linhas 18 a 24

Iniciado a aplicação, agora esta escutando os dois hosts configurados conforme figura abaixo:

Então, acessando o localhost:6001 temos o Tenant 1 com fundo verde

E acessando o localhost:6002 temos o Tenant 2 com fundo azul

O código completo esta no meu GitHub, para quem quiser conhecer mais.

Segue Slides da minha apresentação no Visual Studio Summit 2018 sobre o tema.

Valeu e até a próxima

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade