10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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

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

关注

评论

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

Python爬虫抢购某宝秒杀商品

弑着去忘记う

后端

阿里巴巴2022最新Java架构师进阶宝典!助力程序员金九银十面试跳槽涨薪

程序员小毕

Java 程序员 架构 面试 算法

基于ModelArts的动漫头像自动生成丨【华为云至简致远】

科技云未来

华为云ModelArts

字节算法大神手写算法笔记,已连续多次霸榜 GitHub Trending 首页

冉然学Java

GitHub 算法 Java 分布式 字节

使用华为HECS云服务器打造Telegraf+Influxdb+Grafana 监控系统【华为云至简致远】

科技云未来

Grafana Influxdb 系统管理 开源监控系统 提高效率

web前端面授培训课程

小谷哥

安全狗《云原生安全威胁分析报告》首次提出双检测模型

极客天地

如何在 UE4 中制作一扇自动开启的大门

HelloWorld杰少

8月月更

使用域名注册服务 Domains配置域名【华为云至简致远】

科技云未来

域名配置 端口映射

Mysql重启后innodb和myisam插入的主键id变化总结

知识浅谈

8月月更

tinymce 如何实现动态国际化

Five

插件开发 tinymce 富文本编辑器 8月月更

Webpack5新特性:使用 Assets Module 处理图片和字体资源

昆吾kw

前端 前端工程化 webpack

大数据培训学习开发技术费用

小谷哥

浅谈程序员的职业操守

阿里技术

大型连锁百货运维审计用什么软件好?有哪些功能?

行云管家

IT运维 运维审计 运维软件 百货

树莓派 USB摄像头 实现网络监控( MJPG-Streamer)

Five

树莓派 网络监控 #web 8月月更

通过Gitea实现内外网repo管理

吴脑的键客

git

拿来即用!Get计算机视觉核心知识,看这本书就够了!

博文视点Broadview

超多精美礼品等你来拿!2022年中国混沌工程调查启动

混沌工程实验室

混沌工程

java培训机构与自学的优缺点有什么

小谷哥

Tinymce plugins [Tinymce扩展插件集合]

Five

插件开发 tinymce 富文本编辑器 8月月更

多图预警!华为 ECS 与 阿里云 ECS 对比实战【华为云至简致远】

科技云未来

华为云 虚拟私有云VPC ECS

leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)

okokabcd

数组 LeetCode 数据结构与算法

什么是研发效能的「黄金三角」?如何助力企业提升效能?

万事ONES

源码阅读其实很简单!阿里业务架构师手写JDK源码笔记(2022版)真香

Java永远的神

Java 程序员 面试 程序人生 jdk源码

TiFlash 计算层概览

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

Android技术分享| 一对一音视频呼叫邀请开发流程(一)

anyRTC开发者

android 音视频 移动开发 视频通话 呼叫邀请

利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】

科技云未来

nginx securecrt RTMP SSH工具

易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元

易观分析

B2C 网络零售

SpringBoot如何优雅地进行响应数据封装、异常处理?

程序员小毕

Java 源码 程序员 面试 spring-boot

上海web前端培训课程

小谷哥

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