Red de conocimiento informático - Material del sitio web - ¿Cómo crear DO en un servidor web?

¿Cómo crear DO en un servidor web?

Elección del sistema operativo

Crear un sitio web en Linux o Windows no es gran cosa. Sin embargo, si su plataforma se va a utilizar para eventos como competiciones en el futuro, se requiere una licencia comercial original de Windows. Por lo tanto, para mayor economía, podría ser mejor utilizar la plataforma Linux.

Sin embargo, la parte central de la revisión debe estar en el entorno Linux. En primer lugar, el entorno de evaluación final de la competencia oficial es Linux; en segundo lugar, después de todo, usar los compiladores de la serie GCC en Windows es muy diferente de Linux, lo que eventualmente conducirá a muchos problemas dolorosos.

Parte web

No hay nada que decir sobre esta parte. Básicamente, puedes usar todo lo que puedas y no es muy diferente de los programas web comunes. Django, ROR, .Net, J2EE, PHP, etc., nada especial.

Nodo de juicio

La parte de juicio es el núcleo de todo el sitio web OnlineJudge. Generalmente se recomienda separar la parte de revisión en un servicio, de modo que los nodos de revisión se puedan agregar fácilmente en cualquier momento para acelerar el proceso de revisión.

Nuestra idea actual es que el lado web solicite enviar preguntas de revisión a una cola de mensajes como RabbitMQ, y cada nodo de revisión sea un trabajador, lo que puede expandir fácilmente la cantidad de nodos de revisión.

Si el sitio web necesita proporcionar al agente POJ, ZOJ, HDU y otras funciones de generación de preguntas de OJ, se puede utilizar la misma idea para construir un nodo de generación de preguntas del agente y expandirlo libremente.

Núcleo

El núcleo es el programa que realmente compila y ejecuta el código enviado por el usuario. Puede ser una caja de arena. Como no sé mucho sobre la API de Windows, la escribí en Linux. En cuanto a las cuestiones de seguridad, puede consultar esta respuesta. ¿Cómo resuelven los jueces las cuestiones de seguridad al final de su juicio? La idea básica es esta. La idea básica es resolver problemas de seguridad bifurcando otro proceso, estableciendo límites de tiempo, memoria, etc., monitoreando a través de ptrace y limitando las llamadas al sistema.

Pero ahora hay una nueva idea. Para el núcleo de juicio, este método es muy simple. Solo necesita ejecutar el código del usuario, calcular el tiempo y el uso de memoria y luego entregarle todos los problemas de seguridad. Docker para resolver. Debido a que Docker es una solución de virtualización muy liviana, iniciar un contenedor Docker es tan rápido como iniciar un programa, por lo que el núcleo del programa de juicio se coloca en Docker. Incluso si el código de usuario está roto, el contenedor Docker eventualmente se bloqueará. Solo ocúpate de interactuar con Docker. Pero esto es sólo una idea, no se ha finalizado y aún está en etapa de desarrollo, pero la idea debería ser factible.