1. A complexidade da replicação de um serviço multi-camada não varia de acordo com o componente alvo (p.ex., servidor web, servidor aplicacional, base de dados) a replicar. Indique e justifique se concorda ou não com esta afirmação.
Esta afirmação é falsa. Num serviço de multi-camada, existem três principais camadas: servidor web, servidor aplicacional e base de dados, cada uma com as suas características. Uma destas características é o facto das últimas duas camadas, servidor aplicacional e base de dados, serem camadas stateful, isto é, possuírem estado.
De facto, replicar camadas stateful prova-se um desafio bem maior. Isto pois, esta replicação necessita de mecanismos extra que garantam, entre outros fatores: coesão de informação, consistência de informação e grande tolerância a faltas. Mecanismos estes que, muitas vezes, são alcançados por via de protocolos de coordenação e consensus avançados.
2. As infraestruturas de computação em nuvem promovem uma utilização eficiente de recursos computacionais, de rede e armazenamento através da utilização de virtualização. Descreva, e justifique, duas vantagens e duas desvantagens da utilização desta tecnologia.
Vantagens Recursos virtualizados, apesar de apontarem para os mesmos recursos físicos, podem ser partilhados entre diferentes serviços. Diminuindo, assim, o custo final de deployment.
Ainda, recursos virtualizados, permitem uma gestão que preza pela simplicidade. Sendo bem mais simples gerir, alocar e dealocar recursos virtuais do que recursos físicos.
Desvantagens Uma vez que os recursos físicos são partilhados, por via de virtualização, entre diferentes serviços, existe uma necessidade acrescida de investir em segurança e isolamento. Isto pois, não deverá ser possível um serviço (ou até mesmo máquina virtual) aceder, por exemplo, ao espaço de memória ou armazenamento alocado por outro serviço.
A utilização de recursos virtualizados acaba por ter sempre algum impacto na performance final do programa. Isto pois, existirá uma camada intermédia (o Hypervisor) cujo objetivo passa por mediar e traduzir as instruções vindas do Guest para o Host. No entanto, existem soluções alternativas e que pretendem colmatar, de certa forma, este problema - como a paravirtualização. Ainda assim, esta alternativa surge com o inconveniente de ser necessário utilizar um Guest OS muito específico com as modificações indicadas para o bom e correto funcionamento.
3. Nas aulas práticas recorreu às ferramentas ElasticSearch, Kibana e MetricBeat para observar a utilização de recursos de diferentes máquinas virtuais. Indique qual a função de cada uma destas ferramentas num ambiente de monitorização.
ElasticSearch Ferramenta responsável pela eficiente indexação, para futura pesquisa, da informação recolhida.
Kibana Ferramenta responsável pela criação de dashboards (com gráficos casuais, time-series, etc) para permitir uma melhor visualização e análise da informação recolhida.
MetricBeat Ferramenta responsável pela coleta de métricas, enviando-as para o ElasticSearch.
4. Imagine que a Universidade do Minho lhe atribui a responsabilidade de instalar a aplicação WikiJS para servir todos os alunos da universidade. No entanto, antes do processo de instalação, o gestor financeiro da universidade pergunta-lhe quais os recursos computacionais que prevê serem necessários para esta instalação. Que estratégia(s) pode aplicar para responder a esta pergunta e ter um elevado grau de confiança que a aplicação será capaz de responder à carga computacional imposta em produção?
Uma vez que o software já se encontra criado, o WikiJS, não vale a pena falar de possíveis padrões arquiteturais a aplicar aqui.
Assim, é necessário adotar e utilizar ferramentas e metodologias capazes de nos fornecer informação sobre os pontos de maior gargalo e falha no sistema. Poder-se-iam, portanto, utilizar ferramentas de benchmarking para avaliar algumas métricas ao longo do tempo e consoante a carga existente fosse aumentando. Depois de encontrado um hardware capaz de suportar uma utilização comum por parte de todos os alunos da universidade, dever-se-ia investir em utilizar algum sistema de deployment com a capacidade de esticar e diminuir alguns componentes do sistema, se oportuno. Com recurso a duas ferramentas como o Kubernetes e o Prometheus, é possível escalar uma certa parte do sistema apenas quando a utilização de CPU se encontra, por exemplo, acima dos 50%. Estas questões devem, também, fazer parte de todo o processo de benchmarking.