Open edX体系架构[译文]
文章目录
接下来准备翻译一些文章。
决定这样做是因为,在开发群里,@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的组件:
###学习管理系统(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中数据分析部分的架构:
###后台进程 一些比较大的任务被丢到后台进程,而不是在请求中执行。这些任务是队列式和分布式的,使用了Celery and RabbitMQ来管理它们。例子如:
- 课程学习评分(成绩单)
- 群发邮件
- 生成答案分布报告
- 生成结业证书
Open edX包含了一个叫做XQueue的可定制队列,用来跑自定义评级代码。这些都是独立的进程,用来运行计算密集型评估工作
###搜索 Open edX在以下地方使用了Elasticsearch来搜索:
- 课程内容
- 讨论区
- 学生笔记
文章作者 种瓜
上次更新 2015-09-28