写点什么

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

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

关注

评论

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

亿级流量峰值没在怕,“缓存”技术来减压!

博文视点Broadview

Linux的进程pid编号极限

程序员架构进阶

Linux 进程

架构师训练营 - 第 13周课后作业(1 期)

Pudding

架构训练营 - 第 13 周课后作业 - 学习总结

Pudding

这些常用ETL任务调度框架组件,你都知道几个?

敏捷调度TASKCTL

大数据 kettle 海豚调度 调度引擎 调度式分布

Vue 3 组件开发:搭建基于SpreadJS的表格编辑系统(环境搭建)

葡萄城技术团队

Vue SpreadJS vite

全网最全原理讲解!如何试出一个Android开发者真正的水平?已开源

欢喜学安卓

android 程序员 面试 移动开发

滴普技术荟-云原生基座OpenKube开放容器实践(一):如何理解Linux network namespace ?

Linux

三年JAVA开发经验,字节四面成功拿下2-2Offer,入职就是30K16薪

Java架构之路

Java 程序员 架构 面试 编程语言

测开之函数进阶· 第7篇《装饰器装饰类,通用装饰器,有啥区别呢?》

清菡软件测试

测试

架构师训练营 - 大作业二

Pudding

架构师训练营 - 大作业一

Pudding

分布式身份:重新定义你的“身份”管理

华为云开发者联盟

区块链 数据 隐私保护 分布式身份标识

Java并发编程:AQS的公平性

李尚智

Java Java 分布式 java 并发

从根上理解高性能、高并发(三):深入操作系统,彻底理解I/O多路复用

JackJiang

网络编程 高并发 高性能 即时通讯

Appium的安装及简单的使用介绍

行者AI

人工智能

滴普技术荟-云原生基座OpenKube开放容器实践(二):理解linux虚拟网络设备veth

Linux

抽象照进现实

型火🔥

抽象 视觉化

架构训练营 - 第12周课后作业 - 学习总结

Pudding

万字长文聊缓存(下)- 应用级缓存

Silently9527

缓存 缓存击穿 Caffeine 缓存架构

花了19998买的学习教程!2021年Android技术下半场在哪?震撼来袭免费下载!

欢喜学安卓

android 程序员 面试 移动开发

anyRTC 2020年12月SDK更新

anyRTC开发者

uni-app android 音视频 WebRTC sdk

2020 — iOS 面试败北感悟

iOSer

ios 面试 iOS Document 底层知识

计算机专业必看!难道Android真的凉了?大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

入职阿里!全靠刷明白了这份Java面试合集(分布式+Dubbo+线程+Redis+数据库+JVM+并发)

Java架构之路

Java 程序员 架构 面试 编程语言

小品阅读所带来乐趣

叶小鍵

案例展示自定义C函数的实现过程

华为云开发者联盟

数据库 数据 C语言 字符串

如果腾讯、阿里是弱生态,那么谁是强生态?

ToB行业头条

IT2.0:中台构建还应从企业业务实际出发

华为云开发者联盟

区块链 分布式 安全 数据 身份安全

深圳区块链交易所开发、数字货币交易平台开发

W13902449729

深圳区块链交易所开发 数字货币交易平台开发

同事临走时,给了我这份多线程and高并发(面试题+思维导图),借此我含泪拿下了阿里offer

Java架构之路

Java 程序员 架构 面试 编程语言

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