Стажер у центрі уваги: ​​Бен Макморран

29 липня 2015 | за

фото Бена МакморранаЯ Бен Макморран, молодший студент, який вивчає комп’ютерні науки у Вустерському політехнічному інституті. Останні дванадцять тижнів я провів стажера з програмної інженерії в команді викладання та навчання (TNL). Це моє друге літо як стажера тут, в edX. Хоча є багато завдань, над якими я працював протягом свого перебування тут, є два основних проекти, які я хотів би виділити.

Розробка API та інтерфейсу для команд

Першим проектом, над яким я працював, була функція Teams для LMS, яка все ще розробляється. Ця функція полегшить учням зв’язок і розмову один з одним у невеликих групах, а також підвищує віральність курсів edX. Розробка цієї функції включала використання передньої частини Хребет і впровадження API за допомогою Django Rest Framework (DRF). Хоча я був знайомий із Backbone після вдосконалення процесу публікації курсів минулого літа, робота з API була для мене новою.

Під час розробки особлива увага приділялася створенню відокремлених багаторазових компонентів. Одним із прикладів цього є те, як ми розробили елементи керування розбивкою на сторінки для списків команд і тем. Ми розробили декілька загальні багаторазові елементи керування сторінками сумісний з інформацією про сторінку, яку повертає DRF: 

UX для розбитого на сторінки дисплея (стор. 5 / 23)

Ці елементи керування, як зображено вище, можна буде легко інтегрувати з іншими кінцевими точками API edX у майбутній розробці.

Команда розширювані поля Ще один приклад багаторазового коду, який я створив для підтримки Team API. Клієнти можуть вказати, про які поля вони бажають отримати додаткову інформацію, у початковому запиті. Наприклад, запит на інформацію про команду може вказати, що поле користувачів має бути розширене. Замість того, щоб надавати лише імена користувачів, відповідь міститиме деталі про кожного користувача в команді. Це зменшує кількість запитів, які повинен зробити клієнт, або зменшує розмір відповіді, якщо поля непотрібні. Поля, що розгортаються, легко інтегрувати з будь-яким API DRF, вказавши поле як an ExpandableField і надання серіалізатора для згорнутого та розгорнутого стану. У міру розвитку платформи edX цей акцент на багаторазових компонентах ставатиме ще важливішим.

Форуми для обговорень Покращення продуктивності

Я також витратив кілька тижнів на покращення продуктивності наших дискусійних форумів. Ми використовуємо New Relic для моніторингу серверів, на яких працює edx.org. Раніше цього літа моніторинг зафіксував слід, який показав, що публікація коментаря в одному конкретному курсі займає більше 40 секунд, що спонукало до подальшого розслідування.

Обробка трасування однієї публікації коментаря займає 43,400 XNUMX мілісекунд.

Я завантажив проблемний курс у своє локальне середовище розробки та спробував опублікувати коментар. Профілювання виявило, що сервер витрачав переважну більшість часу на випуск аналітичної події, яка включає тему обговорення, якщо це можливо. Тема компонента обговорення надає спосіб фільтрації та групування тем обговорення. Наприклад, усі ланцюжки у вбудованому компоненті обговорення мають однакову тему.

У додатку для обговорення коментарі створюються на основі ідентифікатора обговорення, який використовується службою коментарів. Однак тема обговорення для конкретного коментаря зберігається в модулі обговорення як частина курсу. Модулі обговорення знають свій пов’язаний ідентифікатор обговорення, але не було ефективного способу отримати тему обговорення, якщо ви знали лише ідентифікатор обговорення. Проблемний курс налічував майже 1000 дискусійних модулів. Створення завантаженої події аналітики кожного окремого щоб дізнатися тему обговорення!

Моєю першою думкою було додати індекс до ідентифікатора обговорення. Це виявилося проблематичним, оскільки існує кілька механізмів збереження курсів на платформі edX (старі курси mongo, розділені курси mongo та XML). Використання нового індексу вимагало б кардинальних змін. Натомість я створив a зіставлення ідентифікаторів обговорень із пов’язаними модулями. Це відображення кешується в базі даних MySQL, коли курс публікується. Оскільки дані курсу рідко змінюються, але до них часто звертаються, відносно висока вартість побудови відображення шляхом проходження всього курсу є прийнятною, оскільки це відбуватиметься нечасто.

Коли моє виправлення реалізовано, мені потрібно було перевірити його за допомогою навантажувального тестування. Цей процес був для мене абсолютно новим. Хоча це не було складним само по собі, мені знадобився деякий час, щоб навчитися. Я вів існуючі форуми сарана тести щодо проблемного курсу до та після застосування мого виправлення.

Трасування NewRelic показує в середньому 1320 запитів до бази даних, щоб зробити коментар.

До виправлення на створення коментаря протягом півгодини навантажувального тестування потрібно було близько 20 секунд. Зверніть увагу на величезну кількість запитів MongoDB, 1320, у таблиці розподілу під час завантаження кожного модуля обговорення в курсі.

Трасування NewRelic показує в середньому 6.75 запитів до бази даних, щоб зробити коментар.

Після виправлення на створення коментаря протягом півгодини навантажувального тестування знадобилося близько чотирьох секунд. Зверніть увагу, що кількість запитів MongoDB тепер становить лише 6.75.

Час відповіді був приблизно в п’ять разів швидшим, а кількість запитів MongoDB значно зменшилася завдяки виправленню. Зараз він знаходиться в головній гілці платформи edx і незабаром має бути розгорнутий на edx.org.

У резюме…

Мій досвід стажера edX був фантастичним. Увійшовши в команду TNL, я відчував себе штатним працівником. Я міг взяти реальні квитки та побачити вплив моєї роботи на платформу. Розробка проекту з відкритим кодом — це чудово. Я хотів би подякувати Енді Армстронгу, Крістіні Робертс, усій команді TNL та edX за те, що зробили це чудове літо!

Loading

Час для більшого? Перегляньте статті нижче.

Вирішення проблем разом: Розробка платформи, керована спільнотою
Майбутнє в рамках конференції Open edX: «Навички та масштабування»
Відкриті семінари розробників конференції edX
Повернення нашого цифрового майбутнього: Чому я приєднався до групи Open Renaissance
Приєднуйтесь до конференції Open edX 2026!

На конференції Open edX 2026 року будуть представлені інноваційні сценарії використання однієї з найкращих у світі систем керування онлайн-навчанням з відкритим кодом, платформи Open edX, а також відкриються останні досягнення в дизайні навчання, групі курсів і методах роботи та розширення платформи Open edX. , включаючи проривні технології, такі як генеративний ШІ.