Open EdX - Open Courseware Development Platform - Open EdX Architecture - 2015-03-23

Embed Size (px)

Citation preview

  • 8/16/2019 Open EdX - Open Courseware Development Platform - Open EdX Architecture - 2015-03-23

    1/4

    Published on Open edX | Open Courseware Development Platform  (https://open.edx.org)

    Home > Contributing > Open edX Architecture

    Open edX Architecture [1]

    Open edX is a web-based platform for creating, delivering, and analyzing online courses. It is

    the software that powers edx.org [2] and many other online education sites.

    This page explains the current architecture of the platform at a high level, without getting into

    too many details. We also describe where we are actively working on making changes.

    Technologies

    Almost all of the server-side code in Open edX is in Python [3], with Django [4] as the web

    application framework, using Mako templates [5].

    The browser-side code is written primarily in JavaScript. Some of the code is written in

    CoffeeScript [6], and edX is working to replace that code with JavaScript. Parts of the client-

    side code use the Backbone.js [7] framework, and edX is moving more of the codebase to use

    that framework.

    Open EdX uses Sass [8] and the Bourbon framework [9] for CSS code.

    [10]

    Components

    There are a handful of major components in the Open edX platform. Where possible, these

    communicate using stable, documented APIs.

    Select the diagram to the right to view a larger image of the components of Open edX.

    https://open.edx.org/https://open.edx.org/https://open.edx.org/contributing-to-edxhttps://open.edx.org/contributing-to-edx/architecturehttp://edx.org/https://www.python.org/https://www.djangoproject.com/http://www.makotemplates.org/http://coffeescript.org/http://backbonejs.org/http://sass-lang.com/http://bourbon.io/https://open.edx.org/sites/default/files/wysiwyg/open-edx-pages/edX_architecture_CMS_LMS_0.pnghttp://bourbon.io/http://sass-lang.com/http://backbonejs.org/http://coffeescript.org/http://www.makotemplates.org/https://www.djangoproject.com/https://www.python.org/http://edx.org/https://open.edx.org/contributing-to-edx/architecturehttps://open.edx.org/contributing-to-edxhttps://open.edx.org/https://open.edx.org/

  • 8/16/2019 Open EdX - Open Courseware Development Platform - Open EdX Architecture - 2015-03-23

    2/4

    Learning Management System (LMS)

    The LMS is the most visible part of Open edX. Students take courses using the LMS. The

    LMS also provides instructor dashboards.

    The LMS uses a number of data stores. Courses are stored in Mongo [11], with videos served

    from YouTube or Amazon S3. Per-student data is stored in MySQL.

    As students move through courses and interact with them, events are published to the

    analytics pipeline for collection, analysis, and reporting.

    Work is underway to enable the LMS to be an LTI provider so that Open edX courseware can

    be embedded into other learning environments.

    Studio

    Studio is the course authoring environment. Course teams use it to create and update

    courses. Studio writes its courses to the same Mongo database that the LMS uses.

    Course Browsing

    Open edX provides a simple front page for browsing courses. The edx.org [2] 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 XBlocks [12]. Anyone can write new types of

    XBlocks, allowing educators and technologists to extend the set of components for theircourses. 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

    codebase.

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

    The LMS is an LTI [13] 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

    student’s response. Instructor-written Python code is executed in a secure environment

    called CodeJail.

    JavaScript components can be integrated using JS Input [14].

    Courses can be exported and imported using Open Learning XML (OLX), an XML-

    based format for courses.

    Discussions

    Course discussions use a separate server called the Comments Service. Discussions are one

    of the few non-Python components, written in Ruby [15] using the Sinatra [16] framework. The

    LMS uses an API provided by the Comments Service to integrate discussions into the

    students’ course experience.

    The forums include a notifier process that sends students notifications about updates in topics

    http://www.mongodb.org/http://edx.org/https://open.edx.org/xblockshttps://open.edx.org/learning-tools-interoperabilityhttps://open.edx.org/js-inputhttps://www.ruby-lang.org/en/http://www.sinatrarb.com/http://www.sinatrarb.com/https://www.ruby-lang.org/en/https://open.edx.org/js-inputhttps://open.edx.org/learning-tools-interoperabilityhttps://open.edx.org/xblockshttp://edx.org/http://www.mongodb.org/

  • 8/16/2019 Open EdX - Open Courseware Development Platform - Open EdX Architecture - 2015-03-23

    3/4

    of interest.

    Mobile Apps

    Open edX includes a mobile application, available for iOS and Android, that allows students to

    watch course videos. EdX is actively enhancing the mobile app.

    [17]

    AnalyticsEvents describing student behavior are captured by the Open edX analytics pipeline. The

    events are stored as JSON in S3, processed using Hadoop, and digested, aggregated results

    are published to MySQL. Results are made available via a REST API to Insights, a Django

    application that instructors and administrators use to explore data that lets them know what

    their students are doing and how their courses are being used.

    Select the diagram to the right to view a larger image of the Open edX Analytics

    architecture.

    Background work

    https://open.edx.org/sites/default/files/wysiwyg/open-edx-pages/edX_Architecture_Analytics.png

  • 8/16/2019 Open EdX - Open Courseware Development Platform - Open EdX Architecture - 2015-03-23

    4/4

    A number of tasks are large enough that they are performed by background workers, rather

    than in the web applications themselves. This work is queued and distributed using Celery [18]

    and RabbitMQ [19]. Examples of queued work include:

    Grading entire courses

    Sending bulk emails (with Amazon SES)

    Generating answer distribution reportsProducing end-of-course certificates

    Open edX includes a custom queue called XQueue that can run custom graders. These are

    separate processes that run compute-intensive assessments of students’ work.

    Searching

    Open edX uses Elasticsearch [20] for searching in a few contexts: courseware search, the

    comments service, and the Student Notes feature.

    Source URL: https://open.edx.org/contributing-to-edx/architecture

    Links[1] https://open.edx.org/contributing-to-edx/architecture

    [2] http://edx.org

    [3] https://www.python.org/ 

    [4] https://www.djangoproject.com/ 

    [5] http://www.makotemplates.org/ 

    [6] http://coffeescript.org/ 

    [7] http://backbonejs.org/ 

    [8] http://sass-lang.com/ 

    [9] http://bourbon.io/ 

    [10] https://open.edx.org/sites/default/files/wysiwyg/open-edx-pages/edX_architecture_CMS_LMS_0.png

    [11] http://www.mongodb.org/ 

    [12] https://open.edx.org/xblocks

    [13] https://open.edx.org/learning-tools-interoperability

    [14] https://open.edx.org/js-input

    [15] https://www.ruby-lang.org/en/ 

    [16] http://www.sinatrarb.com/ 

    [17] https://open.edx.org/sites/default/files/wysiwyg/open-edx-pages/edX_Architecture_Analytics.png

    [18] http://www.celeryproject.org/ 

    [19] http://www.rabbitmq.com/ 

    [20] http://www.elasticsearch.org/ 

    http://www.celeryproject.org/http://www.rabbitmq.com/http://www.elasticsearch.org/http://www.elasticsearch.org/http://www.rabbitmq.com/http://www.celeryproject.org/