接下来准备翻译一些文章。

决定这样做是因为,在开发群里,@amspring提到之前我知道论坛部分使用到轻量级的Sinatra,没有看到Rails,看好几个地方博客什么的涉及技术这块都写ROR,我以为我漏掉了什么呢 Rails比较重,这里提供简单接口的 使用Sinatra较符合

而不少群友似乎也觉得edX架构中使用了Rails,而实际上Rails并没有被采用,这类知识其实在官方的文章中都已经说清楚了


Open edX是一个基于web技术的平台,用于创建,发布和分析在线课程。它驱动着edx.org以及其他的许多在线教育网站。

这篇文章准备站在较高的层面上来说明平台当前的架构方案,而不会深入到许多细节里。同时也描述出我们正在积极做着的变更。

#技术 Open edX中,几乎所有的后端(服务器端)代码都是用Python写的,django作为web应用框架,使用Mako模板(译者注:替换Django原生模板)

前端(浏览器端)代码主要用JavaScript来写。部分代码使用CoffeeScript来写,edX正将其替换为JavaScript。部分客户端代码(前端)由Backbone.js写成,更多的代码正在往这个框架上迁移。

edX同时使用Sass和Bourbon框架来写css

#组件

Open edX平台中有一组核心组件。在可能的情况下,这些组件采用稳定的,经过验证的的api来互相通信

点击示意图可以查看Open edX的组件:

edX_architecture_CMS_LMS_0

###学习管理系统(LMS)

LMS是Open edX的核心部分,学生使用它来学习课程。LMS也提供教师面板。

LMS采用了多种存储机制,课程存储在Mongo中,视频存储在YouTube和或亚马逊S3上,而每个学生的数据存储在MySQL数据库里

学生浏览课程并与课程内容交互。这个过程产生的事件被推送到analytics pipeline里,这些事件将被收集,分析和发布

当前edX正在把LMS打造成一个LTI服务提供者,以便Open edX课程组件能嵌入到其他学习平台

###Studio Studio是课程制作系统,课程团队使用它来创建和更新课程。Studio将课程内容写入到Mongo数据库中,之后LMS从中读取课程内容

###课程浏览 Open edX提供了一个简单的前端页面用来浏览课程。edx.org有一个独立的主页和课程搜索页面,不过并没有开源

###课程结构

Open edX的课程由单元构成,这些单元被称为XBlocks。任何人都可以写出新的XBlocks,教育者和技术人员可以利用xblock来扩充他们的课程组件。edX平台仍然包含着一些XModules组件,XModules组件是XBlocks的前一个版本。EdX正在将这部分XModules重写为XBlocks,逐渐将它移除。

除了XBlocks,还有几种方法也可以拓展课程组件的行为:

  • LMS支持LTI,课程作者可以集成其他LTI工具到Open edX课程中
  • 问题中,可以嵌入python代码来呈现问题或是评审学生的答案,这些python代码将在CodeJail中执行(隔离的环境)
  • JavaScript组件能通过JS Input集成进去
  • 课件可以导入导出为Open Learning XML (OLX),这是一种基于XML的格式

###讨论
课程内的讨论由一个独立的论坛组件来驱动。这是为数不多没有采用Python来写的组件,它选择了Ruby的Sinatra框架,LMS使用了论坛组件提供的API 来与之通信,并将论坛集成到LMS中

论坛带有一个通知服务,会通知学生有哪些他感兴趣的话题有了更新

###移动端 Open edX也打造了移动端,包括iOS和Android平台,目前只允许学生看视频。edX正在强化他们

###数据分析 记录学生行为的事件由Open edX的数据分析管道捕获。这些事件数据使用json格式存储在S3中。之后可以使用Hadoop来处理,分析聚合完的结果将被发布到MySQL中。这些分析结果将通过REST API传送到Insights中呈现给用户。Insights是一个Django app,课程讲师和网站管理员可以通过它来了解学生正在做什么,以及他们的学习习惯

示意图中展示了Open edX中数据分析部分的架构:

edX_Architecture_Analytics

###后台进程 一些比较大的任务被丢到后台进程,而不是在请求中执行。这些任务是队列式和分布式的,使用了Celery and RabbitMQ来管理它们。例子如:

  • 课程学习评分(成绩单)
  • 群发邮件
  • 生成答案分布报告
  • 生成结业证书

Open edX包含了一个叫做XQueue的可定制队列,用来跑自定义评级代码。这些都是独立的进程,用来运行计算密集型评估工作

###搜索 Open edX在以下地方使用了Elasticsearch来搜索:

  • 课程内容
  • 讨论区
  • 学生笔记

#原文 Open edX Architecture