Ir para o conteúdo

Visão geral da arquitetura

omegaUp é construído usando o padrão de arquitetura Model-View-Controller (MVC), fornecendo uma separação clara de preocupações entre dados, lógica de negócios e apresentação.

Componentes do sistema

omegaUp consiste em vários componentes principais:

Front-end (PHP + MySQL)

A camada de aplicação web que lida com interações de usuários, administração de problemas e concursos, gerenciamento de usuários, classificações e placares. Escrito em PHP com banco de dados MySQL.

Back-end (Ir)

O subsistema de avaliação responsável por compilar e executar envios de usuários.

  • Avaliador: Mantém a fila de envio, envia para os Corredores e determina veredictos
  • Runner: compila e executa programas em um ambiente sandbox seguro
  • Minijail: sandbox Linux (bifurcado do Chrome OS) para execução segura de código

Arquitetura de alto nível

flowchart TD
    WebApp[Web Application<br/>Vue.js + TypeScript]
    CLI[CLI Clients]

    subgraph Cloud[Cloud Infrastructure]
        MySQL[(MySQL Database)]
        DAOs[DAO Layer<br/>Data Access Objects]
        Controllers[Controllers/APIs<br/>PHP]
        GitServer[Git Server<br/>Problem Storage]
        Grader[Grader<br/>Go]

        subgraph Runners[Runner Pool]
            Runner1[Runner 1<br/>Go]
            Runner2[Runner 2<br/>Go]
            Runner3[Runner N<br/>Go]
        end

        Controllers --> GitServer
        Controllers --> DAOs
        DAOs --> MySQL
        Controllers --> Grader
        Grader --> MySQL
        Grader --> Runner1
        Grader --> Runner2
        Grader --> Runner3
    end

    WebApp --> Controllers
    CLI --> Controllers

    style WebApp fill:#42b883,stroke:#35495e,color:#fff
    style Controllers fill:#777bb4,stroke:#4f5b93,color:#fff
    style Grader fill:#00add8,stroke:#007d9c,color:#fff
    style MySQL fill:#4479a1,stroke:#2c5a7a,color:#fff

Pilha de tecnologia

Tecnologia Finalidade Versão
MySQL Banco de dados 8.0.39
PHP Controladores/API 8.1.2
Pitão Cronjobs 3.10.12
Datilografado Interface 4.4.4
Vue.js Estrutura de front-end 2.5.22
Inicialização Estrutura de IU 4.6.0
Graduador e Corredor 20.0.1

Atualizações de versão

As versões tecnológicas são atualizadas periodicamente para manter a plataforma suportada e segura.

Fluxo de solicitação

Quando um usuário envia um código, eis o que acontece:

  1. Frontend envia HTTP POST para /api/run/create/
  2. Nginx encaminha solicitação para PHP (HHVM)
  3. Bootstrap carrega a configuração e inicializa o banco de dados
  4. Controlador (RunController::apiCreate) processa solicitação
  5. Autenticação valida o token do usuário
  6. Validação verifica permissões, status do concurso e limites de taxas
  7. Banco de dados armazena envios com GUID
  8. Aluno recebe envio para avaliação
  9. Runner compila e executa código
  10. Resultado retornado ao frontend via WebSocket

Para obter informações detalhadas, consulte Interiores do Sistema.

Princípios de Design

Segurança em primeiro lugar

  • Toda a comunicação criptografada (HTTPS)
  • Execução segura de código via sandbox Minijail
  • Tokens de autenticação para acesso à API
  • Limitação de taxa para evitar abusos

Escalabilidade

  • Arquitetura Runner Distribuída
  • Processamento de envio baseado em fila
  • Cache para desempenho
  • Otimização de banco de dados

Manutenção

  • Padrão MVC para separação de interesses
  • Padrão DAO/VO para acesso a dados
  • Cobertura abrangente de testes
  • Organização clara do código

Documentação Relacionada

Referências Acadêmicas

omegaUp foi documentado em artigos acadêmicos:


Próximas etapas: Explore o padrão MVC para entender como o omegaUp organiza seu código.