quinta-feira, março 31, 2011

Sua solução SaaS é multi-tenant ?

Fonte: http://balaiotecnologico.blogspot.com - Autoria: Luís Gustavo Fabbro

A ABC71 está finalizando uma versão SaaS de seu ERP e um parceiro interessado nos perguntou se tínhamos estruturado uma solução multi-tenant pois para ele esta era uma questão imprescindível. Sabia que tenantsignifica "inquilino" ou "locatário" em inglês, mas como eu nunca tinha ouvido a expressão "multi-tenant" antes, corri ao Google para descobrir exatamente a que ele estava se referindo.

Alguns cliques depois, encontrei a explicação que estava procurando. No contexto de aplicações publicadas como um serviço na internet - o SaaS - "tenant" diz respeito a infraestrutura alocada num servidor e destinada a suprir a demanda de cada Cliente da aplicação web. Assim, uma aplicação multi-tenant é aquela capaz de administrar essa infraestrutura com o menor custo possível, sem que isso afete a performance, a escalabilidade ou a segurança da solução como um todo. Em outras palavras, a aplicação consegue gerenciar a adesão de novos Clientes enquanto garante a segurança dos dados (para que um Cliente não acesse os dados dos outros), a escalabilidade (para que a infraestrutura suporte o aumento de carga inerente a novas adesões) e a responsividade do serviço (para que os acessos dos Clientes ao serviço sejam atendidos num tempo adequado).

Tendo tais considerações em mente, a primeira característica de uma solução SaaS multi-tenant é que ela deve ter um única instalação no servidor, com todos os Clientes compartilhando o mesmo ponto de entrada para a aplicação. Do ponto de visto do fornecedor da aplicação, há uma implicação muito importante para essa decisão: é preciso manter apenas uma instalação, o que reduz custos com espaço (hardware) e simplifica a criação do ambiente inicial para novos Clientes. Do ponto de vista do usuário, a simplificação garante agilidade para que o serviço esteja plenamente disponível logo após a adesão dele ter sido efetivada. Isto é, nenhuma outra providência tem que ser tomada pelo Cliente ou pelo Fornecedor para que todo o ambiente esteja pronto para operação. Esta é uma característica marcante de soluções SaaS.

Isso nos remete à segunda parte da definição: como garantir segurança, escalabilidade e responsividade da solução ? Obviamente, é preciso começar com o planejamento de uma boa infraestrutura de hardware que comporte o movimento esperado para o site. Mas não só. É nescessário ainda ter seu projeto de software preparado adequadamente, mesclando técnicas de programação com uma implementação apropriada do banco de dados. A implementação do banco de dados, aliás, merece uma atenção extra para que se possa equilibrar os requisitos já citados com a facilidade de criação do ambiente para cada novo Cliente.

Uma proposta é manter uma única base de dados que diferencie quais registros pertencem a qual Cliente. Isto pode ser feito através de um código de identificação que seja único por Cliente, o que implica necessariamente que cada tabela do sistema deve guardar essa identificação e que todas as operações devem ser levadas a cabo informando-se esse código. Caso contrário, o sistema teria uma grave falha de segurança, com Clientes enxergando dados uns dos outros. Esse tipo de solução é retratada na figura abaixo:
multi-tenant full

Porém, esse solução embute algumas restrições. Como todos os Clientes compartilham o mesmo banco de dados, fica difícil entregar uma cópia isolada caso um Cliente solicite. Pela mesma razão, se torna complexo dispor de ferramentas que deem muita liberdade ao Cliente - como um construtor de relatórios ou algo que permita a ele submeter queries diretamente.

Um outro aspecto importante pra se preocupar nesta solução é o modo como as consultas (queries) são montadas. Um sistema como um ERP costuma ter operações que envolvem grande massa de dados - cálculo de custos ou execução do MRP, por exemplo. Dependendo de como as consultas são montadas, a tabela entrar em lock, comprometendo a experiência dos demais usuários da aplicação Web. Por isso, para esse cenário a melhor opção é a criação de um banco de dados separado para cada novo Cliente.

Com o banco isolado, podemos facilmente enviar ao Cliente um cópia de backup apenas com os dados específicos dele. Ferramentas mais elaboradas também se tornam mais simples de se implementar pois não precisam embutir inteligência extra para bloquear o acesso a dados de outro Cliente que estejam na mesma tabela. Criar um novo banco para cada Cliente não é um processo complexo, podendo ser executado automaticamente com scripts. Por fim, essa é uma solução escalável pois o próprio gerenciador de banco de dados pode ser preparado para fazer o balanceamento de carga, inclusive alocando novos bancos em locais distintos sempre que isso for necessário.

A imagem abaixo ilustra essa solução:
multi-tenant/multi db

Um pequeno banco auxiliar ou outro mecanismo semelhante tem que ser implementado para direcionar as requisições dos Clientes ao banco de dados correto mas isso tem pouco impacto na performance da solução.

Após essa discussão, podemos considerar que o contrário de multi-tenant é algo com um multi-instance, onde cada novo Cliente é associado a um ambiente completo exclusivo para si. Isto é, ele acessa sua própria instalação do sistema, com sua própria versão da aplicação, configurações, pastas e banco de dados. Em um ambiente SaaS, este tipo de solução de infraestrutura pode rapidamente tornar o negócio inviável já que ela implica em custo maior para comportar instalações de todos os Clientes. Além disso, o multi-instance não escala tão bem.

Em tempo: mesmo sem conhecer o termo multi-tenant, todas as variáveis apresentadas aque foram levadas em conta quando a ABC71 planejou sua solução SaaS.

Os links listados abaixo fornecem explicações mais detalhadas sobre o conceito de multi-tenant e uma visão mais abrangente sobre estratégias de planejamento do banco de dados.

Fonte: http://balaiotecnologico.blogspot.com Autoria: Luís Gustavo Fabbro

Nenhum comentário: