Interno destacado: Ben McMorran

29 de julio de 2015 | Por

fotografía de Ben McMorranSoy Ben McMorran, un joven en ascenso que estudia informática en el Instituto Politécnico de Worcester. Pasé las últimas doce semanas como pasante de ingeniería de software en el equipo de enseñanza y aprendizaje (TNL). Este es mi segundo verano como pasante aquí en edX. Si bien trabajé en muchas tareas durante el tiempo que estuve aquí, hay dos proyectos principales que me gustaría destacar.

Desarrollo API y Front End para Teams

El primer proyecto en el que trabajé fue la función Teams para LMS, que aún está en desarrollo. Esta función facilitará que los estudiantes se conecten y conversen entre sí en pequeños grupos y aumentará la viralidad de los cursos de edX. El desarrollo de esta característica incluyó el trabajo de front-end usando Columna vertebral e implementación de API con el Marco de descanso de Django (DRF). Si bien estaba familiarizado con Backbone por haber mejorado el flujo de trabajo de publicación de cursos el verano pasado, el trabajo de la API era nuevo para mí.

Hubo un fuerte enfoque durante todo el desarrollo en la creación de componentes desacoplados y reutilizables. Un ejemplo de esto es la forma en que diseñamos los controles de paginación para las listas de equipos y temas. Desarrollamos varios controles de paginación genéricos y reutilizables compatible con la información de la página que devuelve DRF: 

UX para visualización paginada (Página 5 / 23)

Estos controles, como se muestra arriba, serán fáciles de integrar con otros puntos finales de la API de edX en el desarrollo futuro.

El campos expandibles que creé para admitir Team API son otro ejemplo de código reutilizable. Los clientes pueden especificar sobre qué campos les gustaría obtener más información como parte de la solicitud inicial. Por ejemplo, una solicitud de información del equipo podría especificar que el campo de usuarios debe expandirse. En lugar de solo proporcionar nombres de usuario, la respuesta incluiría detalles sobre cada usuario del equipo. Esto reduce la cantidad de solicitudes que debe realizar el cliente, o reduce el tamaño de la respuesta cuando los campos son innecesarios. Los campos expandibles son fáciles de integrar con cualquier API DRF especificando el campo como un campo expandible y proporcionar un serializador para el estado colapsado y expandido. A medida que crece la plataforma edX, este enfoque en los componentes reutilizables solo se volverá más importante.

Mejoras en el rendimiento de los foros de discusión

También pasé varias semanas mejorando el rendimiento de nuestros foros de discusión. Usamos New Relic para monitorear los servidores que ejecutan edx.org. A principios de este verano, el monitoreo capturó un rastro que mostraba que se tardaba más de 40 segundos en publicar un comentario en un curso específico, lo que provocó una mayor investigación.

El seguimiento que muestra una publicación de comentario tarda 43,400 milisegundos en procesarse.

Cargué el curso problemático en mi entorno de desarrollo local e intenté publicar un comentario. La creación de perfiles reveló que el servidor pasaba la mayor parte del tiempo emitiendo un evento de análisis, que incluye el tema de la discusión, si corresponde. El tema de un componente de discusión proporciona una forma de filtrar y agrupar hilos de discusión. Por ejemplo, todos los hilos en un componente de discusión en línea tienen el mismo tema.

En la aplicación de discusión, los comentarios se crean en función de una identificación de discusión utilizada por el servicio de comentarios. Sin embargo, el tema de discusión de un comentario en particular se almacena en el módulo de discusión como parte del curso. Los módulos de discusión conocen su identificación de discusión asociada, pero no había una forma eficiente de obtener el tema de la discusión si solo conocía la identificación de la discusión. El curso problemático tuvo casi 1000 módulos de discusión. Creando el evento analítico cargado cada uno para descubrir el tema de discusión!

Mi primer pensamiento fue agregar un índice en la identificación de la discusión. Esto resultó ser problemático porque hay varios mecanismos de persistencia para los cursos en la plataforma edX (mongo antiguo, mongo dividido y cursos XML). El uso de un nuevo índice requeriría cambios drásticos. En su lugar, creé un mapeo de ID de discusión a módulos asociados. Esta asignación se almacena en caché en la base de datos MySQL cuando se publica un curso. Dado que los datos del curso rara vez cambian pero se accede a ellos con frecuencia, el costo relativamente alto de construir el mapeo recorriendo todo el curso es aceptable, ya que ocurrirá con poca frecuencia.

Con mi solución implementada, necesitaba verificarla a través de pruebas de carga. Este proceso era nuevo para mí. Si bien no fue un desafío en sí mismo, me tomó un tiempo ponerme al día. Corrí los foros existentes Langosta pruebas contra el curso problemático antes y después de aplicar mi solución.

Seguimiento de NewRelic que muestra 1320 consultas a la base de datos, en promedio, para hacer una publicación de comentarios.

Antes de la solución, se tardaba unos 20 segundos en crear un comentario durante la media hora de prueba de carga. Observe la gran cantidad de consultas de MongoDB, 1320, en la tabla de desglose a medida que se cargan todos los módulos de discusión del curso.

Seguimiento de NewRelic que muestra 6.75 consultas a la base de datos, en promedio, para hacer una publicación de comentarios.

Después de la corrección, tomó alrededor de cuatro segundos crear un comentario durante la media hora de prueba de carga. Observe cómo el número de consultas MongoDB ahora es solo 6.75.

Los tiempos de respuesta fueron unas cinco veces más rápidos y la cantidad de consultas de MongoDB se redujo considerablemente con la corrección. Ahora está en la rama principal de la plataforma edx y debería implementarse en edx.org pronto.

En resumen…

Mi experiencia como pasante de edX fue fantástica. Integrado en el equipo de TNL, me sentí como si fuera un empleado de tiempo completo. Pude adquirir boletos reales y ver el impacto de mi trabajo en la plataforma. Desarrollar un proyecto de código abierto es increíble. ¡Me gustaría agradecer a Andy Armstrong, Christina Roberts, todo el equipo de TNL y edX por hacer de este un gran verano!

Carga

¿Necesita más tiempo? Eche un vistazo a los artículos a continuación.

Resolviendo problemas juntos: Desarrollo de plataformas impulsado por la comunidad
Desarrolla tus habilidades y escala el futuro en la Conferencia Open edX.
Talleres para desarrolladores de la conferencia Open edX
Recuperando nuestro futuro digital: Por qué me uní al grupo Open Renaissance
¡Únete a la Conferencia Open edX 2026!

La Conferencia Open edX 2026 presentará casos de uso innovadores para uno de los mejores sistemas de gestión de aprendizaje en línea de código abierto del mundo, la plataforma Open edX, y descubrirá los últimos avances en diseño instruccional, constelación de cursos y métodos para operar y ampliar la plataforma Open edX. , incluidas tecnologías innovadoras, como la IA generativa.