Como foi demonstrado na seção anterior, a arquitetura em concepção deverá utilizar o paradigma de orientação a serviços. Portanto, deve-se listar todos os serviços que farão parte da arquitetura e como eles irão se relacionar entre si. Também foi decidido utilizar uma abordagem com o padrão de projeto de camada de serviços para que o sistema tenha uma organização de negócio mais clara, além de ser uma forma de encapsular a lógica de toda uma camada de serviços, contribuindo ainda mais para o baixo acoplamento do sistema.
4.2.1
Camadas de Serviços
A Figura 3 mostra a divisão lógica dos serviços do sistema. A camada fundamental do sistema é a camada de serviços básicos. Essa camada é responsável pelo armazena- mento, recuperação e resiliência de dados e metadados do sistema. Ela terá a função de camada de persistência para as demais camadas, sendo uma plataforma para as outras camadas armazenarem dados e metadados. Os dados armazenados na camada de serviços básico são tuplas chave-valor. Os valores são salvos de forma bruta, como um stream de
bytes, sem haver qualquer análise ou semântica associada. Acima da camada de serviços
Figura 3 – Divisão em camada de serviços
básicos, encontra-se a camada de serviços importantes, ou de armazenamento de arquivos. Por meio dessa camada é possível se manter um sistema de arquivos de nuvem, com todas as operações básicas sobre arquivos virtuais, tais como enviar arquivos, recuperar arquivos, compartilhar arquivos, renomear arquivos, etc. A camada de serviços importantes utiliza os serviços básicos como plataforma para salvar os arquivos, dividindo-os em chunks, assim como em um sistema de arquivos distribuídos (BžOCH, 2012).
Por fim, existe a camada de serviços desejáveis, que utiliza as camadas de serviços básicos e importantes para executar operações adicionais para um sistema de cloud, que podem agregar funcionalidades, oferecendo alguns diferenciais para os usuários. Exemplos de serviços desejáveis são: indexação de conteúdo, deduplicação, recomendação de conteúdo, ferramentas administrativas, entre outros.
A camada de serviços desejáveis está fora do escopo, e não será aborda em detalhes neste trabalho.
Finalmente, para que o cliente e as camadas se comuniquem utilizamos um barramento de serviço (Enterprise Service Bus - Enterprise Service Bus (ESB)), que visa remover o acoplamento entre os serviços e os meio de transporte, tornando a aplicação mais flexível
para uma eventual troca de tecnologia de comunicação.
Com a definição das camadas de serviços, é possível estabelecer a composição das mesmas em um nível maior de granularidade, que são os serviços em si.
4.2.2
Descrição dos serviços
Anteriormente, foram apresentadas as camadas de serviços que compõem a arqui- tetura. Agora, serão apresentados os serviços que compõem cada camada.
A Figura 4 mostra todos os serviços que compõem as camadas na arquitetura do sistema.
Figura 4 – Listagem dos Serviços
Na camada de serviços básicos podemos observar quatro serviços, listados:
• Armazenamento de dados: Neste serviço são armazenado o conteúdo dos arquivos. Os conteúdos nele inseridos são armazenados através de uma tupla chave-valor, cuja chave é um hash calculado por qualquer algoritmo conhecido, como por exemplo, o
md5 ou o sha-1. Os dados neles inseridos são considerados imutáveis, uma vez que
ao se alterar o conteúdo do arquivo, seu hash será modificado.
• Armazenamento de metadados: Neste serviço são armazenados metadados sobre o arquivo e o sistema em si. Ele implementa um banco de dados chave-valor. Tipica- mente será armazenado como chave um identificador único para aquele objeto (como por exemplo, o login para o caso de armazenamento de um usuário), juntamente com o objeto como valor. Cada objeto, terá suporte a versionamento, portanto será possível se obter um histórico de todas as alterações de cada objeto, e também é possível evitar inconsistências devido a escritas repetidas.
• Procura de recursos: Neste serviço é feito o lookup de objetos ou chunks ar- mazenados no sistema, utilizando a DHT, ou qualquer outra implementação de
armazenamento de objetos que possa se utilizar posteriormente. Os serviços de armazenamento de dados e de metadados necessitam da procura de recursos para localizar objetos.
• Resiliência de dados: Esse serviço tem o objetivo de garantir que não haja inconsistência ou indisponibilidade de chunks ou objetos armazenados na camada de serviços básicos. Ela é responsável pela tolerância a falhas de todo o sistema.
Já a camada de serviços importantes, é composta pelos serviços que juntos compõem um sistema de arquivos distribuídos. São eles:
• Gerenciamento de usuários: Responsável pelo cadastro e controle de usuários. Operações como incluir usuários, alterar suas informações e exclusão de usuários dependem desse módulo.
• Chunk: Responsável pelo armazenamento do conteúdo dos arquivos quebrados em pedaços (chunks) bem como os metadados desses chunks, tais como posição, tamanho e hash.
• Autenticação: Responsável pela verificação de identidades dos usuários ao acessar o sistema. Por meio dele, o usuário pode se identificar através, por exemplo, de um nome de usuário e senha.
• Controle de acesso: Responsável pela autorização e auditoria do sistema. Objetiva impedir que não ocorra acesso não autorizado a arquivos, assim como registrar todas as operações de seguranças críticas no sistema.
• Arquivos: Responsável pelo cadastro de arquivos através de metadados tais como nome, tamanho, data de modificação, assim como pelo compartilhamento de arquivos entre usuários.
A representação da camada de serviços desejáveis não está completa, os serviços representados são apenas algumas das possibilidades de novos serviços que se pode implementar na plataforma de cloud storage. Cada serviço representado pode vir a ser um sistema completo que pode ser integrado com o ecossistema da nuvem de armazenamento. Eis alguns exemplos de serviços desejáveis:
• Busca e indexação: Em um sistema de cloud storage, ao se enviar arquivos para a nuvem, é possível executar a extração de índices sobre os arquivos e armazená- los para futuramente recuperá-los pesquisando, por exemplo, por palavras chave (MACHADO, 2013).
• Recomendação: Baseado nos índices de arquivos, e nas preferências dos usuários, este serviço pode recomendar opções de arquivos para o usuário (RODRIGUES, 2014).
• Deduplicação: Através desse serviço, é possível evitar o armazenamento de arquivos ou pedaços de arquivos repetidos, economizando assim o armazenamento e tráfego de dados (SOARES, 2013).
• Tarifação: Esse serviço é utilizado pelo cloud provider ou cloud broker para tarifar os cloud consumer em base na utilização do serviço (SILVA, 2013).
• Instrumentação: Esse serviço pode ser utilizado juntamente com a tarifação para se mensurar a quantidade de armazenamento, tráfego e utilização de recursos em geral pelo cloud consumer.
Como especificado anteriormente, essa lista não é exaustiva, nem tem esse objetivo. As possibilidades de se implementar novos serviços são ilimitadas.