O que é uma aplicação multitenant? \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 02 Horas 

 12 Min 

 34 Seg 

   Tempo restante da oferta: 02 12 34 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) O que é uma aplicação multitenant?  [ Infraestrutura e Sistemas Operacionais ](https://www.treinaweb.com.br/blog/categoria/infraestrutura-e-sistemas-operacionais) [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) [ Computação em nuvem ](https://www.treinaweb.com.br/blog/categoria/computacao-em-nuvem) 

# O que é uma aplicação multitenant?

 Quando falamos de Software as a Service (SaaS) e cloud computing, é inevitável que o termo "multitenant" surja. Mas, afinal, o que é multitenancy?

 [ Cleber Campomori ](https://www.treinaweb.com.br/blog/autor/cleber-campomori) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/15120239/capa-facade-.png)  

Com a popularização das plataformas de *[cloud computing](https://www.treinaweb.com.br/blog/o-que-e-cloud-computing/ "cloud computing")* e do conceito de *SaaS* (*Software as a Service*), onde o cliente paga pelo acesso aos serviços que o software provê (e não ao software em si), um outro termo técnico se tornou muito frequente quando falamos de desenvolvimento de software: o termo *multitenant*. Softwares no “estilo” de um SaaS e que rodem em provedores de cloud quase que obrigatoriamente são implementados de maneira a suportar múltiplos inquilinos. Mas, no final das contas, o que é um software que implementa o conceito de *multitenancy*? Como eu posso construir um software que implemente esse conceito?

[  ![Desenvolvedor Java Web Júnior](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/java.svg)   Formação Desenvolvedor Java Web Júnior Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-java-web-junior)

### Antes de tudo: o que é multitenancy?

[![](https://i.loli.net/2019/07/15/5d2c0ecc6de5350931.jpg)](https://i.loli.net/2019/07/15/5d2c0ecc6de5350931.jpg)

Basicamente, um software que implementa o conceito de multitenancy foi desenvolvido para suportar *múltiplos inquilinos* (aliás, a tradução de *tenant* é *inquilino*). Isso quer dizer que uma mesma instância de um software *multitenant* consegue atender a vários clientes (também designados como *inquilinos*) diferentes ao mesmo tempo. Pense no desenvolvimento de uma aplicação de gerência financeira, por exemplo. Pode ser que esta aplicação tenha sido concebida para ser como um produto, ou seja: ela foi feita para atender diferentes pessoas em diferentes empresas. E, falando em termos de faturamento, provavelmente este software será vendido para diferentes empresas o utilizarem… Uma possibilidade é que cada cliente tenha a sua própria máquina em um provedor de *cloud computing* com esse software de gestão financeira instalado. Dessa maneira, é como se todos os usuários da empresa A acessassem o software no servidor X, enquanto todos os funcionários da empresa B acessassem o software no servidor Y. Essa arquitetura certamente funciona, mas ela traz alguns problemas que podem ser difíceis para serem resolvidos, principalmente em larga escala:

- Quando o software precisar ser atualizado, a atualização precisará ser aplicada em múltiplos servidores. Há o risco de algum cliente ficar sem a atualização, caso a atualização não seja aplicada em algum servidor por esquecimento ou falhas no processo;
- O fato de cada cliente ter a sua própria máquina dedicada pode tornar a manutenção do software muito cara à medida que mais e mais clientes forem adquirindo o software, já que mais e mais instâncias no provedor de *cloud computing* precisarão ser contratadas.

Perceba que, com os pontos destacados acima, o software de gestão financeira em questão corre o sério risco de se tornar insustentável, seja do ponto de vista técnico, seja do ponto de vista de custos envolvidos. Porém, existe uma maneira de corrigirmos estes pontos: se o nosso software pudesse atender as empresas A e B na mesma instância ao mesmo tempo, sendo capaz de diferenciar de alguma maneira quando os dados da empresa A devem ser exibidos e manipulados; e quando os dados da empresa B devem ser exibidos e manipulados. Nessa situação, o nosso software de gestão financeira se tornaria um software *multitenant*, tendo como *tenants* as empresas *A* e *B*.

[![](https://i.loli.net/2019/07/15/5d2c13af3c90246613.png)](https://i.loli.net/2019/07/15/5d2c13af3c90246613.png)

Uma arquitetura baseada no conceito de *multitenancy* propiciaria:

- Redução na complexidade do processo de gestão do software para múltiplos clientes. Por exemplo, o caso da atualização: não haveria o risco de algum cliente não obter a atualização em questão, tendo em vista que a instância do sotware seria única;
- Economia com infraestrutura. Por mais que, provavelmente, a instância de um software *multitenant* precisa ser mais poderosa pelo fato de atender múltiplos *tenants* ao mesmo tempo, ainda sim provavelmente o custo será menor do que se tivéssemos várias instâncias distintas servindo para vários clientes de maneira distinta;
- Maior facilidade na obtenção de métricas com relação a utilização do software em questão, tendo em vista que estamos falando nesse caso de uma única instância.

### Multitenant e isolamento de dados

[![](https://i.loli.net/2019/07/15/5d2c171bc664a93212.jpg)](https://i.loli.net/2019/07/15/5d2c171bc664a93212.jpg)

O fato de termos uma única instância de software traz um problema: como vamos fazer para separar os dados entre os diferentes *tenants* de nossa aplicação? Para resolver este problema, podemos utilizar três estratégias diferentes: chave estrangeira, *schema* segregado e *banco de dados* segregado.

##### Multitenancy com chaves estrangeiras

Essa é a maneira mais simples e primitiva para separarmos os dados de nossos diferentes *tenants*. Com essa estratégia, cada tabela envolvida na aplicação terá uma chave estrangeira para uma tabela de controle dos *tenants*. Todos os dados de todos os *tenants* ficariam juntos no mesmo banco de dados, sendo segregados justamente por essa chave estrangeira. Quando um usuário acessasse a aplicação, esta iria verificar o *tenant* vinculado ao usuário e mostraria somente os dados das tabelas cujas linhas tivessem a *foreign key* atrelada ao *tenant* do usuário.

[![](https://i.loli.net/2019/07/15/5d2c1d5bbce8d25924.png)](https://i.loli.net/2019/07/15/5d2c1d5bbce8d25924.png)

A vantagem dessa estratégia é que sua implementação é muito simples e muito barata, tendo em vista que envolve somente a utilização de chaves estrangeiras e filtros. Porém, esta estratégia tem basicamente dois pontos ruins… Um ponto é que a performance pode ficar gravemente comprometida no caso de uma quantidade muito grande de dados e/ou uma quantidade muito grande de *tenants*. O outro ponto é que o banco de dados é único para todos os *tenants*, ou seja: se um dos *tenants* executar uma operação muito pesada no banco (como uma consulta muito extensa ou uma carga de dados muito grande), **todos** os outros *tenants* irão sofrer com a lentidão ou até mesmo com a queda do banco de dados, já que este é único para todos os usuários. Por isso, essa estratégia não é recomendada para aplicações com uma volumetria muito grande de dados e/ou de *tenants*.

##### Multitenancy com segregação via *schema*

Nesta estratégia, a instância do banco de dados ainda é compartilhado entre todos os *tenants*, como ocorre na estratégia com chaves estrangeiras. Mas, desta vez, cada *tenant* possui seu próprio *schema*, ou seja: a instância do banco é a mesma para todos, mas essa instância tem múltiplos conjuntos das tabelas da aplicação isolados para cada *tenant*.

[![](https://i.loli.net/2019/07/15/5d2c1d6e013db97624.png)](https://i.loli.net/2019/07/15/5d2c1d6e013db97624.png)

A principal vantagem dessa estratégia é justamente o isolamento lógico entre os dados dos diferentes *tenants*, reduzindo o possível impacto que um *tenant* pode causar nos demais *tenants* da aplicação (como no caso de uma deleção de dados acidental - com *schemas* diferentes, essa deleção acidental ficaria restrira ao *tenant*/*schema* que a causou). Também trata-se de uma estratégia barata, pois ela ainda é fundamentada em uma única instância de banco de dados. Porém, trata-se de uma estratégia de implementação um pouco mais complexa, o que pode encarecer um pouco o processo de adoção desta estratégia. Outro ponto diz respeito ao esforço gerencial dos diferentes *schemas* da aplicação, que é sensivelmente maior do que na estratégia de replicação de chave estrangeira. Esta estratégia também pode gerar problemas no caso de uma volumetria de dados um pouco maior.

[  ![Desenvolvedor Java Web Pleno](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/java.svg)   Formação Desenvolvedor Java Web Pleno Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-java-web-pleno)

##### Multitenancy com segregação via banco de dados

Nesta estratégia, cada *tenant* tem uma instância de banco de dados dedicada, sendo a aplicação capaz de realizar conexões a múltiplos bancos de dados diferentes ao mesmo tempo.

[![](https://i.loli.net/2019/07/15/5d2c1d837c05195974.png)](https://i.loli.net/2019/07/15/5d2c1d837c05195974.png)

A principal vantagem deste modelo é que agora o isolamento chega a ser “físico”, levando em consideração que cada *tenant* terá sua instância de banco de dados exclusiva. Isso mitiga mais ainda o impacto de operações que os *tenants* podem fazer e que possam prejudicar a experiência dos outros *tenants*. O ganho de performance nessa estratégia também é perceptível, já que estamos falando de instâncias de bancos de dados isoladas e diferentes para cada *tenant*. Porém, esta estratégia é sensivelmente mais complicada de ser implementada do ponto de vista técnico: a aplicação terá que ser capaz de se conectar a múltiplos bancos de dados ao mesmo tempo de acordo com o usuário que estiver acessando a aplicação. Além disso, será necessário provisionar uma instância de banco de dados para cada *tenant*, o que também torna esta a estratégia mais cara entre as três estratégias descritas.

- [ #Cloud Computing ](https://www.treinaweb.com.br/blog/tag/cloud-computing)
- [ #saas ](https://www.treinaweb.com.br/blog/tag/saas)
- [ #multitenancy ](https://www.treinaweb.com.br/blog/tag/multitenancy)
- [ #multitenant ](https://www.treinaweb.com.br/blog/tag/multitenant)

Autor

 ![Cleber Campomori](//secure.gravatar.com/avatar/c659c6a58478cad5b7751370ba94205f?d=mm)

## Cleber Campomori

 Líder de Conteúdo/Inovação. Pós-graduado em Projeto e Desenvolvimento de Aplicações Web. Certificado Microsoft MCSD (Web). 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleber-campomori)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/04/03142408/CLOUD-COMPUTING-400x280.png)  [ Computação em nuvem ](https://www.treinaweb.com.br/blog/categoria/computacao-em-nuvem) 

     9 anos atrás

    ##  [ Características que um serviço precisa ter pra ser considerado Cloud Computing ](https://www.treinaweb.com.br/blog/caracteristicas-que-um-servico-precisa-ter-pra-ser-considerado-cloud-computing) 

     Saiba quais são os principais requisitos para um serviço ser considerado cloud computing e quais os principais tipos e níveis de serviço.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/07/16141718/GOOGLE-APP-ENGINE-400x280.png)  [ Google Cloud Platform (GCP) ](https://www.treinaweb.com.br/blog/categoria/google-cloud-platform-gcp) 

     8 anos atrás

    ##  [ O que é o App Engine e como publicar uma aplicação nele ](https://www.treinaweb.com.br/blog/o-que-e-o-app-engine-e-como-publicar-uma-aplicacao-nele) 

     Descubra o que é o App Engine, sua história e como fazer a publicação (deploy) de sua primeira aplicação através de um vídeo prático.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Utilizando arquivos Dotenv (.env) em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core) 

     O uso de arquivos .env é quase o padrão de aplicações web, veja como utilizá-los em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/nhibernate-no-asp-net-core-400x280.png)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     7 anos atrás

    ##  [ Utilizando o NHibernate em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-nhibernate-em-uma-aplicacao-asp-net-core) 

     O NHibernate é uma biblioteca madura e muito utilizada que agora fornece suporte para o .NET Core. Veja um exemplo do NHibernate no ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/05/12101840/debounce-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     9 anos atrás

    ##  [ O que é Debounce e qual sua importância para a performance? ](https://www.treinaweb.com.br/blog/o-que-e-debounce-e-qual-sua-importancia-para-a-performance) 

     Veja como a técnica de Debounce pode te ajudar a cuidar da performance da sua aplicação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/15150908/img-java-artigo-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O funcionamento do garbage collector no .NET ](https://www.treinaweb.com.br/blog/o-funcionamento-do-garbage-collector-no-net) 

     Neste artigo, vamos compreender o funcionamento básico do garbage collector dentro da CLR em uma aplicação .NET.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/14131229/HEALTH-CHECKS-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Verificando a integridade da aplicação ASP.NET Core com Health Checks ](https://www.treinaweb.com.br/blog/verificando-a-integridade-da-aplicacao-asp-net-core-com-health-checks) 

     Verificar e monitorar a integridade de uma aplicação web é algo essencial, principalmente em ambientes distribuídos. O ASP.NET Core facilita esta tarefa através de Health Checks, como você verá neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/13150804/template-engine-1-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O que é Template Engine? ](https://www.treinaweb.com.br/blog/o-que-e-template-engine) 

     Veja neste artigo o que é Template Engine e as principais opções do mercado.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/31135228/laravel-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Como colocar uma aplicação Laravel em produção e automatizar o processo de deploy ](https://www.treinaweb.com.br/blog/como-colocar-uma-aplicacao-laravel-em-producao-e-automatizar-o-processo-de-deploy) 

     Nesse post veremos alguns passos simples que precisamos nos atentar ao subir nossa aplicação para o ambiente de produção. Também aprenderemos de forma prática como automatizar o processo de deploy.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/07/o-que-e-jwt-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     5 anos atrás

    ##  [ O que é JWT? ](https://www.treinaweb.com.br/blog/o-que-e-jwt) 

     Neste artigo iremos falar sobre o que é, qual a estrutura e onde são utilizados os JSON Web Tokens ou como comumente são conhecidos JWT.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/03/11153540/DJANGO-ADMIN-400x280.png)  [ Django ](https://www.treinaweb.com.br/blog/categoria/django) 

     8 anos atrás

    ##  [ Criando uma aplicação administrativa com Django Admin ](https://www.treinaweb.com.br/blog/criando-uma-aplicacao-administrativa-com-django-admin) 

     Neste artigo veremos como criar uma aplicação administrativa com Django.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/06103205/orm-lite-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Utilizando o Micro ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-servicestack-ormlite-em-uma-aplicacao-asp-net-core) 

     Aprenda na prática como fazer uso do micro framework ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **02h 12min 34s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
