Phoenix Architecture¶
The Phoenix project is a mobile-based readiness platform for sales and customer success teams. It is a must-have app for organizations who need to regularly update their team with new product features, success stories, sales pitches, sales collateral, marketing offers, sales initiatives, etc.
This page explains the architecture of the platform at a high level, without getting into too many details.
Overview¶
There are a handful of major components in the Phoenix project.
The underlying architecture has the following layered components:
- UI Layer : For rendenring content and for interacting with user
- Business Logic Layer : Encapsulates the application business logic
- Network Layer : Routes the requests to backend servers
- Database Layer : Persists the data for in-app processing
- Analytics Layer : Logs the user engagement and behaviour
The mobile application is supported by plethora of services to provide seamless user experience. The layered architecture ensures “Single Responsibility Principle”. It also empowers developers to make changes to a component without affecting others.
Almost all of the client-side code in the Phoenix project is in Kotlin and Swift.
Major 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 XBlocks. 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 LTI 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 JS Input.
- Courses can be exported and imported using OLX (open learning XML), an XML- based format for courses.
Base Architecture MVVM-C¶
Course discussions are managed by an IDA called comments (also called forums). comments is one of the few non-Python components, written in Ruby using the Sinatra framework. The LMS uses an API provided by the comments service to integrate discussions into the learners’ course experience.
The comments service includes a notifier process that sends learners notifications about updates in topics of interest.
Database¶
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 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.
Network¶
Libraries Used¶
The Sage project uses following libraries:
Other Components¶
In addition to the components detailed above, the Open edX project also has services for other capabilities, such as one that manages e-commerce functions like order work flows and coupons.