Por que eu devo ler este artigo:Atualmente tem-se falado muito a respeito de Cloud Computing e fornecimento de software como serviço (SaaS). Dentro do contexto do desenvolvimento SaaS, uma peça fundamental é a implementação de um sistema multi-tenancy, que permite compartilhar a aplicação e o banco de dados entre diversos tenants/clientes.

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 ...

Quer ler esse conteúdo completo? Tenha acesso completo