写点什么

Skynet,全新的 Ruby MapReduce 实现

  • 2008-02-05
  • 本文字数:2142 字

    阅读完需:约 7 分钟

2004 年,Google 提出用于分布式数据处理的 MapReduce 设计模式,同时还提供了第一个 C++ 的实现。现在,一个名为 Skynet 的 Ruby 实现已经由 Adam Pisoni 发布。

Skynet 是可适配、可容错的、可自我更新的,而且完全是分布式的系统,不存在单一的失败节点。

Skynet 和 Google 在设计上有两点重要的区别:

如果有一个工作者由于某种原因离开或者放弃了,就会有另一个工作者发现并接管它的任务。Skynet 也没有所谓的“主”管理进程,只有工作者,它们在任何时间都可以充当任何任务的主管理进程。

Skynet 的使用和设置都很容易,这也正是 MapReduce 这个概念的真正优势。Skynet 还扩展了 ActiveRecord,加入了 MapReduce 的特性,比如 distributed_find。

另一个类 MapReduce 的 Ruby 框架是 Starfish ,它已经一岁半了。可以读一读 Peter Cooper 关于 Starfish 的喜忧参半之情 。InfoQ 采访了 Adam Pisoni,谈及了 Skynet 的特性以及与 Starfish 之间的对比。

请你比较一下 Skynet 和 Starfish?在开发 Skynet 之前,我曾经研究过 Starfish,觉得它达不到我需要的健壮性。Starfish 只是个简单的系统,在可伸缩性、控制性上存 在着诸多限制。另外还有一些问题,比如 Starfish 发布任务的能力到底有多强。因为 Ruby 其实并不能打包并在网络上发送代码,只能传递引用。所以如 果说在机器 Y 上运行代码块 X,机器 Y 将仅需要在开始时调用运行代码块 X 所须依赖的那些代码。既然如此,我不明白它是如何实现分布式的。

关于 Starfish 还有一点我感到非常困惑,甚至曾经和它的作者通过 email 讨论过,那就是它如何解决使用 DRB 进行实 际代码的分发。在 Starfish 中,你只要提供一段代码以供 map 使用就行了。它会把这段代码转入到 DRB 对象中,并把这个对象的引用转发给工作者。这 样工作者线程就可以在本地执行这些代码了…但是 Ruby DRB 并不允许这样做。代码永远运行在编译它的那台机器上。因此,只要所有的工作者线程都在同一台机器上运行,那么一切都没有问题。但是一旦你试图在另一 台机器上运行工作者线程的话,尽管看起来代码好像是被发送过来的一样,但事实上代码还是在原来的机器上执行的。

Starfish 的另一个严重限制就是你不能异步地运行作业。例如,假设 Web 页面中的某个 Action 启动了一个 Map/Reduce 进程,那么在你启动了 Starfish 作业后,就无法任意行动了。谁启动了 Starfish 作业,就必须等待那个作业的完成。

你要为 Starfish 编写一些小程序,它们的代码是你将要构建其中的。如果我没有弄错的话,你无法在同一台机器上运行多种类型的 MapReduce 作业。Skynet 是一个更全面的 MR 系统,可以运行多种类型的多个作业,比如,各种不同的代码。

你可以谈一谈 Skynet 的优势么?Skynet 是构建于消息队列之上的。你可以根据可伸缩性的需要,选择使用哪一种消息队列。它目前支持 tuplespace 和 mysql。Mysql 的伸缩性比 TS 更好,因此我们选择使用 mysql。

你可以完全自由地创建作业,Skynet 都可以发布并执行这些作业。在 geni,我们通常对会异步地执行作业(这正是 Starfish 做不到的)。因此,一旦创建了新的 MR 作业后,它可以立即返回。在后端,它会把你的作业添加到队列中,并由某个工作者负责执行。然后,你可以调用作业对象,获取结果。

Skynet 也允许失败。工作者会互相关照。如果一个工作者失败了,无法及时完成任务,另一个工作者将会接起这个任务并尝试完成它。Skynet 也支持 map_data 流,也就是说,即使某个数据集非常庞大,甚至无法放在一个数据结构中,Skynet 也可以处理。

什么是 map_data 流?

大多数时候,在你准备启动一个 map_reduce 作业时,必须提供一个数据的队列,这些数据已经被分离并将被并行处理。如果队列过大,以至于无法适应于内存怎么办?在这种情况下,你就要不能再用队列,而应该使用枚举(Enumerable)。Skynet 知道去对象的调用:next 或者:each 方法,然后开始为“每一个(each)”分离出 map_task 来。通过这样的方式,不会有人再试图同时创建大量的数据结构。
你还想谈论一下其他的特性么?

还有很多特性值得一提,不过最想提醒大家的是,Skynet 能够与你现有的应用非常完美地集成到一起,其中自然包括 Rails 应用。Skynet 甚 至还提供了一个 ActiveRecord 的扩展,你可以在模型中以分布式的形式执行一些任务。在 Geni 中,我们使用这项功能来运行特别复杂的移植,它通 常涉及到在数百万的模型上执行 Ruby 代码。

Model.distributed_find(:all, :conditions => “id > 20”).each(:somemethod)

在你运行 Skynet 的时候,它将在每个模型上执行:somemethod,不过是以分布式的方式(这和你拥有多少个工作者相关)。它在向模型分发任务前不必进行初始化,甚至不必提前获取所有的 id。因此它可以操作无限大的数据集。 用户的反馈如何?MapReduce 还处在发展的初期,只有很少的人在使用它。Release 0.9.2 是一个非常关键的发布,它的很多代码得到了重写,性能得到了提升,诸多特性也获得增强。我们已经申请在 Railsconf 上做一次关于 Skynet 的报告,但是还没有收到反馈。我们也计划创建一段视频来演示如何使用 Skynet。

查看英文链接: Skynet, A New Ruby MapReduce

2008-02-05 08:241970
用户头像

发布了 53 篇内容, 共 15.2 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

LeaRun.Java可视化拖拽编辑的BI大屏

力软低代码开发平台

如何使用物联网低代码平台进行服务管理?

AIRIOT

低代码 物联网 低代码开发平台 低代码,项目开发

设计电商秒杀系统

流火

实践GoF的23种设计模式:装饰者模式

华为云开发者联盟

开发 对象 装饰者模式

ElasticSearch从入门到精通:Logstash妙用

Jackpop

【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台

Alluxio

人工智能 互联网 金融 科技 电信

盘点华为云GaussDB(for Redis)六大秒级能力

华为云开发者联盟

数据库 后端 华为云

ElasticSearch从入门到精通:常用操作

Jackpop

NLP 论文领读|文本生成模型退化怎么办?SimCTG 告诉你答案

澜舟孟子开源社区

人工智能 自然语言处理 机器学习 nlp 文本生成

ElasticSearch从入门到精通:基础知识

Jackpop

墨天轮沙龙 | 清华乔嘉林:Apache IoTDB,源于清华,建设开源生态之路

墨天轮

数据库 国产数据库 apache 社区 Apache IoTDB

ABAP-发布Restful服务

桥下本有油菜花

abap

1 分钟 Serverless 搭建你的首个个人网站(完成就送猫超卡)

阿里巴巴云原生

阿里云 Serverless 云原生 网站

全技术栈、全场景、全角色云原生系列培训重磅首发,助力企业打造硬核云原生技术团队

York

容器 云原生 IT建设 技术培训 开发运维

wallys/WiFi 6 (802.11ax) 4×4 MU-MIMO 5GHz QCN9074 Single Band Wireless Module

wallys-wifi6

wallys/WiFi 6 (802.11ax) 4×4 MU-MIMO 2.4GHz QCN9074 Single Band Wireless Module

wallys-wifi6

ElasticSearch从入门到精通:数据导入

Jackpop

先写API文档还是先写代码?

Liam

Java 前端 Postman 后端开发 后端技术

“阿里爸爸”最新Java面试指南,基础+框架+数据库+系统设计+算法

Java全栈架构师

Java spring 程序员 面试 架构设计

充值满赠,IM+RTC+X 全通信服务「回馈季」开启

融云 RongCloud

全文手敲代码,教你用Java实现扫雷小游戏

华为云开发者联盟

Java

居家办公没有“血泪史”| 社区征文

穿过生命散发芬芳

居家办公 6月月更 初夏征文

小程序容器技术,促进园区运营效率提升

Speedoooo

智慧园区 小程序容器 园区运营

程序员女友给我做了一个疲劳驾驶检测

华为云开发者联盟

人工智能 疲劳驾驶检测

为什么越来越多的人选择云渲染?

Finovy Cloud

服务器 渲染 云渲染

为什么一定要从DevOps走向BizDevOps?

阿里云云效

阿里云 DevOps 研发 BizDevOps

NFT挖矿游GameFi链游系统开发搭建

薇電13242772558

智能合约 NFT

GameFi链游系统开发NFT技术

薇電13242772558

NFT gamefi

联想YOGA 27 2022,超强配置全面升级

极客天地

CODING 正式入驻腾讯会议应用市场!

CODING DevOps

Rust 如何实现依赖注入?

非凸科技

依赖注入 Trait 对象 编程语言‘ public

Skynet,全新的Ruby MapReduce实现_Ruby_Sebastien Auvray_InfoQ精选文章