Arquitetura multi tenancy e aplicações multi tenant são dois termos relacionados a SaaS (Software as a Service). São conceitos muito importantes para quem trabalha com desenvolvimento de Softwares.
Com o aumento de aplicações SaaS nos últimos anos, os desenvolvedores estão procurando entender como esses tipos de serviços funcionam e a diferença entre as diversas arquiteturas de software que existem para o desenvolvimento desse tipo de plataforma.
Nesse post, vamos te explicar tudo o que você precisa saber sobre esse tipo de aplicação para te ajudar a dominar o tema!
O que é multi tenant?
Multitenant é uma arquitetura de software que permite que uma única instância de software atenda vários clientes. Em outras palavras, um único desenvolvimento de código pode atender vários usuários, separando informações confidenciais de cada um e deixando-as apenas visíveis para eles.
Assim, cada cliente do serviço é considerado um inquilino. Isso permite que os elementos da aplicação, como as cores da interface, sejam customizados, mas o código em si se mantenha o mesmo.
Algo que é importante destacar nesta arquitetura é que um cliente não é necessariamente um único usuário, podendo se tratar de um grupo de usuários. Alguns serviços, por exemplo, trabalham com equipes ou grupos em que um cliente pode ter um subdomínio para entrar no aplicativo e ter vários usuários com acesso a essas informações.
Vantagens e desvantagens do multitentant
Como todo tipo de aplicação, existem prós e contras em usar a arquitetura multi tenancy.
Vantagens
- Economia no desenvolvimento e manutenção, pois os custos são distribuídos entre todos os clientes;
- Fácil atualização, pois só é necessário atualizar uma única instância;
- Segurança das informações de cada cliente, pois possui um schema separado para cada um;
- Otimiza o uso dos recursos do servidor.
Desvantagens
- Isso dificulta o desenvolvimento de recursos específicos para um cliente;
- Caso o aplicativo apresente um erro ou trave, a falha se aplicará a todos os clientes.
Arquitetura multitenant aplicada a bancos de dados
Antes de mais nada, é preciso que você entenda o que é um schema.
Schemas são os grupos de objetos dentro de determinado banco de dados que organizam dados, sendo os elementos responsáveis por associar um usuário ou grupo de usuários a um ou mais objetos.
No Postgres, um Schema atua como um namespace, o que permite a organização/separação do banco de dados. (Banco de dados -> Schema -> Tabela)
No MySQL, um Schema é um banco de dados independente.
Compartilhado (Shared)
Um banco de dados – Um Schema
Esta arquitetura é a utilizada por padrão na maioria das aplicações. Os usuários da aplicação são separados por um relacionamento com a tabela de usuários. É útil para serviços B2C como os planos individuais do Evernote ou LastPass.
Vantagens
- A camada de dados é fácil de construir, ou seja, é bem fácil criar as tabelas de banco de dados;
- Todos os usuários usam o mesmo domínio do aplicativo
Desvantagens
- É custoso no que diz respeito a tamanho e a quantidade de requisições ao banco de dados.
Separado (Isolated)
Cada cliente (inquilino) tem seu próprio banco de dados
Essa arquitetura permite o uso de qualquer mecanismo de banco de dados, podendo ser relacionada com o processo de virtualização em que cada instância é implementada para um novo cliente.
Vantagens
- Maior segurança;
- Fácil recuperação em caso de corrupção do banco de dados;
- Baixo consumo de recursos de processamento.
Desvantagens
- Difícil de escalar;
- Custoso em termos dos recursos de armazenamento (são necessários muitos bancos de dados);
- Dificuldade em compartilhar informações entre clientes;
- Dificuldade de atualização (deve-se realizar o processo para cada banco de dados separadamente).
Híbrido (semi-isolated)
Uma base de dados – múltiplos schemas
Esta arquitetura utiliza o melhor das duas anteriores e é possível utilizá-la no PostgreSQL. Isso permite, por exemplo, que cada um dos clientes tenha usuários e seus dados sejam separados por cada schema.
Vantagens
- Facilmente escalável;
- Redução de custos em armazenamento e processamento;
- Seguro (cada cliente tem suas informações separadas no schema);
- Fácil de compartilhar informações entre clientes (há tabelas que podem ser acessadas por todos os clientes).
Desvantagens
- O processo de recuperação de dados de um schema é mais complexo;
- É menos seguro do que bancos de dados separados.
Conclusão
Dependendo da aplicação que está desenvolvendo e do stack tecnológico que utiliza, você pode escolher a que melhor se adapta à situação.
A dica aqui é ter sempre em conta as vantagens e desvantagens de cada uma e o tipo de aplicação em que está trabalhando, sobretudo pensando no futuro do seu aplicativo.
Se você quer saber mais sobre Desenvolvimento de Softwares, conheça o nosso Curso de Fundamentos de Engenharia de Software.
Se quer aprender mais sobre Banco de Dados, também temos um curso para te ajudar! Confira nosso Curso de Introdução a Bancos de Dados.