Skip to content

Commit

Permalink
Merge pull request #2166 from openedx/hack-and-slash-dev-guide
Browse files Browse the repository at this point in the history
Hack and slash dev guide
  • Loading branch information
feanil committed Aug 1, 2023
2 parents d654666 + 9f08516 commit 49aa732
Show file tree
Hide file tree
Showing 38 changed files with 122 additions and 2,832 deletions.
80 changes: 7 additions & 73 deletions en_us/developers/source/architecture.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
###########################
#####################
Open edX Architecture
###########################
#####################

The Open edX project is a web-based platform for creating, delivering, and
analyzing online courses. It is the software that powers edx.org and many other
Expand All @@ -21,8 +21,8 @@ the learning management and course authoring applications (LMS and Studio,
respectively).

This service is supported by a collection of other autonomous web services
called independently deployed applications (IDAs). Over time, edX plans to
break out more of the existing edx-platform functions into new IDAs. This
called independently deployed applications (IDAs). Over time, we plan to
break out more of the existing edx-platform functions into new IDAs and MFEs. This
strategy will help manage the complexity of the edx-platform code base to make
it as easy as possible for developers to approach and contribute to the
project.
Expand All @@ -42,58 +42,6 @@ Key Components
Learning Management System (LMS)
================================

The LMS is the most visible part of the Open edX project. Learners take courses
using the LMS. The LMS also provides an instructor dashboard that users who
have the Admin or Staff role can access by selecting **Instructor**.

The LMS uses a number of data stores. Courses are stored in `MongoDB`_, with
videos served from YouTube or Amazon S3. Per-learner data is stored in MySQL.

As learners move through courses and interact with them, events are published
to the analytics pipeline for collection, analysis, and reporting.

Front End
*********

The Django server-side code in the LMS and elsewhere uses `Mako`_ for front-end
template generation. The browser-side code is written primarily in JavaScript
with some `CoffeeScript`_ as well (edX is working to replace that code with
JavaScript). Parts of the client-side code use the `Backbone.js`_ framework,
and edX is moving more of the code base to use that framework. The Open edX
project uses `Sass`_ and the `Bourbon framework`_ for CSS code.

Course Browsing
***************

The Open edX project provides a simple front page for browsing courses. The
`edx.org`_ site has a separate home page and course discovery site that is not
open source.

Course Structure
****************

Open edX courses are composed of units called
:ref:`XBlocks<xblocktutorial:Open edX XBlock Tutorial>`. Anyone can write new
XBlocks, allowing educators and technologists to extend the set of components
for their courses. The edX platform also still contains several XModules, the
precursors to XBlocks. EdX is working to rewrite the existing XModules as
XBlocks and remove XModules from our code base.

In addition to XBlocks, there are a few ways to extend course behavior:

* The LMS is an :ref:`LTI<partnercoursestaff:LTI Component>` tool consumer.
Course authors can embed LTI tools to integrate other learning tools into an
Open edX course.

* Problems can use embedded Python code to either present the problem or assess
the learner’s response. Instructor-written Python code is executed in a
secure environment called CodeJail.

* JavaScript components can be integrated using
:ref:`JS Input<Custom JavaScript Applications>`.

* Courses can be exported and imported using OLX (open learning XML), an XML-
based format for courses.

======
Studio
Expand All @@ -120,42 +68,28 @@ Mobile Apps
===========

The Open edX project includes a mobile application, available for iOS and
Android, that allows learners to watch course videos and more. EdX is actively
Android, that allows learners to watch course videos and more. Open edX is actively
enhancing the mobile app.

=========
Analytics
=========

Events describing learner behavior are captured by the Open edX analytics
pipeline. The events are stored as JSON in S3, processed using Hadoop, and then
digested, aggregated results are published to MySQL. Results are made available
via a REST API to Insights, an IDA that instructors and administrators use to
explore data that lets them know what their learners are doing and how their
courses are being used.

.. image:: ../../shared/images/edx-architecture-analytics.png
:width: 700
:alt: A diagram of the components and technologies that make up the Open edX
analytics architecture.

===============
Background Work
===============

A number of tasks are large enough that they are performed by separate
background workers, rather than in the web applications themselves. This work
is queued and distributed using `Celery`_ and `RabbitMQ`_. Examples of queued
is queued and distributed using `Celery`_ and `Redis`_. Examples of queued
work include:

* Grading entire courses
* Sending bulk emails (with Amazon SES)
* Generating answer distribution reports
* Producing end-of-course certificates

The Open edX project includes an IDA called XQueue that can run custom graders.
These are separate processes that run compute-intensive assessments of
learners’ work.

======
Search
Expand Down Expand Up @@ -185,5 +119,5 @@ like order work flows and coupons.
.. _Ruby: https://www.ruby-lang.org/en/
.. _Sinatra: http://www.sinatrarb.com/
.. _Celery: http://www.celeryproject.org/
.. _RabbitMQ: http://www.rabbitmq.com/
.. _Redis: https://redis.io/
.. _Elasticsearch: https://www.elastic.co/

0 comments on commit 49aa732

Please sign in to comment.