Fonte: http://balaiotecnologico.blogspot.com - Autoria: Luis Gustavo FabbroA ABC71 esta finalizando uma versao SaaS de seu ERP e um parceiro interessado nos perguntou se tinhamos estruturado uma solucao multi-tenant pois para ele esta era uma questao imprescindivel. Sabia que tenantsignifica "inquilino" ou "locatario" em ingles, mas como eu nunca tinha ouvido a expressao "multi-tenant" antes, corri ao Google para descobrir exatamente a que ele estava se referindo.Alguns cliques depois, encontrei a explicacao que estava procurando. No contexto de aplicacoes publicadas como um servico na internet - o SaaS - "tenant" diz respeito a infraestrutura alocada num servidor e destinada a suprir a demanda de cada Cliente da aplicacao web. Assim, uma aplicacao multi-tenant e aquela capaz de administrar essa infraestrutura com o menor custo possivel, sem que isso afete a performance, a escalabilidade ou a seguranca da solucao como um todo. Em outras palavras, a aplicacao consegue gerenciar a adesao de novos Clientes enquanto garante a seguranca dos dados (para que um Cliente nao acesse os dados dos outros), a escalabilidade (para que a infraestrutura suporte o aumento de carga inerente a novas adesoes) e a responsividade do servico (para que os acessos dos Clientes ao servico sejam atendidos num tempo adequado).Tendo tais consideracoes em mente, a primeira caracteristica de uma solucao SaaS multi-tenant e que ela deve ter um unica instalacao no servidor, com todos os Clientes compartilhando o mesmo ponto de entrada para a aplicacao. Do ponto de visto do fornecedor da aplicacao, ha uma implicacao muito importante para essa decisao: e preciso manter apenas uma instalacao, o que reduz custos com espaco (hardware) e simplifica a criacao do ambiente inicial para novos Clientes. Do ponto de vista do usuario, a simplificacao garante agilidade para que o servico esteja plenamente disponivel logo apos a adesao dele ter sido efetivada. Isto e, nenhuma outra providencia tem que ser tomada pelo Cliente ou pelo Fornecedor para que todo o ambiente esteja pronto para operacao. Esta e uma caracteristica marcante de solucoes SaaS.Isso nos remete a segunda parte da definicao: como garantir seguranca, escalabilidade e responsividade da solucao ? Obviamente, e preciso comecar com o planejamento de uma boa infraestrutura de hardware que comporte o movimento esperado para o site. Mas nao so. E nescessario ainda ter seu projeto de software preparado adequadamente, mesclando tecnicas de programacao com uma implementacao apropriada do banco de dados. A implementacao do banco de dados, alias, merece uma atencao extra para que se possa equilibrar os requisitos ja citados com a facilidade de criacao do ambiente para cada novo Cliente.Uma proposta e manter uma unica base de dados que diferencie quais registros pertencem a qual Cliente. Isto pode ser feito atraves de um codigo de identificacao que seja unico por Cliente, o que implica necessariamente que cada tabela do sistema deve guardar essa identificacao e que todas as operacoes devem ser levadas a cabo informando-se esse codigo. Caso contrario, o sistema teria uma grave falha de seguranca, com Clientes enxergando dados uns dos outros. Esse tipo de solucao e retratada na figura abaixo:Porem, esse solucao embute algumas restricoes.