¿Cómo podría crear una aplicación web Django como Codecademy?

Este sería un proyecto complicado, pero una versión simple sería sencilla:

  1. Necesita pasar el código de usuario al servidor mediante una llamada AJAX.
  2. Debe tener un intérprete ejecutándose en su servidor y debe almorzar un intérprete y pasar el código del usuario a este intérprete
  3. Enviaría la salida del intérprete a un usuario (tal vez formatee de alguna manera)

¿Suena fácil? Ahora piensa en algunas cosas.

  • Una sola llamada AJAX creará una conexión HTTP, enviará datos y esperará un resultado. ¿Qué sucede si el código que está ejecutando un usuario está involucrado y demorará un par de minutos en ejecutarse? Entonces necesitas tener algo más complicado. Una solución sería tener un recurso REST POST / submit-code que ejecute un proceso de interpretación e inmediatamente devuelva una identificación única para la ejecución del código. Entonces tendría otro recurso para obtener el estado y el resultado, tal vez algo como GET / status / . Deberá escribir un código JavaScript para verificar periódicamente el estado de la tarea en el servidor. El servidor tendría que almacenar qué ID de tarea corresponde a qué proceso en el servidor.
  • ¿Qué sucede si los usuarios desean ejecutar tareas escritas en diferentes lenguajes de programación? Luego, deberá instalar múltiples intérpretes / compiladores en su máquina y cada uno de ellos deberá usarse de manera diferente
  • Qué sucede si un usuario intenta ejecutar un código malicioso (por ejemplo, intente eliminar todos los archivos en su servidor). Debe pensarlo y de alguna manera aislar un proceso que está ejecutando. Es posible que deba crear un usuario del sistema con permisos muy limitados y prohibir el acceso a la red, el sistema de archivos, etc.
  • ¿Qué pasa si su servicio se vuelve increíblemente popular y una máquina no es suficiente para ejecutar todas las tareas de los usuarios? Entonces necesita tener una flota de máquinas para ejecutar sus tareas. Esto agrega una capa de complejidad ya que tendrá que hacer un seguimiento de qué máquina ejecuta qué tareas. Puede usar una base de datos para almacenar esta información.
  • Ahora imagine que su servicio es MUY popular y lo está ejecutando en miles de ejecutores. Verá que muy a menudo algunas máquinas se caen por varias razones (falla de energía, falla del sistema operativo, falla del disco). Pero sus usuarios son muy exigentes y quieren que ejecute sus tareas sin importar qué. Para hacer esto, necesitará rastrear el estado de cada host ejecutor y si falla, reinicie todas las tareas que se estaban ejecutando en un host diferente. Para hacer esto, también debe almacenar la entrada del usuario que proporcionó.
  • Ahora imagine que a veces tiene pocos usuarios usando su servicio al mismo tiempo, pero a veces tiene una miríada de usuarios atacando sus sistemas. De lo que necesita usar la computación en la nube y el escalado automático para iniciar / detener dinámicamente a sus ejecutores