Com base nisso, este artigo traz informações importantes para desenvolvedores e arquitetos de software que pretendem trabalhar ou conhecer melhor o modelo arquitetural multi-tenancy, apresentando uma fundamentação teórica e o desenvolvimento de um exemplo de aplicação desse tipo utilizando o framework Hibernate Shards.
Computação em nuvem ou cloud computing é um modelo que permite acessar recursos (rede, servidores, aplicações, etc.), que são provisionados rapidamente, com o mínimo de esforço de gerenciamento ou interação do provedor de serviço.
Esses recursos são fornecidos dinamicamente como serviço, podendo ser acessados por meio da Internet, utilizando um navegador, e configurados de acordo com a necessidade do contratante – diferentemente dos modelos cliente/servidor, em que a aplicação é disponibilizada estaticamente como produto.
De acordo com o NIST (National Institute of Standards and Technology), cloud computing é classificado em três modelos de serviços: Software como Serviço (SaaS), Plataforma como Serviço (PaaS) e Infraestrutura como Serviço (IaaS) [1].
É no modelo SaaS (Software as a Service) que é encontrado o modelo arquitetural multi-tenancy, ou multi-inquilino, cujas características são: o alto grau de configurabilidade, onde o cliente pode customizar sua própria interface, e o compartilhamento de recursos como hardware, aplicação e banco de dados, o que permite a redução de custos [2]. Estes recursos são compartilhados entre os tenants/inquilinos de acordo com a necessidade de cada um.
O modelo arquitetural multi-tenancy possibilita que uma instância da aplicação ou banco de dados, sendo executada em um servidor, possa ser compartilhada entre diversos tenants, com a garantia de isolamento dos dados [3].
Além disso, uma aplicação multi-tenancy pode trazer redução de custos com hardware devido ao compartilhamento de recursos. Por outro lado, para gerenciar tudo isso, o desenvolvimento de uma aplicação multi-tenancy pode ser uma tarefa complexa e exaustiva sem o uso de algum framework.
Dito isso, o objetivo deste artigo é mostrar, de forma prática e objetiva, a implementação de uma estratégia multi-tenancy utilizando a linguagem de programação Java e o framework Hibernate Shards. O uso desse framework diminui consideravelmente a complexidade do desenvolvimento multi-tenancy, principalmente no que tange ao armazenamento dos dados.
Cloud Computing
O conceito de cloud computing pode variar por não haver uma definição oficial. Portanto, ao analisar textos de autores especialistas na área, pode-se constatar diferentes descrições a respeito do tema. Sendo assim, a definição adotada neste artigo é a proposta pelo NIST e reúne as principais características encontradas na bibliografia [2].
De acordo com o NIST, a computação em nuvem é um modelo que permite acesso configurável a recursos computacionais compartilhados, fornecidos com o mínimo de esforço de gerenciamento ou interação do provedor de serviço.
Principais características
A seguir são apresentadas as cinco principais características de cloud computing segundo o NIST [1]:
1. Alocação de recursos sob demanda: o consumidor pode, unilateralmente, conforme a sua necessidade, adquirir automaticamente recursos como: processamento, armazenamento, etc., sem precisar de interação humana com cada provedor dos serviços que estão sendo disponibilizados;
2. Amplo acesso à rede: os recursos são disponibilizados na rede e podem ser acessados por meio de diversos dispositivos, tais como smartphones e laptops;
3. Pooling de recursos: em cloud computing os recursos físicos e virtuais são fornecidos sob um modelo multi-tenancy de acordo com a demanda do consumidor. Não há uma noção exata para o usuário de onde os recursos estão localizados, mas geralmente existe a possibilidade do usuário selecionar o local em um alto nível de abstração (país, estado ou datacenter);
4. Elasticidade rápida: é a capacidade de aumentar ou reduzir recursos quando esses não estão sendo utilizados. Tudo é feito de forma rápida e normalmente automática, gerando redução de custos para o cliente. Para o provedor dos serviços isso é muito conveniente, pois permite melhor utilização dos recursos do datacenter;
5. Controle de serviços: sistemas de cloud computing controlam e otimizam automaticamente a utilização dos recursos. Assim, o contratante ou consumidor pode monitorar, controlar e ter acesso a relatórios e recursos de logging. Isso permite maior transparência sobre os serviços disponibilizados e utilizados.
Modelos de serviços
Ainda de acordo com o NIST, cloud computing está dividido em três modelos de serviços, a saber:
· Software como serviço (Software as a Service – SaaS): neste modelo, os sistemas são fornecidos para os usuários por meio da Internet e podem ser acessados geralmente usando um navegador web. A aplicação e o banco de dados podem ser compartilhados entre os inquilinos, ficando transparente para o usuário final, pois o sistema deve garantir o isolamento dos dados para que um tenant não acesse os dados de outro.
No modelo SaaS o usuário não precisa adquirir l ...