edX Architecture Onboarding��Last updated: Feb 2019
edX Architecture
Part 1: High-level Overview
Part 2: Data and Scale
Part 3: Technical Feature Detail
Part 4: Technical Development
Part 1
edX Architecture: High-level Overview
Part 1
edX Architecture: High-level Overview
edX Mission
To create the world’s leading learning destination site and platform so that everyone around the world can become better educated.
We will do this through:
increasing access to high quality education,
improving quality of education
on-campus and on-line,
and enabling research.
edX Themes
edX Core Value
Part 1
edX Architecture: High-level Overview
Data Flow
Authentication
Authorization
Authorization
Part 1
edX Architecture: High-level Overview
Part 2
edX Architecture: Data and Scale
Part 2
edX Architecture: Data and Scale
Content
User
Data Sources of Truth
ECommerce
|
Marketing
|
Studio
|
LMS
|
Credentials
|
Analytics Result Store
|
Catalog
|
Course Structure
XBlock: reusable building block for course content��Course structure: directed acyclic graph of XBlocks�
XBlock types:
LMS View
Course Outline
Course
Section
Subsection
LMS View
Courseware
Subsection
Section
Unit
Unit
html�component
CAPA problem�component
Content Size�(# of XBlocks in edx.org courses, with 60 types of XBlocks)
XBlock Types on edx.org
annotatable
chapter
combinedopenended
conditional
customtag
discussion
done
drag-and-drop-v2
edx_sga
edx-reverification-block
error
google-calendar
google-document
graphical_slider_tool
html
HTML
imageannotation
library_content
lti
lti_consumer
problem
problem-builder
problemset
randomize
rate
recommender
schoolyourself_lesson
schoolyourself_review
sequential
split_test
step-builder
survey
textannotation
ubcpi
vertical
video
videoalpha
videosequence
word_cloud
wrapper
mentoring
officemix
openassessment
oppia
p
pb-answer
pb-answer-recap
pb-choice
pb-column
pb-completion
pb-dashboard
pb-instructor-tool
pb-mcq
pb-message
pb-mrq
pb-table
pb-tip
peergrading
poll
poll_question
XBlock views provide HTML and JS to run in user’s browser.
XBlock developers implement front-end and back-end code,
requiring approval to install on edx.org.
Backend code must be written in Python.
XBlock backends run in an edX platform (LMS or Studio) runtime. The runtime provides out-of-the-box services such as internationalization, etc.
The Field Data runtime service provides a data storage abstraction for user data (in SQL) and content data (in mongoDB).
The modulestore is edX’s abstraction for content data.
Course Content Extensions
Part 2
edX Architecture: Data and Scale
Analytics
Analytics
Part 2
edX Architecture: Data and Scale
edx.org Usage Growth�(per quarter)
edx.org Usage Growth
(compounded)
edx.org Content Growth�(# of courses)
Developer Growth
(edX employees only)
Web Usage
All
Desktop
Mobile & Tablet
1 Week
1 Month
1 Day
Tues
Web Usage
(courses.edx.org only)
All
Desktop
Mobile & Tablet
1 Week
1 Month
1 Day
Mobile Usage
All
Android
iOS
Web Performance�(average across all LMS pages)
requests per min
avg response time
Web Performance�(LMS Courseware page)
requests per min
avg response time
percentiles of response time
Scaling with Reactive Manifesto
Elastic
LMS: 13k rpm�Studio: 60 rpm
no bottlenecks�
Responsive
99% < 2s
consistent
Resilient�99.9% uptime
MTTF & MTTR
isolation
Scaling with Reactive Manifesto
Elastic
LMS: 13k rpm�Studio: 60 rpm
no bottlenecks�
Responsive
99% < 2s
consistent
Resilient�99.9% uptime
MTTF & MTTR
isolation
Message Driven
event-driven
asynchronous
loosely coupled
location transparency
Scaling in devOps
Scaling in devOps
Part 3
edX Architecture: Technical
Learning Tools Interoperability (LTI)
LTI 1.1 Config
LTI 1.1 Launch
Whenever a user accesses an LTI link, the Tool Consumer “launches” the LTI tool in an embedded iFrame or a new browser window by sending a POST request to the Tool Provider.�
Fields sent in HTML Form to TP
* context_id is identifier of TC's context� Context may be of type:
1. Course template
2. Course offering
3. Course section
4. Group
5. None if launched outside of context�
* resource_link_id: unique per TC's usage of the LTI link�
* user_id: non-identifiable, primary-key of user�
* custom parameters requested by TP in its configuration
If scores are passed back to TC:� * lis_outcome_service_url: where to pass back� * lis_result_sourcedid: unique for (context_id, resource_link_id, user_id)
LTI 1.1 Score API
Automated Communication Engine
Schedules
Command Query Responsibility Segregation (CQRS)
Separation of Concerns
Data-driven development
XQueue
XQWatcher Pull Model
XServer�Push Model
eCommerce
Purchase Flow
Forums
Django Frontend
TODO
Topics/Features that still need slides
Part 4
edX Architecture: Technical Development
edx.org Server Environments
(running on AWS services, except Devstack)
Tools & Technology (1)
Tools & Technology (2)
Monitoring & Data Analysis
Coding Standards
Testing
deprecated: Karma/Jasmine
Security
Security Attacks
API Design
Part 5
edX Architecture: Sustainability
Developer Documentation