Solution Seekers

Trabalhando escalabilidade na configuração de um “Online Judge” na nuvem

Equipe:

  • Kevyn Marques
  • Maristella Ramalho Rangel
  • Yara dos Santos Rodrigues
  • Matheus de Almeida Mazieiro

Resumo: A idéia surge da necessidade de compreender e aprender sobre a manipulação de plataformas que permitem a prática e a avaliação de programação e algoritmos, como por exemplo o Codeforces e o LeetCode. Basicamente vamos tentar utilizar uma VM como “controller” e fazer uso de
load balance para adquirir e liberar recursos conforme demanda, evitando a queda da plataforma mediante picos de envios simultâneos e garantir a consistência das submissões.

Anteriormente ‘Time do Hackathon’, atuais ‘Solution Seekers’

4 curtidas

Link do Repositório Utilizado

1 curtida

Aplicação

Todo o projeto surgiu no contexto do desenvolvimento de uma solução para um problema real, utilizando ferramentas disponibilizadas pela Magalu Cloud (MGC), primeira plataforma de nuvem brasileira com escala global, utilizando máquinas virtuais (VMs) e conceitos como balanceamento de carga.
O problema que inspirou esta solução foi uma maratona de programação que ocorreu na UFSCar, durante a qual o servidor que hospedava os desafios da maratona travou (caiu). Este incidente levou os autores a considerarem a possibilidade de criar um servidor próprio para o departamento com configurações projetadas para evitar a recorrência dos problemas enfrentados.

Portabilidade

O projeto não tem como foco a portabilidade, porém a ideia é criar uma documentação completa e simples que, consequentemente, permitirá que qualquer pessoa utilize os códigos disponíveis no repositório como modelo e ajustes poderão ser feitos para acomodar novos casos de uso.

Arquitetura

A arquitetura de um servidor para um “Online Judge” de código aberto consiste em diversas camadas e componentes. O back-end processa as solicitações recebidas, gerenciando a lógica de avaliação da solução e interagindo com um banco de dados que armazena informações sobre usuários, problemas e resultados. Essa configuração apresenta um desafio significativo: manter a consistência durante os períodos de pico de envio e, ao mesmo tempo, garantir que a infraestrutura possa suportar um grande número de usuários.

Objetivos:

  • Containerizar a aplicação usando Docker, particularmente o banco de daods, para garantir consistências e ambiente de execução isolado.
  • Usar o Terraform para prover infraestrutura em nuvem, definindo recursos como instâncias de servidor e configurações de segurança.

Esse esquema (imagem abaixo) modular e escalar garante que o servidor possa acomodar um grupo crescente de usuários e desafios de manutenção, eficiência, segurança e consistência.

2 curtidas

Processo de Esquematização + Desenvolvimento com Terraform

3 curtidas

Esquema - Primeiro Estágio

3 curtidas

Esquema - Finalizado

2 curtidas

Sugestão de Utilidade / Correção de Visualização

Durante o hackathon os recursos mais utilizados foram as VM’s (50+), seguidas dos Object Storages (32) - números do momento em que escrevo. Muitos utilizaram o console (console.magalu.cloud) para encontrar seus , entretanto, as especificações de cada instância só podem ser visualizadas após acessá-las utilizando o menu de instâncias (console.magalu.cloud/virtual-machine) da organização logada, que só exibe 50 registros, sem possibilidade de aumentar esse valor.
A solução encontrada pela minha equipe foi acessar o manual do MGC CLI, que permite exibir as instâncias através do comando ./mgc vm instances list, que também só mostra 50 instâncias, mas navegando no manual do comando com ./mgc vm instances list -h encontramos a flag --control.limit, que permitiu a exibição de mais de 50 instâncias, solucionando nosso problema e permitindo que encontrassemos as especificações da nossa máquina com o comando ./mgc vm instances list --control.limit 100 (utilizamos 100 nesse caso, pois sabiamos que o valor total de instâncias não excederia isso).

A sugestão consiste em permitir navegar no console através de página ou controlar a exibição total de instâncias em uma única página.

1 curtida

Muito obrigado pelo feedback!!

1 curtida

Resultado final no repositório GitHub (GitHub - Matheus-Mazieiro/Hackathon).
*A aplicação rodou o projeto open-source de forma “local” na VM de forma a utilizar o Terraform, entretando, não conseguimos implementar o balanceamento de carga ainda, mas definitivamente vamos continuar trabalhando para solucionar o problema apresentado, tendo em vista ser um desafio real no nosso departamento :slight_smile: *

Considerações da Equipe
Foi muito satisfatório utilizar as ferramentas da MGC e usufruir de toda a documentação. Nossas barreiras se encontram no fato de nunca termosutilizado cloud e o próprio Terraform, mas a utilidade da ferramenta foi algo incrível de ser experienciado.

Aprendizagem

  • Utilizamos Docker pela primeira vez, conseguindo executar com êxito a aplicação (inclusive alterações no arquivo .tf para isso);
  • Utilizamos ferramentas cloud da MGC pela primeira (felizmente com bastante documentação);
  • Contribuição de ideias Open Source (#buildintheopen);
  • Utilizamos o Terraform como uma IaC;
  • Manipulação de armazenamento em nuvem para criação de um espaço destinado ao banco de dados da nossa aplicação (implementação continua em desenvolvimento);
  • Combinação de conhecimentos em Sistemas Operacionais juntamente com a utilização dos recursos da MGC e IaC via Terraform.

Foi incrível!

1 curtida