CloudCrowd——一个 100% 的 Ruby 云方案

  • Sebastien Auvray
  • 霍泰稳

2009 年 9 月 22 日

话题:Ruby架构云计算DevOps语言 & 开发

一年前,纽约时报和 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

Ruby架构云计算DevOps语言 & 开发