一年前,纽约时报和 ProPublica 联合发起了耐特新闻挑战 2009 竞赛。 DocumentCloud 赢得 715,500 美元的奖金,任务是构建一个基于文档的应用,使得组织和检查文档变得更加容易。因为考虑到同时要处理好几个资源消耗比较大的任务,DocumentCloud决定完全用Ruby 实现自己的云方案: CloudCrowd 。
DocumentCloud 主要是使用 CloudCrowd 处理 PDF 文档,但是也可以用来处理下面一些资源消耗大的任务:
- 创建或者伸缩图片;
- 在 PDF 上进行文字抽取,或者 OCR;
- 视频解码;
- 迁移大文件集合或者数据库;
- Web 抓取
在 CloudCrowd 架构文档中有如下描述:
CloudCrowd 不是为大量小事务所设计,而是为那些大型、消耗资源比较多的事务所准备的。
CloudCrowd 的灵感来自于 MapReduce 框架。它的架构基于一个使用工作者守护进程进行实际处理的中央服务器。它提供了一个 REST-JSON API,以及一个用于检测的 Web 控制台。CloudCrowd 使用 Amazon S3 用于文件存储,但如果需要的话,也可以使用其他工具进行存储。
InfoQ 据此采访了 CloudCrowd 的作者 Jeremy Ashkens。Jeremy 是 DocumentCloud 的新人,也是 Ruby-Processing 项目的作者。
InfoQ:和 RightScale Gems 或者 Nanite 相比,CloudCrowd 有什么特点?为什么你们要构建自己的方案?
Jeremy Ashkenas:嗯,其实 CloudCrowd 使用了 RightScale AWS gem。它使用 S3 进行所有结果数据(包括中间和最终数据)的分布式存储。这个变化很大,也是一个很有意思的研究方向,它要通过 RightScale gem 装载更多的 EC2 实例,以支持 CloudCrowd 群集的自动伸缩。中央服务区拥有用于决策自动伸缩需要的所有信息——它了解工作者的数目,它们的地点,它们的状态,以及工作序列的大小等。这只是一个关于为实例装载选择算法,并确保新的实例已有所有需要安装的依赖文件的问题。
和 Nanite 相比较,CloudCrowd 的方向是成为 Ruby 高手容易理解和定制的简单易用工具。它使用的是绝大多数 Ruby 开发者熟悉的技术,比如 ActiveRecord 和标准的 ActiveRecord 数据库,以及用于通讯和伸缩的 HTTP 和 S3 等。所有的这些都很容易调试和研究。最小的 CloudCrowd action 是一个简单的 Ruby 类,它被用来定义一个“进程”方法,执行计算中的并行部分,并保存到 S3。你可以将 CloudCrowd 理解为像 Hadoop 和 Nanite 等企业级系统的替代品。不需要 Erlang,AMQP 或者 RabbitMQ 等。另外,它没说一定可以用来处理极大容量的数据,但大多数情况下应该都可以应用,这主要取决于你处理问题的效率如何。
InfoQ:为什么使用 Ruby?有没有考虑到用其他语言,比如 Erlang?
Jeremy Ashkenas:我之所以使用 Ruby,是因为我们想将 DocumentCloud 其他的部分都粘合在一起。注意,许多示例 action 中的事务不是在 Ruby 里完成的,而是将他们交付给适当的工具。作为一个粘合语言,Ruby 很棒,类如图片处理、PDF 转换、视频编码等都可以轻松地交给 GraphicsMagick、Tesseract 和 FFmpeg 等工具去处理。
**** 查看英文原文: CloudCrowd - A 100% Ruby Cloud Solution
评论