MIDAS: Um middleware para interoperar aplicações

Propaganda
UNIVERSIDADE FEDERAL DA BAHIA
INSTITUTO DE MATEMÁTICA
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Tarcio Marinho Machado
MIDAS: Um middleware para interoperar aplicações SaaS e
provedores de DaaS
Salvador
2015
Tarcio Marinho Machado
MIDAS: Um middleware para interoperar
aplicações SaaS e provedores de DaaS
Monografia apresentada ao curso de graduação
em Sistemas de Informação, Departamento de
Ciência da Computação, Instituto de Matemática, Universidade Federal da Bahia, como
requisito parcial para obtenção do grau de
Bacharel em Sistemas de Informação.
Orientadora: Professora Daniela Barreiro Claro
Salvador
2015
1
Resumo
A computação em nuvem refere-se aos serviços computacionais oferecidos sob demanda na Internet, como
aplicações, plataformas e infraestrutura. Software como um Serviço (SaaS) mostra-se ser uma área promissora
no campo da computação em nuvem, trazendo melhorias para o modelo tradicional de aplicações na Internet.
Em estudos anteriores, foi observado, contudo, que a interoperabilidade entre diferentes provedores de serviços
na nuvem é um tópico ainda pouco explorado. Assim, o presente trabalho propõe o desenvolvimento de um
middleware que visa estabelecer uma comunicação transparente entre aplicações SaaS e dados de quaisquer
provedores de Dado como Serviço (DaaS) de forma que as aplicações possam trabalhar com conjuntos de
dados de serviços DaaS de qualquer fonte. O middleware, doravante denominado MIDAS, converte a consulta
original para uma requisição DaaS adequada e a envia para o provedor do serviço. O resultado obtido é
então formatado de acordo com a resposta esperada pela aplicação. Com o intuito de prover uma validação
para a funcionalidade do middleware, foi elaborado um estudo de caso explicando seu fluxo de trabalho e
implementação e uma análise em relação ao desempenho quando o MIDAS é utilizado na comunicação. Os
resultados obtidos foram satisfatórios em relação à utilização do MIDAS para permitir a interoperabilidade
entre SaaS e DaaS.
Palavras-chave: Computação em nuvem, Software como um Serviço, SaaS, middleware, MIDAS.
3
Abstract
Cloud computing refers to the computational services offered on demand over the Internet, such as applications, platforms and infrastructure. Software as a Service (SaaS) is showing to be a promising area of research
in the cloud computing field, bringing some improvements to the tradicional web applications model. In previous studies, it has been noticed, however, that the interoperability among different cloud service providers
is a topic yet poorly explored. Thus, the present work proposes the development of a middleware that aims
to establish a transparent communication between SaaS applications and data from any Data as a Service
(DaaS) provider in a way that applications can work with DaaS datasets from any source. The middleware,
named MIDAS, converts the original query to a proper DaaS request and send it to the service provider. The
obtained resultset is then formatted to match the response the application is expecting. In order to provide
a validation for the middleware’s functionality, it has been devised a case study explaining its workflow and
implementation and an analysis regarding the performance when MIDAS is used in the communication. The
obtained results were satisfactory regarding the utilization of MIDAS to allow the interoperability between
SaaS and DaaS.
Keywords: Cloud computing, Software as a Service, SaaS, middleware, MIDAS.
Sumário
1
INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2
FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.1
Computação em nuvem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2
Interoperabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3
Modelo multi-locatário (multi-tenancy ) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4
Técnicas de mapeamento de esquema de banco de dados . . . . . . . . . . . . . . . . .
14
2.4.1
Tabelas Esparsas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.4.2
Tabela Básica e Tabela de Extensão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5
Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3
TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.1
Personalização (customizations) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.2
Armazenamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.3
Migração de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.4
Escalabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.5
Gerenciamento do banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.6
SGBDR (Sistema de Gerenciamento de Banco de Dados Relacional) . . . . . . . . . . .
25
4
PROPOSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.1
Aplicação SaaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.2
Módulo de Requisição do MIDAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.2.1
Decompositor de Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.2.2
Construtor de Consulta
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
5
VALIDAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.1
Estudo de caso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.1.1
Pontos de Wi-Fi em Nova York . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.1.2
Hotéis em Nova York
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
5.2
5.3
Desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ameaças para a validação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
36
6
CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
6.1
Dificuldades encontradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
6.2
Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
Lista de ilustrações
Figura 1 – Modelo único locatário (lado esquerdo) versus multi-locatário (lado direito) . . . . . . . .
13
Figura 2 – Mapeamento da área de Software como um Serviço . . . . . . . . . . . . . . . . . . . . . .
17
Figura 3 – Abstração das múltiplas customizações (XUXU; QINGZHONG; LANJU, 2010) . . . . . .
18
Figura 4 – Arquitetura para múltiplas customizações (XUXU; QINGZHONG; LANJU, 2010) . . . .
19
Figura 5 – Arquitetura de Tabelas Esparsas (WEILIANG; SHIDONG; LANJU, 2010) . . . . . . . .
Figura 6 – Arquitetura de Tabela Básica com Tabelas de Extensão dinâmicas (SHENGQI; SHIDONG;
20
LANJU, 2010) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
Figura 7 – Balanceamento de nós a partir da representação de grafos (HOU; ZHANG; KONG, 2013)
21
Figura 8 – Evolução de metadados (LIU; WU, 2012) . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Figura 9 – Gerenciamento de clusters (BOYTSOV; SOKOLOV, 2012) . . . . . . . . . . . . . . . . .
25
Figura 10 – Middleware MIDAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
Figura 11 – Diagrama de sequência completo do middleware MIDAS . . . . . . . . . . . . . . . . . . .
28
Figura 12 – Diagrama de sequência do estudo de caso . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
Lista de tabelas
Tabela 1 – Análise dos tempos de resposta para a consulta de hotéis . . . . . . . . . . . . . . . . . .
35
Tabela 2 – Análise dos tempos de resposta para a consulta de pontos de Wi-Fi . . . . . . . . . . . .
36
1 Introdução
A Computação em Nuvem refere-se ao novo paradigma computacional que provê aplicações, armazenamento
e até mesmo poder computacional (hardware) sob demanda através da Internet, ou seja, como um serviço
(FOX et al., 2009; BUYYA; YEO; VENUGOPAL, 2008).
A crescente utilização dos serviços baseados em nuvem propicia o surgimento de diferentes abordagens.
Algumas das mais adotadas (ZHOU et al., 2010) são Plataforma como um Serviço (PaaS), Infraestrutura
como um Serviço (IaaS), Dado como um Serviço (DaaS) e Software como um Serviço (SaaS). De forma
geral, serviços na nuvem são cobrados de acordo com a demanda, ou seja, o cliente paga apenas pelos
recursos efetivamente utilizados, um dos fatores motivadores para a migração/adoção do serviço. Outro fator
importante é o potencial de escalar uma aplicação transparentemente de acordo com a demanda. Em outras
palavras, as nuvens representam uma grande malha de sistemas distribuídos e paralelos (BUYYA; YEO;
VENUGOPAL, 2008) que permite que as aplicações possam expandir ou contrair à medida que necessitam
de mais ou menos recursos.
Infraestrutura como Serviço (IaaS, do inglês Infrastructure as a Service) é o modelo de serviço que provê
o aluguel de infraestrutura computacional, como redes e servidores, sob demanda na nuvem (ZHOU et al.,
2010).
Plataforma como um Serviço (PaaS, do inglês Platform as a Service) pode ser visto como um paradigma
intermediário, no qual o cliente faz a escolha de uma plataforma pré-configurada e não precisa se preocupar
com a manutenção da camada de infraestrutura.
O modelo de Software como Serviço (SaaS, do inglês Software as a Service) oferece o aluguel de aplicações
web sob demanda.
Dado como Serviço (DaaS, do inglês Data as a Service) é o paradigma que fornece conjuntos de dados
sob demanda. Diferentemente do modelo de Banco de Dados como um Serviço, que refere-se ao oferecimento
de um banco de dados convencional, como o Oracle ou MongoDB, sob demanda e hospedado na nuvem.
Ao longo da construção deste trabalho, foi desenvolvida uma pesquisa extensiva da literatura disponível a
cerca do modelo de SaaS. O intuito primordial dessa pesquisa inicial foi estudar a comunicação das aplicações e
dados na nuvem a fim de identificar questões ainda pouco exploradas. Como resultado, foi possível observar
uma escassez de trabalhos voltados para a interoperabilidade entre aplicações SaaS e dados advindos de
provedores de DaaS. Essa escassez se deve possivelmente à falta de interesse por parte dos provedores de
DaaS em se padronizar o acesso aos dados.
Com o intuito de preencher essa lacuna, o presente trabalho propõe o desenvolvimento de um middleware
denominado MIDAS, que viabiliza a comunicação transparente entre aplicações SaaS e dados de DaaS independentemente dos provedores dos serviços.
As alternativas oferecidas pelo mercado para oferecer interoperabilidade entre serviços na nuvem limitamse ao fornecimento de modalidades diferentes dentro da mesma nuvem. A comunicação entre serviços de
nuvens distintas é possível desde que a aplicação seja adaptada manualmente para essa nova proposta.
Contudo, foi verificado que as soluções existentes não são transparentes para os provedores dos serviços.
Este trabalho valida a proposta do middleware a partir da concepção de um protótipo do middleware que
estabelece a comunicação transparente entre aplicação e dados oriundos de nuvens distintas. Diante desse
resultado, foi realizada a análise do desempenho do protótipo do ponto de vista do usuário, ou seja, o quão
10
rápido a resposta esperada é retornada. A análise constatou que a inserção do MIDAS na comunicação
aumentou o tempo de resposta em cerca de 96ms.
O presente trabalho está organizado como segue: o Capítulo 2 agrega a fundamentação teórica necessária
para a compreensão da proposta, o Capítulo 3 reúne trabalhos relacionados, o Capítulo 4 apresenta detalhadamente a proposta deste trabalho, o Capítulo 5 descreve a validação desta proposta incluindo um estudo de
caso, análise de desempenho e possíveis ameaças para a validação. Por fim, o Capítulo 6 conclui o trabalho
e apresenta possíveis trabalhos futuros.
2 Fundamentação teórica
Este capítulo reúne todo o embasamento teórico fundamental para a compreensão deste trabalho.
2.1 Computação em nuvem
A computação em nuvem é um modelo em que recursos computacionais – como servidores, redes, aplicações
e bancos de dados – são oferecidos como serviço sob demanda através da Internet. Nesse modelo, o cliente
locatário paga tão somente pelos recursos consumidos e livra-se dos custos de manutenção da infraestrutura
utilizada, que passa a ser responsabilidade do provedor do serviço. Mell e Grance (2011) apontam cinco
características essenciais do modelo de computação em nuvem:
Autoatendimento sob demanda. O fornecimento de recursos adicionais (mais espaço de armazenamento,
por exemplo) acontece de forma automática, sob demanda, sem exigir interação do consumidor com o
provedor do serviço.
Amplo acesso à rede. Clientes acessando a rede a partir de quaisquer plataformas, de dispositivos móveis
a estações de trabalho, têm acesso aos seus serviços.
Compartilhamento de recursos. Os recursos oferecidos pelo provedor do serviço são compartilhados pelos seus clientes através do modelo multi-locatário, em que recursos físicos ou virtuais são atribuídos
dinâmicamente aos consumidores de acordo com a demanda.
Rápida elasticidade. Recursos são fornecidos e liberados elasticamente, de forma a conseguir esticar ou
contrair de acordo com a demanda, dando ao consumidor a sensação de ter recursos ilimitados.
Serviço medido. A utilização dos recursos pode ser controlada e monitorada a qualquer momento, o que
provê transparência tanto para o consumidor quanto para o provedor do serviço.
De acordo com Mell e Grance (2011) e Zhou et al. (2010), as principais modalidades oferecidos na nuvem
são Infraestrutura como Serviço, Plataforma como Serviço e Software como Serviço. Contudo, os serviços
da nuvem não se limitam a esses três modelos, existe na literatura (XU, 2012; DUAN, 2012) o conceito de
Tudo como Serviço (XaaS, Everything as a Service), que simboliza as inúmeras possibilidades de serviço na
nuvem.
Infraestrutura como Serviço (IaaS, do inglês Infrastructure as a Service) é o modelo de serviço que provê
o aluguel de infraestrutura computacional, como redes e servidores, sob demanda na nuvem (ZHOU et al.,
2010). Com este serviço, os clientes possuem a liberdade de configurar todo o ambiente da maneira mais
conveniente, inclusive podendo instalar o sistema operacional de sua preferência. O acesso ocorre através de
uma máquina virtual sob total controle do cliente.
Plataforma como um Serviço (PaaS, do inglês Platform as a Service) pode ser visto como um paradigma intermediário, no qual o cliente faz a escolha de uma plataforma pré-configurada e não precisa se
preocupar com a manutenção da camada de infraestrutura, enquanto que, ainda assim, possui um ambiente
personalizado para executar suas aplicações.
O modelo de Software como Serviço (SaaS, do inglês Software as a Service) surge não apenas como um
novo paradigma para executar aplicações na nuvem, mas também promove uma mudança de conceitos sobre
12
como gerenciar os dados das aplicações na nuvem e como aprimorar seu uso para melhor desempenho e
escalabilidade. Ambas as partes se beneficiam com este novo modelo sob demanda: os usuários, posto que
podem acessar a aplicação de qualquer lugar e a qualquer momento, diretamente da web; e os provedores de
software, que irão eliminar os custos de manutenção da infraestrutura, uma vez que estes ficam a cargo do
provedor de serviço da nuvem.
Dado como Serviço (DaaS, do inglês Data as a Service) é um paradigma proeminente dentre os serviços
de computação em nuvem que fornece dados sob demanda. O fornecimento dos dados pelos provedores
de DaaS costuma ocorrer através de APIs (Application Programming Interface), interfaces que permitem o
consumidor consultar os dados. Em alguns casos, dados públicos também podem ser adquiridos via download
no domínio do provedor. Consequentemente, consumidores livram-se da manutenção de bases de dados
em larga escala. Vale ressaltar que Dados como Serviço (DaaS) e Banco de Dados como Serviço (DBaaS)
são dois serviços distintos. O último refere-se ao oferecimento de um banco de dados, como o Oracle ou
MongoDB, sob demanda e hospedado na nuvem. O foco do modelo de Dados como Serviço está no conjunto
de dados em si, como tabelas em um banco de dados relacional, de tal forma que apenas a leitura dos
dados é permitida. Sendo assim, aos consumidores cabe escolher dentre os conjuntos de dados oferecidos
pelo provedor quais se adequam à sua finalidade. Além disso, governos, instituições e empresas tendem a
disponibilizar publicamente informações, como despesas, orçamentos ou dados econômicos, o que contribui
para o crescimento da demanda por provedores de DaaS.
2.2 Interoperabilidade
Conforme apontam (ASUNCION; SINDEREN, 2010), a definição de interoperabilidade difere levemente de
autor para autor na literatura. No entanto, pode-se entender por interoperabilidade a capacidade de dois ou
mais sistemas interagirem entre si para atingir uma determinada meta sem que nenhuma das partes precise
saber das especificidades da outra (POKRAEV, 2009). Na área de computação em nuvem, (LOUTAS et al.,
2011; AHRONOVITZ et al., 2010) apresentam o conceito de interoperabilidade como sendo “a habilidade de
escrever código que funciona simultaneamente em mais de um provedor de Nuvem, independentemente das
diferenças entre os provedores”.
Quando se busca interoperar dois ou mais sistemas, de forma a fazê-los colaborar em uma tarefa, (ASUNCION; SINDEREN, 2010) destacam a dificuldade de se chegar a uma maneira em comum para codificar,
compreender e utilizar os dados intercambiados. Sendo assim, eles dividem essas diferenças de interoperabilidade em três camadas: sintática, semântica e pragmática.
A interoperabilidade sintática é obtida quando há a compatibilidade de gramática e vocabulário dos dados
entre cada sistema envolvido durante o intercâmbio.
A interoperabilidade semântica é alcançada quando existe o entendimento comum do significado dos dados
por todas as partes.
A interoperabilidade pragmática é atingida quando o efeito das mensagens enviadas é compreendido
pelos sistemas participantes do intercâmbio, logo as mensagens enviadas causarão o efeito esperado pelo
sistema remetente. Pokraev (2009) diz ainda que a interoperabilidade pragmática só é obtida se existe a
interoperabilidade sintática e semântica entre os sistemas.
De acordo com Loutas et al. (2011), grande parte dos estudos de interoperabilidade voltados para computação em nuvem concentram-se no aspecto semântico. Além disso, dois requisitos fundamentais são destacados
para que se resolvam os problemas de compatibilidade e cooperação entre os sistemas na nuvem: o desenvolvimento de um conjunto de modelos padronizados que descrevam os principais elementos da nuvem, como
13
serviços e recursos computacionais e a criação de uma API padrão para a nuvem que seja suportada pelos
provedores da nuvem. A dificuldade em se adotar um padrão para a nuvem é principalmente a resistência
por parte dos provedores, que veem em seus diferenciais uma vantagem competitiva.
2.3 Modelo multi-locatário (multi-tenancy )
Sistemas de Gerenciamento de Banco de Dados Relacionais (SGBDR) são vastamente utilizados pelos mais
diversos tipos de aplicação. Atualmente, com a explosão dos serviços na nuvem, muitas novidades vem
surgindo. Aplicações tradicionais realizam suas operações de dados, como inserção, atualização e consulta,
sobre uma base de dados privada, geralmente acessível apenas de dentro da organização. Esse é o escopo
de uma aplicação com um único locatário (single-tenant), onde o locatário é a própria organização (lado
esquerdo da Figura 1). Ao mudar para a nuvem, o que muitas dessas organizações buscam é a vantagem de
cortar os custos com a manutenção da infraestrutura computacional dessas aplicações. Ao adotar um serviço
de SaaS, essa organização está migrando seus dados para os servidores do provedor de SaaS, passando a ser
um dos múltiplos locatários do serviço e pagando somente pelos recursos consumidos, o que caracteriza a
arquitetura do modelo multi-locatário (BEZEMER et al., 2010). A manutenção dos dados dos locatários,
agora responsabilidade do provedor, é realizada através de três abordagens principais:
Figura 1 – Modelo único locatário (lado esquerdo) versus multi-locatário (lado direito)
1. Máquina Compartilhada. Nessa abordagem os locatários compartilham o servidor, porém cada
um adquire um banco de dados individual com tabelas particulares. De acordo com os resultados
obtidos em (JACOBS; AULBACH et al., 2007), um ponto negativo desse modelo é o baixo potencial
de escalabilidade, embora, por outro lado, a migração de dados dos clientes seja mais simples devido
ao alto isolamento de cada locatário.
2. Instâncias Compartilhadas. Nesse modelo os locatários compartilham uma instancia no banco de
dados, contudo ainda mantém as tabelas privadas.
3. Tabelas Compartilhadas. Nesse modelo, como o próprio nome já diz, diferentes locatários compartilham uma mesma tabela no mesmo esquema dentro do banco de dados. Implementações desse modelo
14
costumam incluir uma coluna Tenant (locatário) em cada uma das tabelas como forma de identificar
qual linha pertence a qual locatário. Essa abordagem é conhecida por oferecer maior escalabilidade em
comparação às demais, mas também traz uma série de problemas, como baixo desempenho e dificuldade
de migração.
2.4 Técnicas de mapeamento de esquema de banco de dados
Nas subseções seguintes estão descritos alguns dos modelos de arquitetura para armazenamento de dados mais
usados na implementação de esquemas de banco de dados para aplicações SaaS no modelo multi-locatário.
2.4.1 Tabelas Esparsas
Esta abordagem baseia-se no modelo de Tabelas Compartilhadas, sua principal característica é a presença
de tabelas bastante largas, o que se traduz em uma altíssima quantidade de colunas. O modelo é composto
por dois tipos de tabela: Tabelas de Metadados e Tabelas de Dados Esparsos. A primeira conta com três
atributos fundamentais que são o TenantID (identificador do locatário), TableID (identificador da tabela) e
ColumnID (identificador da coluna). Já a Tabela de Dados possui o TenantID, TableID e mais as N colunas
de dados de cada locatário. Embora esse modelo contribua para uma redução significativa do número de
tabelas no esquema, ele acaba causando desperdício de espaço de armazenamento e queda de desempenho
das consultas em função do elevado número de NULLs (valores nulos) gerados, visto que alguns locatários
podem usar mais colunas que outros.
2.4.2 Tabela Básica e Tabela de Extensão
Tabela Básica é a maneira mais simples de se implementar o modelo multi-locatário, tendo em vista que ele
só adiciona a coluna TenantID em cada tabela do esquema e compartilha essas tabelas entre os locatários
(AULBACH et al., 2008). As Tabelas de Extensão, por sua vez, tentam solucionar o problema de extensibilidade, que significa separar dados comuns de dados mais específicos, pertinentes a determinados grupos de
locatários (dados de extensão). Ambas as tabelas de dados comuns e dados de extensão recebem o atributo
TenantID, já que diferentes locarários podem usar os mesmos dados de extensão, mais o atributo RowID, um
identificador da linha.
No comparativo, as Tabelas Básicas apresentam grande escalabilidade, entretanto produzem muitos valores nulos, enquanto que as Tabelas de Extensão proveem melhor extensibilidade com a consequência de que
o número de tabelas cresce proporcionalmente ao número de locatários. Existe ainda uma versão aprimorada
discutida em (SHENGQI; SHIDONG; LANJU, 2010) que combina Tabela Básica com Tabela de Extensão
como um modo de limitar o número de tabelas de extensão a somente uma. Para isso, esse novo modelo
propõe uma Tabela Básica contendo todos os dados comuns entre os locatários, uma Tabela de Extensão
que armazena os pares nome-valor das colunas de extensão e uma Tabela de Metadados. Mais uma vez
os atributos TenantID e TableID são empregados, desta vez nas tabelas Básica e de Metadados. Um novo
atributo é sugerido, o GlobalID, que é inserido nas tabelas Básica e de Extensão com o propósito de se chegar
aos respectivos dados de extensão de cada locatário partindo da Tabela Básica.
15
2.5 Middleware
De maneira simplificada, um middleware pode ser visto como uma camada intermediária de abstração entre
sistemas heterogêneos que passam a se comunicar de maneira transparente através de uma interface em
comum. Uma definição mais técnica, fornecida por (BRUNEO; PULIAFITO; SCARPA, 2007) no contexto
de redes de sistemas distribuídos, é a de que o middleware é uma camada de software empregada entre
o sistema operacional e as aplicações, provendo abstração para o desenvovimento de sistemas distribuídos.
Dessa forma, serviços como concorrência, transações, segurança e alta disponibilidade são ofertados pelo
middleware e não pelos desenvolvedores das aplicações.
No contexto da computação em nuvem, middlewares como o IBM Altocumulus (RANABAHU; MAXIMILIEN, 2009) são empregados como meio de se uniformizar a comunicação entre serviços na nuvem. Uma
das vantagens de se utilizar um middleware para comunicar serviços na nuvem é a de se obter uma interface
padrão independente da linguagem de programação adotada pelos diferentes provedores de serviço. Ou seja,
obtêm-se uma comunicação transparente.
Uma característica comum das implementações de middleware é que eles costumam ser baseados em XML
(Extensible Markup Language), protocolo SOAP (Simple Object Access Protocol ) e Arquitetura Orientada a
Serviços (SOA) (ORACLE, 2015). A utilização desses recursos se deve exatamente ao fato de serem orientados
a serviços web, que visam amplo suporte aos mais variados sistemas e aplicações. Outro formato também
bastante usado é o JSON (JavaScript Object Notation) devido à sua simplicidade.
Em contrapartida, a inserção de um middleware em uma comunição entre sistemas heterogêneos adiciona
ao tempo total da comunicação o tempo de processamento do middleware, fator que pode ser prejudicial para
a execução de sistemas que precisam de alta performance, por exemplo.
3 Trabalhos relacionados
Com o intuito de melhor posicionar a relevância do presente trabalho, foi realizada uma revisão sistemática
simplificada na qual foram selecionados os artigos mais relevantes ligados diretamente à relação entre SaaS e
dados na nuvem. Inicialmente foram selecionados todos os trabalhos que continham as palavras-chave ‘SaaS’
e ‘dados na nuvem’. Em seguida, foram aplicados os seguintes critérios de exclusão: (i) artigos que não
possuíam trabalhos relacionados; e (ii) artigos cujo foco principal não estava no acesso/gerenciamento dos
dados. Por exemplo, foram descartados artigos focados em segurança de aplicações na nuvem e na camada
de negócios. Por fim, obteve-se um conjunto de 12 (doze) artigos que foram sintetizados no gráfico de bolhas
da Figura 2. O gráfico nos permite observar quais tópicos de pesquisa estão sendo mais ou menos abordados
pela comunidade científica, além de ressaltar o tipo de contribuição científica proposto e a forma utilizada
para a validação.
Figura 2 – Mapeamento da área de Software como um Serviço
No eixo vertical do gráfico (Research Context) estão representados os principais tópicos de pesquisa relacionados: Interoperabilidade (Interoperability), Personalização (Customization), Armazenamento (Storage),
Migração (Migration), Escalabilidade (Scalability) e SGBDR (RDBMS ). Já o eixo horizontal relaciona duas
visões: do lado esquerdo, o tipo de contribuição científica do trabalho e do lado direito, sua forma de validação. Dentre as contribuições, dois artigos propuseram um Framework, dois propuseram um Método (Method ),
um propôs uma Ferramenta (Tool ), quatro propuseram uma Arquitetura (Arquitecture) e três propuseram
um Modelo (Model ). Conforme mostra o gráfico, apenas dez dos trabalhos forneceram uma forma de valida-
18
ção. A mais utilizada foi o Caso de uso (Use case), presente em quatro artigos. Dois validaram através de
Avaliação empírica (Empirical evaluation), dois através de Experimento controlado (Controlled experiment),
um através de Benchmark e um através de protótipo. As interseções entre os eixos são bolhas que informam
quantos artigos foram enquadrados na relações Tópico x Contribuição (lado esquerdo) e Tópico x Validação
(lado direito). Ou seja, uma bolha com número 2 no lado esquerdo do gráfico representa um conjunto de
dois artigos que fornecem uma contribuição X (eixo horizontal) e abordam o tema Y (eixo vertical), caracterizando a relação Tópico x Contribuição. O mesmo vale para o lado direito do gráfico, que representa a
relação Tópico x Validação.
Os tópicos de pesquisa observados são explanados em mais detalhes nas seções a seguir.
3.1 Personalização (customizations)
Este tópico reúne os trabalhos que tratam do processo de personalização (customização) do banco de dados
de uma aplicação SaaS.
De acordo com (XUXU; QINGZHONG; LANJU, 2010), o serviço de SaaS não suporta que um locatário
alugue uma única aplicação e faça múltiplas personalizações, fator que leva a diversas operações repetidas e
duplicação de metadados. A Figura 3 exibe dois níveis de customização. No primeiro nível, foi adicionada
uma coluna vermelha às tabelas X e Y. No segundo nível, mais duas personalizações foram realizadas. Na
primeira, adiciona-se uma coluna verde à tabela X, que pode ser útil para uma determinada subdivisão da
aplicação. Na segunda, adiciona-se duas colunas amarelas à tabela Y, provavelmente relevante para outro
ramo da aplicação. As colunas azuis representam os atributos originais da aplicação. Com esse objetivo, eles
propuseram a arquitetura de um modelo de armazenamento de dados em esquemas compartilhados orientado
a metadados que habilita múltiplas customizações.
Figura 3 – Abstração das múltiplas customizações (XUXU; QINGZHONG; LANJU, 2010)
Conforme ilustrado na Figura 4, a solução tem seus pilares no paradigma de Tabelas Compartilhadas,
tendo as seguintes características:
• Uma área para as tabelas com metadados personalizados, responsável por manter os metadados das
tabelas e colunas das aplicações e os metadados customizados do locatário.
• Uma área para as tabelas de dados, as quais armazenam os dados da camada de negócios.
• Uma área para tabelas de índices, que mantém tabelas de índices correspondentes a diferentes esquemas.
A solução é validada através de um sistema de testes online que conclui que quanto maior o montante de
metadados compartilhados, menos espaço é demandado para os metadados customizados em comparação ao
modelo tradicional.
19
Figura 4 – Arquitetura para múltiplas customizações (XUXU; QINGZHONG; LANJU, 2010)
O trabalho dessa seção descreve uma solução voltada para aplicações SaaS na nuvem, assim como a
proposta do presente trabalho, porém não trata da interoperabilidade com fontes de dados DaaS.
3.2 Armazenamento
Soluções de armazenamento foram as mais propostas dentre os tópicos observados, englobando cinco artigos.
De maneira geral, essas soluções descrevem formas de se reduzir o desperdício de espaço nos bancos de dados
e aperfeiçoar o desempenho das consultas.
(WEILIANG; SHIDONG; LANJU, 2010) propuseram aperfeiçoar a eficiência das consultas e minimizar
o desperdício de espaço de armazenamento reduzindo a quantidade de valores nulos gerados pelo modelo
de Tabelas Esparsas. Ao invés de empregar uma única tabela esparsa correlacionando-se com uma tabela
de metadados, eles implementam algumas tabelas esparsas com um número máximo de colunas, que serão
as tabelas de dados. Eles também adicionam a Tabela de Metadados Esparsa, que relaciona a tabela de
metadados com cada tabela esparsa de dados. A Figura 5 ilustra a estruturação das múltiplas tabelas
esparsas em comparação com o modelo tradicional de uma única tabela esparsa.
Armazenando os dados dos locatários em múltiplas tabelas esparsas, é possível selecionar aquela cujo o
número máximo de colunas se aproxima mais do número de atributos usados pelo locatário. Por exemplo,
em um banco de dados com quatro tabelas esparsas de 30, 80, 200 e 500 colunas respectivamente, a tabela
de 80 colunas seria a escolhida para um locatário que usa 50 colunas. A determinação do número de tabelas
esparsas e seus respectivos limites de colunas é proposta como uma especulação fundada na demanda dos
locatários. Como há uma variação notável dessa demanda, ele põem que não há uma fórmula para se chegar
a um número preciso de tabelas e colunas, esse seria um resultado da análise das informações disponíveis a
respeito das customizações dos locatários.
A solução proposta por (SHENGQI; SHIDONG; LANJU, 2010) aumenta a eficiência do acesso aos dados
da arquitetura de armazenamento do modelo Tabela Básica combinada com Tabelas de Extensão. Eles armazenam alguns dos dados de extensão mais frequentemente acessados na Tabela Básica, evitando, portanto,
a reconstrução de tuplas. A nova estrutura traz mudanças tanto na Tabela Básica quanto na tabela de
metadados. Nessa última, três colunas são adicionadas (Figura 6):
20
(a) Única tabela esparsa
(b) Múltiplas tabelas esparsas
Figura 5 – Arquitetura de Tabelas Esparsas (WEILIANG; SHIDONG; LANJU, 2010)
Count Sua função é registrar o número de acessos à coluna correspondente.
IsInBasic Sua função é registrar se a coluna já foi transferida para a Tabela Básica.
BColumnName Sua função é guardar o nome da coluna na Tabela Básica se ela já foi transferida.
Figura 6 – Arquitetura de Tabela Básica com Tabelas de Extensão dinâmicas (SHENGQI; SHIDONG;
LANJU, 2010)
Na Tabela Básica, algumas colunas do tipo VARCHAR são reservadas (inicialmente 60) para armazenar
dados de extensão. Eles também desenvolveram um algoritmo que trabalha em segundo plano durante um
período de tempo pré-determinado que é responsável por transferir os dados de extensão para a tabela básica
e vice-versa. O valor de Count é inicializado com 0, IsInBasic com ‘NO’, e BColumnName com NULL.
21
Durante a transferência, os usuários da aplicação podem consultar os dados normalmente e as atualizações
(operações de update) são manipuladas com cuidado para evitar problemas de consistência. Uma Fórmula
de Avaliação é usada para computar o peso de todas as colunas de extensão dos locatários. A coluna com
maior peso – digamos L – ainda armazenada na tabela de extensão, será transferida para a tabela básica se lá
houver um espaço reservado livre. Senão, o algoritmo procura por uma coluna com peso mínimo – digamos
M – na tabela básica. Se L > M, então primeiramente M é transferido da tabela de extensão para a tabela
básica e em seguida o oposto é feito com L. Caso contrário, nada é feito, segue para a próxima tabela de
extensão.
(HOU; ZHANG; KONG, 2013) propuseram reduzir o tempo de acesso aos dados e o custo para atualizar
as réplicas das bases de dados de aplicações SaaS no modelo multi-locatário. Originalmente, os bancos de
dados na nuvem distribuem aleatoriamente os dados dos locatários em múltiplos nós de dados. O problema
destacado é que essa abordagem afeta o tempo de acesso aos dados, balanceamento de carga dos nós e o
custo para atualizar as réplicas, então eles propõem uma estratégia de posicionamento dos dados baseada em
grafos. A estratégia consiste em uma representação de grafos, uma função de balanceamento e um algoritmo
que executa o balanceamento. O grafo ilustrado na Figura 7 é a representação de um grafo unidirecional
completo, no qual um dado locatário i se conecta a todos os nós e cada borda possui um peso. Os pesos são
estipulados pela função de balanceamento, que leva em consideração os aspectos a seguir.
1. A carga dos vértices, proporcional ao número de nós adjacentes.
2. A distância de dois nós adjacentes na rede.
3. A gravidade da carga de trabalho e distância de rede em avaliação.
4. O tempo de resposta para a requisição de um locatário.
Figura 7 – Balanceamento de nós a partir da representação de grafos (HOU; ZHANG; KONG, 2013)
O algoritmo inicialmente realiza a representação do grafo e então encontra um sub-grafo completo com
quatro nós contendo o vértice do locatário com valor mínimo de soma do peso das bordas. Os dados do
locatário são armazenados no nó com menor peso com o vértice do locatário e os outros dois nós irão receber
as réplicas.
Insatisfeitos com o desempenho das implementações disponíveis do modelo de Tabelas Compartilhadas,
(GORTI; SHIRI; RADHAKRISHNAN, 2013) propõem a implementação de Tabelas Índice, cujas principais
22
metas são diminuir o tempo de processamento e desperdício de espaço. Essa abordagem é semelhante às
outras propostas no que tange à existência de uma tabela básica contendo os dados mais comuns dentre
os locatários e uma coluna TenantID identificando os dados de cada um, todavia, em sua abordagem eles
adicionam uma coluna Índice. Essa nova coluna é inserida na tabela básica e é incrementada automaticamente
a cada linha, ela é definida como UNIQUE e NOT NULL. Além da tabela básica, o modelo também conta
com tabelas de suporte que contem apenas duas colunas: Índice (chave para a tabela básica) e um atributo
específico do locatário. O número de tabelas de suporte crescem de acordo com o número de locatários.
A solução é validada através de experimentos controlados em MySQL e testados contra o modelo Chunk
Tables (AULBACH et al., 2008). Seus resultados mostraram que as Tabelas Índice economizaram espaço por
não precisarem de valores NULL e sua arquitetura simples pôde prover melhor indexação e desempenho de
consultas. Em geral, consultas são processadas mais rápido quando não são necessárias operações join sobre
todas as tabelas de suporte, visto que o número de junções é igual ao número de colunas de suporte.
Sabendo que diversos locatários estão acessando seus recursos simultaneamente nas mesmas tabelas físicas,
esse acesso é na verdade feito através de visões lógicas específicas de cada locatário. Entretanto, soluções
atuais para o gerenciamento de dados na nuvem não foram feitas para o SaaS (), o que dificulta direcionar
com precisão as requisições dos locatários para os seus dados. Frente a esse cenario é que () propõe uma
estrutura de índices multi-camada cujo intento é fornecer melhor desempenho para acessar os dados. A
estrutura é composta por três camadas de índices:
1. Índice de Nó (terceiro nível), responsável por localizar rapidamente o dado de um locatário em um nó.
2. Índice Lógico (segundo nível), responsável pelos dados dos locatários no nível de um único nó. Ele
provê suporte para compartilhamento, personalização e indexação isolada para garantir rápido acesso
ao dado do locatário.
3. Índice Físico (primeiro nível), oferece suporte para rápido acesso aos índices lógicos do locatário.
Os trabalhos dessa seção propõem soluções voltadas para aprimorar o armazenamento de dados na nuvem,
mas limitam-se ao banco de dados da própria aplicação SaaS e não tratam da interoperabilidade entre
aplicação e fontes de dados DaaS.
3.3 Migração de dados
Nesta seção são discutidas soluções e alternativas para problemas relacionados à migração de dados ao
atualizar uma aplicação SaaS no modelo de Tabelas Compartilhadas.
Segundo (ZHOU et al., 2013), a migração do componente de negócios de uma aplicação de único locatário
para multi-locatário é um desafio sobretudo em razão do componente de negócios não relacionado ao locatário
e o acesso global aos dados. Faz-se necessário um meio unificado para acessar e isolar dados não relacionados
ao locatário no modelo multi-locatário. Eles propõem um framework para desenvolvimento de banco de
dados multi-locatário para efetuar o isolamento de dados do componente de negócios a partir de um banco de
dados de memória e outro global. É introduzido um mecanismo de relacionamento de dados para construir
a relação entre os bancos de dados (memória e global) para assegurar a correta execução do componente de
negócios no ambiente SaaS. Os autores realizaram realizaram teste tendo o MySQL como banco de dados
global e o SQLite como memória para um sistema de múltiplos restaurantes.
Em virtude da complexidade da migração de dados, (LIU; WU, 2012) desenvolveu um framework que
habilita a atualização do esquema da base de dados sem migração de dados. Essas atualizações representam
23
mudanças do locatário na modelagem dos dados durante a atualização da aplicação SaaS e ela variam desde
a adição de novas colunas à implantação de regras de normalização. A solução é baseada nos elementos
subsequentes (Figura 8).
1. Descrição da Atualização do Esquema. Essa etapa é usada para descrever informações sobre a
atualização do esquema e é formada por três componentes:
a) Objeto de Atualização, uma representação em formato de objeto da tabela que será atualizada.
b) Tipo de Atualização, informa a operação que será empregada durante a atualização do esquema.
c) Descrição da Atualização, contem os detalhes sobre a tabela e as colunas que estão sendo atualizadas (ou NULL quando é uma operação de deleção).
2. Estratégia de Evolução dos Metadados. Responsável por fazer a evolução dos metadados, essa
etapa utiliza a descrição da atualização gerada na etapa anterior como entrada para criar novos metadados de acordo com o Tipo de Atualização de cada mudança nas tabelas antigas.
3. Mecanismo de dados. É o componente responsável por aproveitar os metadados gerados anteriormente para acessar os dados na tabela. Ele conta com um pré-processador que converte a requisição
SQL da visão lógica para a tabela física.
Figura 8 – Evolução de metadados (LIU; WU, 2012)
Um Modelo de Dados Multi-locatários Misto é proposto por (JIANG et al., 2012) como uma tentativa de
balancear o desempenho do banco de dados e a expectativa dos locatários quanto à redução de custos. Eles
avaliaram os prós e contras dos três principais modelos multi-locatário (Máquina Compartilhada, Instâncias
Compartilhadas e Tabelas Compartilhadas) e propuseram um novo modelo denominado Banco de Dados
Locatário visando superar as desvantagens encontradas nos modelos originais. Juntamente com o modelo eles
provêem o CMMG (sigla para Configurable Multi-tenancy data Model Group) como proposta para migração
de banco de dados uni-locatário. O CMMG é a estrutura capaz de suportar as necessidade de customização
dos dados. Com essa estrutura os autores idealizam um proxy de acesso aos dados que funciona como um
invólucro para assegurar que os dados são migrados apesar das diferenças entre os modelos uni e multilocatário.
24
Os trabalhos dessa seção propõem soluções voltadas para a migração de dados de aplicações SaaS, entretanto, diferentemente da proposta do presente trabalho, não tratam da interoperabilidade com fontes de
dados DaaS.
3.4 Escalabilidade
O propósito maior de (NI et al., 2012) é superar os problemas de baixa escalabilidade, inerentes à abordagem
de Instâncias Compartilhadas, e baixo desempenho, inerente às Tabelas Compartilhadas. Para isso os autores
propõem um método de esboço para esquema de banco de dados adaptativo para aplicações multi-locatário.
O esboço é composto por uma tabela base, contendo atributos importantes, e tabelas suplementares para cada
um dos atributos restantes. Eles definem como atributos comuns aqueles que são altamente compartilhados,
atributos estrela as chaves primárias e todas as demais colunas são consideradas incomuns. Os atributos
importantes da tabela base irão compor atributos estrela, atributos comuns e atributos estrela. Dessa forma,
evita-se junções custosas, visto que muitas tabelas irão usar essas colunas. Atributos dependentes são classificados como incomuns, contudo eles são considerados “leves” em termos de espaço de armazenamento e
“caros” em termos de processamento de consultas, por conseguinte é mais vantagem deixá-los na tabela base.
Os atributos restantes formarão as tabelas suplementares.
O trabalho anterior propõe melhorar a escalabilidade de bancos de dados de aplicações SaaS, contudo
não trata da interoperabilidade com fontes de dados DaaS, como é o caso do presente do presente trabalho.
3.5 Gerenciamento do banco de dados
O foco da pesquisa de (BOYTSOV; SOKOLOV, 2012) é o desenvolvimento de uma solução para organizar
clusters de bancos de dados multi-locatários na nuvem utilizando servidores comuns. A idéia é criar um
sistema complexo que seria implantado como uma camada de abstração entre servidores de aplicação e
servidores de banco de dados (Figura 9). Eles adotam a abordagem de Instâncias Compartilhadas para o
isolamento dos dados a nível de banco de dados em prol de alcançar maior generalidade, visto que o modelo
de Tabelas Compartilhadas requer mais conhecimento sobre os dados dos locatários. A seguir, uma lista dos
componentes fundamentais do sistema proposto.
1. Um servidor dedicado, responsável por direcionar as consultas ao servidor de dados certo o mais rápido
possível.
2. Um servidor de gerenciamento de replicação e cópia de segurança.
3. Um conjunto de serviços-agente colocados nos servidores de dados para coletar estatísticas sobre a carga
do servidor e montar seu estado em caso de falha.
4. Um servidor de distribuição de dados e balanceamento de carga, o núcleo de gerenciamento da solução.
Ele está no controle de coletar estatísticas de uso do sistema, geração de relatórios, gerenciamento do
servidor de replicação e efetuar a distribuição inicial dos dados dos locatários entre os servidores, além
de outras tarefas.
O trabalho anterior, embora relacionado ao gerenciamento de bancos de dados na nuvem, não trata da
interoperabilidade entre aplicações SaaS e fontes de dados DaaS, como é o caso do presente do presente
trabalho.
25
Figura 9 – Gerenciamento de clusters (BOYTSOV; SOKOLOV, 2012)
3.6 SGBDR (Sistema de Gerenciamento de Banco de Dados Relacional)
Em visão do problema de dispersão dos dados inerente ao modelo de Tabelas Compartilhadas e o seu precário
sistema de indexação, o trabalho desenvolvido por (HUI et al., 2009) implementa um sistema de banco de
dados multi-locatário que pretende aperfeiçoar os serviços de armazenamento e indexação para aplicações
na nuvem. A ferramenta, nomeada M-Store, foi desenvolvida a partir do MySQL e faz uso de duas técnicas
especiais para atingir maior escalabilidade e oferecimento dos serviços: Bitmap Interpreted Tuple (BIT) e
Multi-Separated Index (MSI).
BIT é a técnica usada para solucionar o desperdício de espaço e o baixo desempenho de consultas, inerentes
às Tabelas Compartilhadas. Ela consiste de duas fases:
1. Primeiro, uma string bitmap é construída para cada locatário, ela decodifica quais atributos são utilizados e quais não são.
2. Segundo, tuplas são armazenadas e recuperadas de acordo com a string bitmap de cada locatário.
O MSI constrói um índice para cada locatário ao invés de um para todos. À primeira vista, isso poderia
levar a um enorme número de índices, crescendo ao passo do número de locatários. Entretanto, o que
acontece é que o número de índices não cresce tanto porque apenas uma fração do total de locatários irá de
fato construir um índice em um atributo específico, não um índice para cada atributo.
Assim como no presente trabalho, o artigo anterior também trata dos dados na nuvem, todavia não aborda
a interoperabilidade entre aplicações SaaS e fontes de dados DaaS.
De modo geral, todos as propostas relacionadas se preocupam com a maneira como aplicações SaaS
obtêm os dados na nuvem, visando melhor desempenho e eficiência. Um ponto fundamental que difere essas
propostas do presente trabalho é que nenhuma delas lida com a comunicação entre aplicação e fontes de
dados externas, como provedores de DaaS.
4 Proposta
O presente trabalho propõe um middleware para que aplicações hospedadas em um provedor de Software
como um Serviço possam operar não apenas com suas próprias bases de dados, mas também com dados de
fontes externas com pouco esforço adicional. Esse middleware é denominado MIDAS e se compromete a
estabelecer uma comunicação transparente entre provedores de SaaS e de Dados como Serviço (DaaS).
Atualmente, as maneiras de se integrar os serviços de SaaS e DaaS são ineficientes, visto que são manuais.
São elas:
• Adquirir um conjunto de dados de um provedor de DaaS e preencher o banco de dados da aplicação
manualmente.
• Acessar a API fornecida pelo provedor diretamente da aplicação, o que exige conhecimento da API do
DaaS.
A idéia é manter as nuvens integradas como uma rede de energia elétrica, em que um dispositivo pode
ser plugado à energia sem que precise saber qual a fonte (hidroelétrica, eólica, solar). Sendo assim, os
provedores de SaaS não precisam adaptar suas aplicações. Por exemplo, normalmente uma aplicação monta
uma solicitação de dados para os seus servidores de banco de dados e recebe em resposta um conjunto de
dados para formatar e dispor na tela para os seus usuários. Agora, a única mudança envolvida é que a
aplicação irá mandar a mesma consulta para o MIDAS e ele será responsável por recuperar os dados do
provedor de DaaS e retorná-los no formato esperado pela aplicação.
O MIDAS, representado pelo modelo da Figura 10 e diagrama de sequência da Figura 11, contém dois
módulos: o Módulo de Requisição (Request Module) e o Módulo de Resposta (Result Module). Como os
próprios nomes já sugerem, o Módulo de Requisição lida com as requisições enviadas pela aplicação SaaS,
enquanto que o Módulo de Resposta lida com a resposta do DaaS.
Este trabalho propõe o funcionamento do Módulo de Requisição do middleware. O Módulo de Resposta
(em cinza na figura) é proposto em (CIDREIRA, 2015). Logo, as próximas seções explanam em mais detalhes
o papel do provedor de SaaS e os componentes do Módulo de Requisição.
4.1 Aplicação SaaS
À medida que um usuário interage com a aplicação SaaS, algumas páginas irão dispor os dados em forma de
listas, tabelas ou parágrafos, por exemplo. Para o usuário, como o sistema recuperou aqueles dados não tem
importância desde que sua navegação não seja comprometida. É o que acontece quando o sistema realiza
as consultas ao seu banco de dados e é o que deve continuar acontecendo após a inserção do MIDAS nesse
cenário. O usuário não deve sofrer com os detalhes de implementação do sistema nem esperar mais do que o
necessário para visualizar a informação desejada em tela.
4.2 Módulo de Requisição do MIDAS
Constituído pelos componentes Decompositor de Consulta (Query Decomposer ) e Construtor de Consulta
(Query Builder ), esse módulo é responsável por receber a consulta enviada pela aplicação SaaS e transmitir
para o provedor de DaaS. Cada componente é explicado em detalhes nos subtópicos a seguir.
28
Figura 10 – Middleware MIDAS
Figura 11 – Diagrama de sequência completo do middleware MIDAS
29
4.2.1 Decompositor de Consulta
Esse é o componente que recebe a consulta da aplicação exatamente como ela é enviada, originalmente na
linguagem do banco de dados usado pelo SaaS. Sua função é decompor essa consulta em um formato chavevalor independente. Esse novo formato irá garantir que o Construtor de Consulta seja capaz de construir a
requisição do DaaS, independentemente da API que o provedor esteja utilizando.
O processo de decomposição ocorre através de uma função que é capaz de identificar a sintaxe da linguagem
de banco de dados da consulta e mapear cada cláusula encontrada com seus respectivos valores para um vetor
independente. Por exemplo, para a consulta SQL a seguir:
SELECT nome , idade FROM dataset - pessoas
O Decompositor de Consulta indentifica os atributos ‘nome’ e ‘idade’ como os campos que estão sendo
buscados e os coloca em um vetor ‘ConsultaDecomposta’ sob a chave ‘campos’. Já o ‘dataset-pessoas’ é
entendido como o local onde buscar os dados. Como o objetivo é transformar a consulta em uma requisição
para uma fonte de dados DaaS, o conteúdo do FROM é colocado no vetor sob a chave ‘dataset’, representando
o identificador do conjunto de dados do provedor de DaaS. Por fim, o vetor tem o seguinte formato:
Co ns ul taDecomposta = [ ‘ campos ’ = > ‘ nome , idade ’ , ‘ dataset ’ = > ‘ dataset - pessoas ’]
4.2.2 Construtor de Consulta
Com a consulta decomposta, o Módulo de Requisição prossegue com o processo de transformar a consulta
do SaaS em uma requisição DaaS válida. Para isso, o MIDAS conta com uma base de dados local (Dataset
Information Storage, explicado em (CIDREIRA, 2015)) que contém todas as informações relevantes sobre o
provedor DaaS de destino, incluindo domínio e parâmetros da API. Conforme visto anteriormente, a consulta
original contém o identificador do conjunto de dados DaaS, a partir dele é possível localizar os demais dados do
provedor. Com essas informações, o Construtor de Consulta consegue associar cada chave/valor encontrado
no vetor gerado pelo Decompositor de Consulta com os parâmetros que compõem a API do DaaS.
Primeiramente, o Construtor de Consulta recebe dois parâmetros de entrada: a consulta do SaaS decomposta e outro vetor contendo os dados da API do DaaS.
Após, o componente começa a concatenar os pedaços de informação na ordem correta. O endereço URL
do provedor DaaS é o primeiro passo para que se possa localizar os dados no domínio do provedor através da
internet. Por exemplo:
http :// www . dominiododaas . com . br
Em seguida, é adicionado ao final desse endereço o caminho para a API. Neste exemplo, o caminho é
‘api/’.
http :// www . dominiododaas . com . br / api /
Dessa forma, já é possível acessar a API do DaaS, porém nenhuma busca está sendo feita ainda. Então
são usados os valores da consulta decomposta para montar os parâmetros da busca. Esses, por sua vez,
possuem o formato ‘?chave1=valor1&chave2=valor2&...chaveN=valorN’. Supondo que a API utiliza o
30
termo ‘dataset’ para indicar o identificador do conjunto de dados e o termo ‘query’ para indicar os campos
a serem buscados, esses termos são concatenados ao final da requisição juntamente com os seus respectivos
valores, contidos no vetor da consulta. Dessa forma, obtém-se a requisição DaaS completa:
http :// www . dominiododaas . com . br / api /? dataset = dataset - pessoas & query = nome , idade
Detalhes de formação da URL, como transformação de caracteres especiais, foram suprimidos a fim de
facilitar o entendimento do exemplo.
5 Validação
As alternativas oferecidas pelo mercado para oferecer interoperabilidade entre serviços na nuvem limitam-se ao
fornecimento de modalidades diferentes dentro da mesma nuvem. A Amazon (AMAZON WEB SERVICES,
INC., 2015), por exemplo, é uma empresa referência no ramo de serviços na nuvem. Ela fornece serviços de
infraestrutura, plataforma e banco de dados, além de outras modalidades. Embora a integração entre os seus
serviços exista, ela não se estende para serviços de terceiros.
Tendo em vista esse desafio, o presente trabalho valida a proposta do middleware de três maneiras:
1. Implementação de um protótipo funcional do MIDAS.
2. Elaboração de estudo de caso demonstrando o estabelecimento de uma comunicação transparente entre
aplicação e dados oriundos de nuvens distintas.
3. Realização de análise de eficiência do protótipo, avaliando seu comportamento com relação ao tempo
em comparação com as mesmas consultas sendo realizadas diretamente nos provedores de DaaS.
5.1 Estudo de caso
O objetivo deste estudo de caso é demonstrar o funcionamento do middleware proposto através da introdução
de uma agência de turismo fictícia que deseja hospedar sua aplicação no ambiente de Software como Serviço
(SaaS) da Red Hat, o OpenShift (RED HAT, INC., 2015). Embora o provedor da nuvem ofereça armazenamento MySQL, o interesse da empresa é agregar dados de diferentes provedores de Dados como Serviço
(DaaS) à sua aplicação.
O atual protótipo do MIDAS compreende apenas consultas SQL, especificamente do SGBD MySQL.
Inicialmente, os comandos aceitos são ‘SELECT’, ‘FROM’, ‘WHERE’, ‘ORDER BY’ e ‘LIMIT’. Dentro do
‘SELECT’ também é possível utilizar a expressão ‘*’, informando que todas as colunas deverão ser retornadas.
Em função de demonstrar que uma mesma aplicação pode consultar diferentes provedores de DaaS, este estudo
mostra o funcionamento de duas seções da aplicação:
• A primeira seção exibe uma lista de pontos de Wi-Fi na região metropolitana da Cidade de Nova York,
cujos dados são fornecidos pelo serviço público de DaaS da OpenDataSoft (OPENDATASOFT, 2015).
• A segunda exibe uma lista de hotéis da Cidade de Nova York obtida no portal de dados abertos da
cidade (THE CITY OF NEW YORK, 2015).
A aplicação conta com interface simples, utilizando HTML5, CSS e JavaScript no lado cliente, PHP 5.4 no
lado servidor e banco de dados MySQL 5.5. Adicionalmente, Bootstrap (BOOTSTRAP, 2015) e jQuery (THE
JQUERY FOUNDATION, 2015) também foram utilizados, além do framework CodeIgniter 2 (ELLISLAB,
2015), auxiliando a programação PHP. A seguir, é detalhado o funcionamento de cada uma das seções da
aplicação.
32
5.1.1 Pontos de Wi-Fi em Nova York
Para melhor representar o cenário, considere durante o resto desta seção que o código da Listagem 5.1 é a
consulta SaaS original, ilustrada no modelo do MIDAS da Figura 10 como Query request.
1
SELECT id , name , address , city
2
FROM nyc - wifi - hotspot - locations
3
WHERE city = ‘ New York ’
4
ORDER BY id
5
LIMIT 10
Listagem 5.1 – Busca por pontos de Wi-Fi em Nova York
A consulta original é obtida através da interação do usuário com a aplicação e é passada como parâmetro
para a função _query_decomposer (Listagem 5.2), que representa a implementação do componente Decompositor de Consulta (ilustrado no modelo do MIDAS da Figura 10 como Query Decomposer ). Na linha 2 da
Listagem 5.2, possíveis espaços no início e no fim da consulta são removidos e todos os caracteres convertidos
para letra minúscula. Um vetor de nome $indexes é criado e preenchido com o índice da primeira posição de
cada termo MySQL presente na consulta (linhas 4 a 7 da Listagem 5.2). A posição do ‘SELECT’ é assumida
como 0 (zero), posto que ele deve obrigatoriamente iniciar a consulta.
1
private function _query_decomposer ( $query ) {
$sql = strtolower ( trim ( $query ) ) ;
2
3
4
$indexes [] = strpos ( $sql , " from " ) ;
5
$indexes [] = strpos ( $sql , " where " ) ;
6
$indexes [] = strpos ( $sql , " order by " ) ;
7
$indexes [] = strpos ( $sql , " limit " ) ;
8
$jsonArray [ " fields " ] = $this - > _getFields ( $sql , $indexes [0] -6) ;
9
10
$jsonArray [ " dataset " ] = $this - > _getDataset ( $sql , $indexes [0]+4 , $indexes , 1) ;
11
$jsonArray [ " filters " ] = $indexes [1] === false ? false : $this - > _getFilters ( $sql ,
12
$jsonArray [ " order " ] = $indexes [2] === false ? false : $this - > _getOrder ( $sql ,
13
$jsonArray [ " limit " ] = $indexes [3] === false ? false : $this - > _getLimit ( $sql ,
$indexes [1]+5 , $indexes , 2) ;
$indexes [2]+8 , $indexes , 3) ;
$indexes [3]+5) ;
14
return $jsonArray ;
15
16
}
Listagem 5.2 – Função _query_decomposer
Em seguida a função salva as colunas da consulta – aquelas entre o ‘SELECT’ e o ‘FROM’ – dentro do
vetor $jsonArray na posição ‘fields’ (linha 9). A chave ‘dataset’ do vetor $jsonArray guarda o valor passado
no ‘FROM’ (linha 10). Nesse caso, ao invés de informar o nome da tabela no banco de dados relacional, o
‘FROM’ conterá o nome identificador do conjunto de dados do DaaS. Isso significa que a aplicação SaaS está
33
consultando o conjunto de dados externo da mesma forma que faria com o próprio banco de dados. A chave
‘filters’ mapeia o valor do ‘WHERE’ (linha 11); ‘order ’, o valor do ‘ORDER BY’ (linha 12); e ‘limit’, o valor
do ‘LIMIT’ (linha 13).
Agora que o vetor independente foi obtido, o próximo passo é executar a função _query_builder (Listagem 5.3), que representa a implementação do componente Construtor de Consulta (ilustrado no modelo do
MIDAS da Figura 10 como Query Builder ). A função possui dois parâmetros: $api_params e $values.
1
private function _query_builder ( $api_params , $values ) {
2
$daas_request
3
$daas_request .= $api_params [ " search_path " ];
= $api_params [ " domain " ];
4
if ( $api_params [ " dataset_param " ] !== null ) {
5
$daas_request .= " ? " . $api_params [ " dataset_param " ]. " = " . $values [ " dataset " ];
6
} else {
7
$daas_request .= $values [ " dataset " ];
8
}
9
10
if ( $values [ " filters " ]) {
11
if ( strpos ( $daas_request , " ? " ) !== false ) {
12
$daas_request .= " & " . $api_params [ " query_param " ]. " = " . $values [ " filters " ];
13
} else {
14
$daas_request .= " ? " . $api_params [ " query_param " ]. " = " . $values [ " filters " ];
15
}
16
}
17
18
if ( $values [ " order " ]) {
19
if ( strpos ( $daas_request , " ? " ) !== false ) {
20
$daas_request .= " & " . $api_params [ " sort_param " ]. " = " . $values [ " order " ];
21
} else {
22
$daas_request .= " ? " . $api_params [ " sort_param " ]. " = " . $values [ " order " ];
23
}
24
}
25
26
if ( $values [ " limit " ]) {
27
if ( strpos ( $daas_request , " ? " ) !== false ) {
28
$daas_request .= " & " . $api_params [ " limit_param " ]. " = " . $values [ " limit " ];
29
} else {
30
$daas_request .= " ? " . $api_params [ " limit_param " ]. " = " . $values [ " limit " ];
31
}
32
}
33
34
return $daas_request ;
35
36
}
Listagem 5.3 – Função _query_builder
$api_params é um vetor que contém o domínio do provedor do serviço de DaaS, o caminho da API e
34
os demais parâmetros que irão compor a requisição DaaS. Esses dados são obtidos a partir a interação com
o armazenamento de informações do DaaS (Dataset Information Storage, em cinza no modelo do MIDAS
da Figura 10). O parâmetro $values é exatamente o vetor resultado da função _query_decomposer e
irá preencher as chaves da requisição com os valores presentes na consulta original. Ou seja, o papel da
função _query_builder é montar a requisição DaaS a partir dos parâmetros da API e os valores do vetor
independente.
Primeiramente a função concatena o domínio do provedor e o caminho para a API dos dados nas linhas
2 e 3. Em seguida (linhas 5-9), é verificado se a API lê o identificador do conjunto de dados com parâmentro
(logo, após a ‘ ?’) ou como parte do endereço, após o caminho da API. Sabendo que a consulta pode conter ou
não filtros, ordenação e limite de resultados, a função verifica a existência dos respectivos valores na consulta
(linhas 11-17, 19-25 e 27-33).
Depois de processada pelo Módulo de Requisição (representado no modelo do MIDAS da Figura 10 como
o Request Module), a consulta original é transformada na requisição DaaS a seguir:
http :// public . opendatasoft . com / api / records /1.0/ search ? dataset = nyc - wifi - hotspot locations & q = city +%3 D + ‘ New + York ’& rows =10& sort = id
A sequência de ações deste estudo de caso é exposta no diagrama de sequência da Figura 12. Uma vez
que a requisição é enviada, os passos seguintes, referentes ao processamento realizado na nuvem do DaaS
e retorno para o Módulo de Resposta, fogem do escopo deste trabalho. Entretanto, a Listagem 5.4 traz a
demonstração de uma linha de resultado para a consulta original em formato JSON, contendo tanto chaves
numéricas (0, 1, 2. . . ) quanto associativas (A, B, C. . . ). Esse é o formato padrão de resposta do driver
MySQL do PHP.
Figura 12 – Diagrama de sequência do estudo de caso
[{"0":" New York " ," city ":" New York " ,"1":" Metropolitan Museum of Art " ," name ":"
Metropolitan Museum of Art " ,"2":"1000 Fifth Avenue " ," address ":"1000 Fifth
Avenue " ,"3":1359 ," id ":1359}]
Listagem 5.4 – Primeira linha do resultado da busca pelos pontos de Wi-Fi
35
5.1.2 Hotéis em Nova York
A aplicação também permite que o usuário pesquise hotéis na cidade de Nova York. Os dados dos hotéis
são obtidos do serviço público de DaaS da própria cidade. Para esta seção, a consulta da Listagem 5.5
representa uma busca pelos hotéis de Nova York. São pesquisados o nome do hotel (company_name), telefone
(phone) e website. O resultado deve se limitar a 10 itens e ser ordenado pelo nome da empresa. O mais
interessante nessa pesquisa é observar que os dados nesse provedor de DaaS advém de um arquivo JSON
(linha 2), entretanto esta peculiaridade em nada interfere com o funcionamento do middleware.
1
SELECT company_name , phone , website
2
FROM v8qe - fx6p . json
3
ORDER BY company_name
4
LIMIT 10
Listagem 5.5 – Busca por hotéis em Nova York
Assim como na seção anterior, a consulta atual também passa pelos procedimentos de quebra de consulta
e construção da requisição DaaS, representados respectivamente pelas funções _query_decomposer (Listagem
5.2) e _query_builder (Listagem 5.3). Como produto, o MIDAS gera a seguinte requisição:
http :// data . cityofnewyork . us / resource / v8qe - fx6p . json ? $order = company_name & $limit =10
Outra novidade desse novo provedor é que ele trata o identificador do conjunto de dados como parte do
caminho da requisição e não como parâmetro da busca, como na última seção. Não obstante, esse cenário
é previsto e tratado pela função _query_builder, conforme já explicado e demonstrado pela Listagem 5.3.
Uma amostra do resultado do MIDAS é ilustrado a seguir pela Listagem 5.6.
[{"0":"(212) 645 -5700" ," phone ":"(212) 645 -5700" ,"1":" www . stayaka . com " ," website ":"
www . stayaka . com " ,"2":" AKA " ," company_name ":" AKA "}
Listagem 5.6 – Primeira linha do resultado da busca pelos hotéis em Nova York
5.2 Desempenho
A análise de eficiência do middleware foi realizada comparando-se os tempos de resposta obtidos buscando-se
os dados a partir da aplicação da agência de turismo e diretamente no provedor de DaaS. A ferramenta
online Hurl.it (RUNSCOPE, INC., 2015) foi empregada para efetuar a medição dos tempos. As Tabelas 1
e 2 apresentam os valores de média, variância e desvio padrão dos tempos observados para cada seção da
aplicação. No total, foram coletadas 40 amostras dos tempos de resposta. 20 partindo da aplicação e 20
enviando a solicitação diretamente para a API do DaaS.
Tabela 1 – Análise dos tempos de resposta para a consulta de hotéis
Partindo da aplicação SaaS
Diretamente na API do DaaS
Média (ms)
270,2
174,8
Variância (ms)
253,76
221,56
Desvio padrão (ms)
15,93
14,88
36
Tabela 2 – Análise dos tempos de resposta para a consulta de pontos de Wi-Fi
Partindo da aplicação SaaS
Diretamente na API do DaaS
Média (ms)
425,1
329,1
Variância (ms)
282,69
333,49
Desvio padrão (ms)
16,81
18,26
A partir desses resultados pode-se notar que a diferença entre as médias dos tempos de resposta para a
consulta de hotéis foi de 95.4ms, o que representa um acréscimo de aproximadamente 55%. Para a consulta
de pontos de Wi-Fi foi notado um acréscimo de 96ms no tempo de resposta, o que representa um aumento de
29%. Esses acréscimos de tempo correspondem ao processamento do middleware, que durou quase o mesmo
tempo em ambos os cenários, todavia representa uma porcentagem de aumento diferente para cada provedor.
Uma vez que é possível o intercâmbio de informação entre provedores de nuvens diferentes, abre-se a
porta para uma nova gama de serviços que podem contemplar muito mais clientes e usuários. No caso de
uma agência de turismo, cada seção da aplicação poderia possuir fontes de dados especializadas no conteúdo
exibido. As seções de pontos de Wi-Fi e hotéis na cidade são algumas das muitas opções. Poderiam haver
seções de restaurantes, parques, shoppings, museus e muito mais. E cada um desses conjuntos de dados estaria
sendo oferecido por provedores cujo trabalho é a manutenção daquela informação, muitas vezes instituições
especialistas ou setores governamentais. Consequentemente, nesse novo cenário, o idealizador da aplicação
não precisará manter todo esse conteúdo, cada qual seria atualizado e mantido pelo seu respectivo provedor.
Cabe ao fornecedor da aplicação selecionar fontes de dados confiáveis para se certificar de que as informações
serão atuais e precisas. Além disso, o banco de dados da aplicação não é descartado. Logo, a aplicação não
é privada de forma alguma de oferecer conteúdo próprio exclusivo.
5.3 Ameaças para a validação
Enquanto não existe uma solução padrão adotada pelos provedores de DaaS que permita a identificação automática da sua configuração, o bom funcionamento do middleware depende de uma administração adequada.
Possíveis mudanças na API do DaaS precisam ser refletidas imediatamente no MIDAS, assim como alterações
no domínio do provedor ou caminho da API.
Outro fator que pode interferir com o funcionamento do middleware é a tentativa de integrar um provedor que utilize alguma API não compatível com os casos previstos atualmente, podendo demandar alguma
eventual adaptação no código do MIDAS.
6 Conclusão
Neste trabalho, é proposto um middleware chamado MIDAS que habilita a interoperabilidade entre os serviços
de nuvem de Software como Serviço (SaaS) e Dados como Serviço (DaaS). Com o MIDAS, aplicações SaaS
podem consultar conjuntos de dados de serviços de DaaS de forma transparente e independentemente de
provedor, como se estivessem consultando o próprio banco de dados. Resultados mostraram que o middleware
é capaz de entregar a resposta esperada pela aplicação sem comprometer a navegação do usuário com longos
tempos de espera.
6.1 Dificuldades encontradas
A grande maioria dos serviços de nuvem disponíveis no mercado é paga e costuma exigir o cadastro de cartão
de crédito internacional mesmo para a utilização do período de testes.
6.2 Trabalhos futuros
Como trabalhos futuros, ficam alguns quesitos importantes para a complementação deste trabalho:
1. Oferecimento de suporte mais robusto para consultas na linguagem MySQL.
2. Demonstração de funcionamento do middleware abrangendo autenticação em domínios protegidos.
3. Elaboração de novo estudo de caso demonstrando o funcionamento do middleware para o caso de
aplicações com banco de dados não relacional.
Referências
AHRONOVITZ, M. et al. Cloud computing use cases white paper. [S.l.]: Version, 2010.
AMAZON WEB SERVICES, INC. Amazon Web Services (AWS) - Cloud Computing Services. 2015.
Disponível em: <http://aws.amazon.com>. Acesso em: 27 de Outubro de 2015.
ASUNCION, C. H.; SINDEREN, M. J. V. Pragmatic interoperability: A systematic review of published
definitions. In: Enterprise Architecture, Integration and Interoperability. [S.l.]: Springer, 2010. p. 164–175.
AULBACH, S. et al. Multi-tenant databases for software as a service: schema-mapping techniques. In:
ACM. Proceedings of the 2008 ACM SIGMOD international conference on Management of data. [S.l.], 2008.
p. 1195–1206.
BEZEMER, C.-P. et al. Enabling multi-tenancy: An industrial experience report. In: IEEE. Software
Maintenance (ICSM), 2010 IEEE International Conference on. [S.l.], 2010. p. 1–8.
BOOTSTRAP. Bootstrap. The world’s most popular mobile-first and responsive front-end framework. 2015.
Disponível em: <http://getbootstrap.com>. Acesso em: 27 de Outubro de 2015.
BOYTSOV, E.; SOKOLOV, V. Multi-tenant database clusters for saas. Proceedings of BMSD, p. 144, 2012.
BRUNEO, D.; PULIAFITO, A.; SCARPA, M. Mobile Middleware: definition and motivations. The
Handbook of Mobile Middleware, Auerbach Pub, p. 145–167, 2007.
BUYYA, R.; YEO, C. S.; VENUGOPAL, S. Market-oriented cloud computing: Vision, hype, and reality for
delivering it services as computing utilities. In: IEEE. High Performance Computing and Communications,
2008. HPCC’08. 10th IEEE International Conference on. [S.l.], 2008. p. 5–13.
CIDREIRA, V. Midas: Um middleware para prover interoperabilidade entre DaaS e SaaS. Monografia
(Graduação) - Universidade Federal da Bahia. 2015.
DUAN, Y. Value modeling and calculation for everything as a service (XaaS) based on reuse. In: IEEE.
Software Engineering, Artificial Intelligence, Networking and Parallel & Distributed Computing (SNPD),
2012 13th ACIS International Conference on. [S.l.], 2012. p. 162–167.
ELLISLAB. CodeIgniter Web Framework. 2015. Disponível em: <https://codeigniter.com>. Acesso em: 27
de Outubro de 2015.
FOX, A. et al. Above the clouds: A berkeley view of cloud computing. Dept. Electrical Eng. and Comput.
Sciences, University of California, Berkeley, Rep. UCB/EECS, v. 28, p. 13, 2009.
GORTI, I.; SHIRI, N.; RADHAKRISHNAN, T. A flexible data model for multi-tenant databases for software
as a service. In: IEEE. Computational Science and Engineering (CSE), 2013 IEEE 16th International
Conference on. [S.l.], 2013. p. 1059–1066.
HOU, D.; ZHANG, S.; KONG, L. Placement of saas cloud data and dynamically access scheduling strategy.
In: IEEE. Computer Science & Education (ICCSE), 2013 8th International Conference on. [S.l.], 2013. p.
834–838.
HUI, M. et al. Supporting database applications as a service. In: IEEE. Data Engineering, 2009. ICDE’09.
IEEE 25th International Conference on. [S.l.], 2009. p. 832–843.
JACOBS, D.; AULBACH, S. et al. Ruminations on multi-tenant databases. In: BTW. [S.l.: s.n.], 2007.
v. 103, p. 514–521.
JIANG, L. et al. A mixed multi-tenancy data model and its migration approach for the saas application. In:
IEEE. Services Computing Conference (APSCC), 2012 IEEE Asia-Pacific. [S.l.], 2012. p. 295–300.
40
LIU, H.; WU, S. Data storage schema upgrade via metadata evolution in saas. In: IEEE. Consumer
Electronics, Communications and Networks (CECNet), 2012 2nd International Conference on. [S.l.], 2012.
p. 3148–3151.
LOUTAS, N. et al. Cloud computing interoperability: the state of play. In: IEEE. Cloud Computing
Technology and Science (CloudCom), 2011 IEEE Third International Conference on. [S.l.], 2011. p. 752–757.
MELL, P.; GRANCE, T. The nist definition of cloud computing. Computer Security Division, Information
Technology Laboratory, National Institute of Standards and Technology Gaithersburg, 2011.
NI, J. et al. Adapt: adaptive database schema design for multi-tenant applications. In: ACM. Proceedings
of the 21st ACM international conference on Information and knowledge management. [S.l.], 2012. p.
2199–2203.
OPENDATASOFT. OpenDataSoft. 2015. Disponível em: <http://public.opendatasoft.com/explore/>.
Acesso em: 11 de Setembro de 2015.
ORACLE. Fusion Middleware Concepts Guide. 2015. Disponível em: <http://docs.oracle.com/cd/E21764_
01/core.1111/e10103/intro.htm#ASCON109>. Acesso em: 24 de Novembro de 2015.
POKRAEV, S. V. Model-driven semantic integration of service-oriented applications. Novay, 2009.
RANABAHU, A. H.; MAXIMILIEN, E. M. A best practice model for cloud middleware systems. 2009.
RED HAT, INC. OpenShift by Red Hat. 2015. Disponível em: <https://www.openshift.com>. Acesso em:
11 de Setembro de 2015.
RUNSCOPE, INC. Hurl.it - Make HTTP Requests. 2015. Disponível em: <https://www.hurl.it>. Acesso
em: 11 de Setembro de 2015.
SHENGQI, W.; SHIDONG, Z.; LANJU, K. A dynamic data storage architecture for saas. In: IEEE.
Multimedia Information Networking and Security (MINES), 2010 International Conference on. [S.l.], 2010.
p. 292–296.
THE CITY OF NEW YORK. NYC Open Data. 2015. Disponível em: <https://nycopendata.socrata.com>.
Acesso em: 11 de Setembro de 2015.
THE JQUERY FOUNDATION. jQuery. 2015. Disponível em: <http://jquery.com>. Acesso em: 27 de
Outubro de 2015.
WEILIANG, C.; SHIDONG, Z.; LANJU, K. A multiple sparse tables approach for multi-tenant data storage
in saas. In: IEEE. Industrial and Information Systems (IIS), 2010 2nd International Conference on. [S.l.],
2010. v. 1, p. 413–416.
XU, X. From cloud computing to cloud manufacturing. Robotics and computer-integrated manufacturing,
Elsevier, v. 28, n. 1, p. 75–86, 2012.
XUXU, Z.; QINGZHONG, L.; LANJU, K. A data storage architecture supporting multi-level customization
for saas. In: IEEE. Web Information Systems and Applications Conference (WISA), 2010 7th. [S.l.], 2010.
p. 106–109.
ZHOU, M. et al. Services in the cloud computing era: A survey. In: IEEE. Universal Communication
Symposium (IUCS), 2010 4th International. [S.l.], 2010. p. 40–46.
ZHOU, X. et al. Suitable database development framework for business component migration in saas
multi-tenant model. In: IEEE. Service Sciences (ICSS), 2013 International Conference on. [S.l.], 2013. p.
90–95.
Download