1. A computação em nuvem oferece uma utilização eficiente de recursos de hardware (p.ex., CPU, RAM, disco) através da partilha destes recursos entre multiplas aplicações (multi-tenancy). Indique uma implicação positiva e uma implicação negativa provenientes desta partilha de recursos. Justifique a sua resposta.

Implicação positiva O facto de estarmos a partilhar os mesmos recursos físicos entre múltiplas aplicações, faz com que não seja necessário alocar novos recursos para novas aplicações. Diminuindo, assim, o custo final do deployment.

Implicação negativa A partilha dos mesmos recursos físicos entre múltiplas aplicações pode, em alguns casos, deixar-se afetar pela carga imposta por uma aplicação. Isto é, caso uma das aplicações esteja a usar, em demasia os recursos, outras aplicações poderão senti-la, tornando-se menos capazes e performantes.

2. O componente Docker Daemon é responsável por gerir imagens, containers e redes num ambiente virtualizado. Indique qual a diferença entre uma imagem e um container na plataforma Docker.

Uma imagem é um objeto Docker imutável e único, que contém todo o software necessário para executar um dado serviço. Este objeto é derivado a partir de uma configuração efetuada a partir de um Dockerfile e pode constar de registries, que podem ser locais ou remotos. Uma imagem, pode ainda, tomar partido de outras imagens, criando layers de imagens (utilizando a diretiva FROM num Dockerfile).

Um container é, também, um objeto Docker, mas que surge a partir de uma imagem. Podemos ter várias instâncias de um container, com base numa mesma imagem, a correr na nossa máquina. No entanto, só podemos ter uma imagem com um certo nome e tag (tag é a versão de uma determinada imagem).

Em suma, podemos ver a diferença entre imagens e containers como classes e instâncias (objetos) num paradigma orientado aos objetos. Uma imagem é uma classe e um container é uma instância dessa classe, onde cada container pode ter as suas próprias variáveis runtime de configuração.

3. Em vários sistemas de armazenamento distribuídos, a gestão de dados (i.e., conteúdo) e metadados (p.ex., localização, tamanho, permissões) de ficheiros é feita por componentes diferentes. Ainda, na maioria dos casos, estes componentes são instalados em conjuntos de servidores distintos. Explique a vantagem de considerar componentes independentes para a gestão de dados e metadados. Justifique a sua resposta.

Se analisarmos um sistema tradicional, onde a gestão de dados e dos metadados se encontra num mesmo componente, rapidamente nos deparamos com os problemas: este componente é um ponto único de contenção e de falha.

Assim, um sistema onde estes componentes estão separados possui a vantagem de colmatar, de certa forma, este problema. Essencialmente, existe um componente dedicado à gestão dos metadados que é consultado por todos os clientes quando pretendem aplicar alguma operação sobre os dados existentes; este componente possui o papel de direcionar, rapidamente, estes clientes para um nó (segundo uma política bem definida de escalonamento) da rede dos gestores de dados. Este nó é, depois, contactado diretamente pelo cliente e as operações são realizadas num estilo de cliente-servidor. Ou seja, a computação mais pesada (a operação sobre os dados) é feita individualmente em cada um dos nós de dados.

4. Dê dois exemplos de métricas, para além do débito e latência no processamento de pedidos, que possam ser úteis ao avaliar experimentalmente um dado sistema. Justifique a relevância das métricas escolhidas.

Uma das métricas a utilizar poderia ser a percentagem de utilização dos recursos de hardware. Esta métrica permitiria avaliar qual a capacidade do hardware em causa para a execução do sistema. Sendo possível avaliar quais componentes necessitariam de ser atualizados, por se provarem um ponto de gargalo.

Outra métrica a utilizar poderia ser a quantidade de erros e falhas provenientes do sistema aquando dos testes. Esta métrica permitira avaliar a robustez e resiliência do sistema.