最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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:241632
用户头像

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

关注

评论

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

华为云CDN加速服务,让企业用户上网“走高速”

爱科技的水月

华为云微服务引擎0停机迁移Nacos?它是这样做的

科技之光

华为云OBS:让大数据的容器再无容量限制

爱尚科技

华为云对象存储OBS超高性能数据存储能力,推进企业快速上云

爱尚科技

2022-12-29:nsq是go语言写的消息队列。请问k3s部署nsq,yaml如何写?

福大大架构师每日一题

云原生 k8s k3s nsq 福大大

存储空间不够大?试试华为云OBS对象存储服务

与时俱进的时代

何惧内卷?华为云对象存储服务OBS工具随便拿出一个都很能打

与时俱进的时代

MatrixDB v4.6.0 发布,查询性能和图形化操作界面全面升级!

YMatrix 超融合数据库

Prometheus 存储引擎 超融合数据库 YMatrix MatrixGate

华为云OBS对象存储服务:这个管家很贴心

爱尚科技

HTTPS基础知识

穿过生命散发芬芳

https 12月月更

缓解等待焦虑,华为云CDN为您提供畅快下载体验

爱科技的水月

华为云CDN加速服务助你开启网络加速时代

爱科技的水月

助力游戏厂商稳健发展,华为云大数据解决方案高效赋能!

与时俱进的时代

C#-使用Consul

kdyonly

C#

亚信科技通信、交通行业数据库项目入选“星河”标杆、优秀案例

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

干货|无源元件之——电感基础知识(详解)

元器件秋姐

科普 电感器 电感 电感元件 电子知识

小米封杨:工业设备预测性维护及时序数据库选型

YMatrix 超融合数据库

工业4.0 超融合数据库 预测性维护 设备预测性维护 YMatrix

智能且高效,华为云CDN三大特点助企业云上创新

爱科技的水月

华为云大数据BI解决方案助企业突破数据壁垒,加快企业数字化建设

与时俱进的时代

2022卡塔尔世界杯专题分析

易观分析

世界杯 体育

云渲染一张图大概多久?云渲染快吗?

Renderbus瑞云渲染农场

云渲染

什么样的魔法棒,能让AI魔法师一夜成名?

白洞计划

什么样的魔法棒,能让AI魔法师一夜成名?

脑极体

超融合一体流式引擎,打造分布式数据库新纪元

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

让下载速度更快更稳,华为云CDN多重技术助力网络加速

爱科技的水月

支持随时畅玩3A游戏,华为云大数据助力游戏厂商快速稳健发展!

与时俱进的时代

APISIX Ingress 对 Gateway API 的支持和应用

API7.ai 技术团队

云原生 APISIX API Gateway Ingress Controller

助力网络碳中和 | 华为发布站点能源十大趋势

Geek_2d6073

华为云CDN引领网站性能全面优化

爱科技的水月

存储数据不要愁,华为云来帮你!

与时俱进的时代

企业数据存储,还得看华为云对象存储服务OBS

爱尚科技

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