1. Durante o semestre foram utilizados diferentes componentes de software, tais como o Swap, Ghost, MySQL, e Redis, que podiam ser configurados e instalados seguindo uma arquitetura distribuída. Indique uma vantagem e um desafio a ter em conta quando se pretende seguir uma instalação distribuída para um dado componente de software. Justifique a sua resposta.

Vantagem Uma das maiores vantagens da utilização de arquiteturas distribuídas é o facto de se poder escalar individualmente a atomicamente cada um dos componentes do sistema. Isto é, se um dado componente (o servidor aplicacional, por exemplo) estiver a provar ser um gargalo para o sistema, podemos escalar esse componente individualmente sem que os outros sofram alterações nesse sentido.

Desafio Um desafio está no facto de ser bem mais complexo e sofisticado realizar um deployment para um sistema como estes. Enquanto que numa aplicação monolítica, facilmente configuramos uma máquina e colocamos tudo a rodar, neste caso precisamos de configurar diversas máquinas, garantir uma eficiente e segura conexão entre as mesmas, alocar e configurar recursos de hardware para cada uma, entre outros.

2. Embora ambas sejam consideradas tecnologias de virtualização, máquinas virtuais e containers adequam-se a diferentes tipos de aplicações e serviços. Indique um tipo de aplicação ou serviço onde é mais apropriada a utilização de containers. Justifique a sua resposta.

A utilização de containers é mais apropriada em aplicações baseadas em microsserviços. Isto pois, a utilização de containers permite a consequente utilização de uma ferramenta como o Kubernetes, onde é possível gerir (e orquestrar) a escalabilidade e balanceamento de carga de todos os serviços mais facilmente. Além disso, é possível que vários dos microsserviços estejam codificados nas mesmas tecnologias, mas em versões diferentes. A utilização de máquinas virtuais para o efeito dificulta nesse sentido. No entanto, a utilização de containers permite que cada microsserviço possua as suas tecnologias (e respetivas versões) bem definidas e isoladas do restante sistema.

3. Imagine que tem de escolher as melhores configurações para um sistema de armazenamento que tem como principais propósitos garantir alta disponibilidade e, simultaneamente, reduzir o espaço ocupado pelos dados persistidos. Das funcionalidades tipicamente suportadas por sistemas de armazenamento que estudou, quais é que sugeria? Justifique a sua resposta.

Garantir alta disponibilidade num sistema de armazenamento é simples e bastaria, para isso, replicar a informação existente. No entanto, esta abordagem viola o segundo propósito, de reduzirmos o espaço ocupado pelos dados persistidos.

Desta forma, a utilização de erasure codes seria o indicado neste cenário. O modo de funcionamento deste sistema baseia-se em particionar a informação em vários blocos e criar alguns blocos de paridade. Por um lado estamos a reduzir o espaço ocupado, visto que o único overhead existente é o da informação constante dos blocos de paridade e por outro estamos a garantir uma maior disponibilidade da informação, pois se um dos blocos principais falhar, é possível recorrer, na maioria dos casos (e dependendo do tipo de algoritmo e tipos de códigos utilizados), aos blocos de paridade para recuperar a informação perdida.

4. Os engenheiros informáticos responsáveis por gerir aplicações em ambientes Kubernetes recorrem muitas vezes a ferramentas de monitorização. 4.1 Indique uma das razões pela qual as Kubernetes são frequentemente combinadas com ferramentas de monitorização. Justifique a sua resposta. 4.2 Indique uma vantagem de, ao ambiente com Kubernetes e monitorização, acrescentar também uma ferramenta de avaliação experimental (benchmark). Justifique a sua resposta.

Combinar ferramentas de monitorização com Kubernetes permite-nos passar de um nível em que temos um número de réplicas de um dado Pod como estático para dinâmico. Isto é, um sistema de monitorização como o ElasticStack pode ser integrado com o Kubernetes na medida em que se, por exemplo, a utilização de CPU de um dado Pod ultrapassar os 50%, pode ser criada uma réplica do mesmo. No sentido contrário também, caso a utilização volte a descer, onde a réplica é eliminada. Assim, não só temos um sistema que possui, em média, um custo final inferior, mas também que se ajusta às necessidades da aplicação em tempo real.

Depois, combinar uma ferramenta de avaliação experimental (benchmark) a um ambiente como este, permite estimar, à cabeça, qual o número de Pods necessários para suportar uma utilização comum do sistema. Partindo de um número razoável e escalando, caso o sistema de monitorização assim o diga.