Propostas Submetidas

DEI - FCTUC
Gerado a 2024-03-28 15:28:24 (Europe/Lisbon).
Voltar

Titulo Estágio

Observabilidade e resiliência de sistemas distribuídos

Áreas de especialidade

Engenharia de Software

Sistemas de Informação

Local do Estágio

O escritório da WIT em Taveiro ou outro a definir com o aluno. Neste momento estamos remote.

Enquadramento

Nos últimos anos, temos assistido a uma tendência das organizações moveram os seus produtos para ambientes Cloud apostando cada vez mais em arquiteturas de micro-serviços.

Os sistemas distribuídos e arquitecturas de micro-serviços trazem grandes vantagens para o desenvolvimento de sistemas de grande escala e altamente disponíveis.

No entanto os sistemas distribuídos aumentam também a complexidade de lidar com falhas inesperadas e de garantir a resiliência do sistema devido ao número elevado de componentes, sendo particularmente complexo garantir um sistema tolerante a falhas. Também a monitorização é cada vez mais complexa e requere a adoção de novas abordagens.

Este estágio tem como objetivo garantir a observabilidade e melhorar a resiliência de um sistema distribuído cloud-native em micro-serviços adotando uma abordagem inovadora de uma nova disciplina conhecida como Chaos Engineering.

A observabilidade é a capacidade de perceber o comportamento de um sistema de produção e inclui tipicamente as componentes de monitorização, alertas, tracing (de sistemas distribuídos) e agregação de logs. Monitorização e alertas são uma forma preventiva de detetar falhas no sistema, tracing e agregação de logs fornecem a informação necessária para identificar a causa após a falha. Para testar e melhorar a resiliência de um sistema é indispensável garantir uma observabilidade eficiente sobre o estado do sistema.

Resiliência é a capacidade de um sistema recuperar de falhas e continuar a funcionar, não se limitando apenas a evitar falhas, mas responder de forma a evitar quebras de serviço e/ou perda de dados.

Chaos Engineering é uma disciplina inovadora que tem como objetivo verificar o correto funcionamento de um sistema e confirmar a eficiência dos respetivos mecanismos de tolerância a falhas, obtendo novas informações através de realização de experiências que simulam falhas, como o desligar de um serviço ou simulação de latência nas ligações de rede entre aplicações.

Esta abordagem vai permitir identificar e estabelecer uma estratégia para resolver proactivamente os problemas e limitações existentes no sistema, tornando o sistema mais resiliente e tolerante a falhas.

Sobre a Empresa:
A WIT tem 20 anos de experiência na área das telecomunicações e é uma empresa francamente exportadora. Prova disso é o facto do software que desenvolve já ter sido exportado para 46 países. Todos estes projectos foram desenvolvidos com uma metodologia muito forte de software, sempre com requisitos de alta-disponibilidade, segurança, performance, escalabilidade e especial cuidado com a user-experience. A empresa conta com os seguintes clientes: Grupo Vodafone, Deutsche Telekom, NTT DoCoMo, KDDI, Softbank, AT&T, Verizon, Safaricom, Vodacom, Unitel, entre outros. Na WIT somos Groundbreakers e procuramos, todos os dias, desafiar o status quo fazendo mais e diferente, sempre com o objectivo de sermos cada vez melhores. Descobre aqui se também tu podes ser um groundbreaker: [url=https://www.youtube.com/watch?v=Mt9sCqvJx9U]https://www.youtube.com/watch?v=Mt9sCqvJx9U[/url]

Objetivo

O objetivo do estágio consiste no desenvolvimento de um protótipo de monitorização avançada para garantir a observabilidade de uma solução existente e posterior desenho e implementação de testes, que vão introduzir falhas no sistema recorrendo a um conjunto de técnicas identificadas numa nova disciplina conhecida como Chaos Engineering.

Estes testes vão identificar os problemas e limitações existentes no sistema fazendo também parte dos objetivos do estágio a alteração e configuração do sistema para ultrapassar essas limitações.

Devem ainda ser incluídas todas as alterações, e/ou introdução de novos componentes necessários no sistema para garantir uma monitorização eficiente.

Este trabalho deverá ser possível de atingir através da implementação dos seguintes componentes no sistema existente:
• Implementação de mecanismo de tracing;
• Implementação de um sistema de centralização de logs;
• Implementação de ferramentas para monitorização (infraestrutura e aplicação);
• Implementação das métricas e dashboards necessários para garantir a observabilidade do sistema;
• Configuração mecanismos de alertas para notificação e recuperação automática em caso de falha (incluindo autoscaling);
• Desenvolvimento e implementação de scripts para simular falhas;
• Execução de testes para provocar falhas no sistema;
• Melhorar o sistema para o tornar mais resiliente a falhas.

Espera-se que o aluno tenha a autonomia e capacidade crítica necessárias para recolher, analisar e estruturar toda a informação acerca de soluções existentes no mercado. Esta informação deverá ser depois aplicada no desenvolvimento do protótipo.

Segue-se a análise de requisitos do projeto, a criação de um plano de desenvolvimento e a definição de um “backlog” com as tarefas necessárias. O desenvolvimento do estágio deverá ser feito de forma iterativa usando um processo ágil.

No final do estágio, deverá existir um protótipo funcional, que seja facilmente demonstrável e que mostre bem os conceitos explorados durante o estágio.

Plano de Trabalhos - Semestre 1

Para o 1º semestre estão planeadas as seguintes tarefas:
• Aquisição de conhecimentos nas tecnologias envolvidas: sistemas cloud-native distribuídos e micro-serviços;
• Familiarização com o sistema sob o qual o estágio será desenvolvido;
• Analise dos requisitos de monitorização;
• Identificação e comparação das ferramentas e tecnologias existentes para garantir a observabilidade do sistema;
• Analise dos requisitos de tolerância a falhas do sistema;
• Estudo das diferentes abordagens e metodologias para implementar uma abordagem de Chaos engineering e garantir um sistema tolerante a falhas;
• Identificação e comparação das ferramentas disponíveis para implementar uma abordagem de Chaos engineering;
• Definição dos testes que vão ser executados para provocar falhas no sistema (introduzir Chaos);
• Identificação das alterações necessárias ao sistema para adaptação às ferramentas selecionadas;
• Definir qual o estado normal do sistema através de analise de critérios de aceitação;
• Documentação intermédia do estágio.

Plano de Trabalhos - Semestre 2

Para o 2º semestre estão planeadas as seguintes tarefas:
• Adaptação do sistema para tirar partido das ferramentas de monitorização;
• Implementação e configuração do sistema para centralização de logs;
• Instalação e configuração das ferramentas de tracing dos vários componentes do sistema;
• Implementação de ferramentas para monitorização da infraestrutura e aplicação;
• Implementação das métricas e dashboards necessários para garantir a observabilidade do sistema;
• Configuração de mecanismos de alertas para notificação e recuperação automática em caso de falha (incluindo autoscaling);
• Desenvolvimento e Implementação das ferramentas e scripts necessários para injetar falhas (Chaos);
• Execução dos testes/experiências para gerar Chaos;
• Identificar soluções e melhorias para garantir a resiliência do sistema;
• Implementar melhorias;
• Documentação final de estágio.

Condições

O local de trabalho será no escritório da WIT Software em Taveiro ou noutro local definido entre o aluno e a empresa uma vez que a WIT tem centros de desenvolvimento no Porto, Aveiro, Coimbra, Leiria e Lisboa. Neste momento encontramo-nos a trabalhar remotamente.

O aluno terá ao seu dispor os equipamentos necessários para desempenhar as suas tarefas.

O estágio é remunerado. Se o desempenho do aluno ao longo do mês for positivo, terá direito a receber uma bolsa mensal.

Além da bolsa, o aluno terá acesso às formações da WIT Academy (que inclui tópicos como: iOS Programming, Android Programming, Arquitecturas de Software, Software Quality, Software Security, Metodologias de Desenvolvimento de Software).

O aluno será acompanhado não só pelo orientador como por um tutor técnico que lhe dará todo o apoio necessário.

No final do estágio, o aluno terá conhecimento detalhado sobre técnicas e abordagens para garantir a observabilidade de sistemas distribuídos com microserviços, bem como implementação das mais recentes e inovadoras abordagens para testar e garantir um sistema tolerante a falhas.

No final do estágio, será feita uma avaliação do estagiário e dos conhecimentos adquiridos. Se o resultado for positivo o estagiário será convidado para fazer parte da equipa de desenvolvimento.


Observações

- Toda a documentação de projecto será em Inglês.
- Será usado SCRUM, como metodologia de desenvolvimento.
- Existe um Tutor e um Orientador. O Orientador define os requisitos do estágio, define as prioridades do Backlog e acompanha os resultados parciais do projecto. O Tutor garante o cumprimento das tarefas, promove as meetings e acompanha o aluno com mais regularidade.

Orientador

Rui Cunha
rui.cunha@wit-software.com 📩