Saltar a contenido

Descripción general de la arquitectura

omegaUp se construye utilizando el patrón arquitectónico Modelo-Vista-Controlador (MVC), lo que proporciona una clara separación de preocupaciones entre datos, lógica de negocios y presentación.

Componentes del sistema

omegaUp consta de varios componentes clave:

Interfaz (PHP + MySQL)

La capa de aplicación web que maneja las interacciones de los usuarios, la administración de problemas y concursos, la gestión de usuarios, las clasificaciones y los marcadores. Escrito en PHP con base de datos MySQL.

Backend (Ir)

El subsistema de evaluación responsable de compilar y ejecutar los envíos de los usuarios.

  • Calificador: mantiene la cola de envío, envía a los corredores y determina los veredictos.
  • Runner: compila y ejecuta programas en un entorno seguro de pruebas.
  • Minijail: entorno limitado de Linux (bifurcado de Chrome OS) para la ejecución segura de código

Arquitectura de alto nivel

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

Pila de tecnología

Tecnología Propósito Versión
MySQL Base de datos 8.0.39
PHP Controladores/API 8.1.2
Pitón Trabajos cron 3.10.12
Mecanografiado Interfaz 4.4.4
Vue.js Marco de interfaz de usuario 2.5.22
Arranque Marco de interfaz de usuario 4.6.0
Ir Clasificador y corredor 20.0.1

Actualizaciones de versión

Las versiones de la tecnología se actualizan periódicamente para mantener la plataforma respaldada y segura.

Flujo de solicitudes

Cuando un usuario envía código, esto es lo que sucede:

  1. Frontend envía HTTP POST a /api/run/create/
  2. Nginx reenvía la solicitud a PHP (HHVM)
  3. Bootstrap carga la configuración e inicializa la base de datos.
  4. El controlador (RunController::apiCreate) procesa la solicitud
  5. Autenticación valida el token del usuario
  6. Validación verifica permisos, estado del concurso, límites de tarifas
  7. Base de datos almacena el envío con GUID
  8. Calificador recibe el envío para evaluación
  9. Runner compila y ejecuta código
  10. Resultado devuelto al frontend a través de WebSocket

Para obtener información detallada, consulte Partes internas del sistema.

Principios de diseño

La seguridad es lo primero

  • Toda la comunicación cifrada (HTTPS)
  • Ejecución segura de código a través de Minijail sandbox
  • Tokens de autenticación para acceso API
  • Limitación de tarifas para evitar abusos.

Escalabilidad

  • Arquitectura de corredor distribuido
  • Procesamiento de envíos basado en colas
  • Almacenamiento en caché para rendimiento
  • Optimización de la base de datos

Mantenibilidad

  • Patrón MVC para separación de preocupaciones.
  • Patrón DAO/VO para acceso a datos
  • Cobertura completa de pruebas.
  • Organización de código claro

Documentación relacionada

Referencias Académicas

omegaUp ha sido documentado en artículos académicos:


Próximos pasos: Explore el Patrón MVC para comprender cómo omegaUp organiza su código.