写点什么

通过 Blackboard 探索 Ruby 的元组空间持久化

2009 年 7 月 15 日

Ruby 因为其 1.8 版本的用户空间线程模型而饱受批评。 Luc Castera 在 RubyNation 会议上给出了通过 Ruby 和元组空间进行并行编程的演讲。在介绍了目前诸多应用(如 Ruby 1.8、Ruby 1.9、JRuby 和 Erlang 等)所实现的不同的线程模型之后,Luc 介绍了 Ruby 的多进程模型(图片和引文均来自于该演讲):

  • 优点:
    • 不再需要共享内存
    • 可利用多 CPU 来提升性能
    • 在调用阻塞的系统调用之时不会阻塞全部的线程
    • 可伸缩性
    • 容错性
  • 缺点:
    • 进程的创建、执行和清理代价都很大
    • 需要使用大量内存(将 Ruby 虚拟机载入每个进程之中)
    • 需要一种方式来实现进程间通信

实现进程间通信有多种选择:数据库(例如在 Mongrel 或者 Thin 等应用服务器集群中使用)、RabbitMQ 等队列( Nantie 的解决方案)、DRB、ActiveMQ,或者元组空间。
Luc 比较了两个元组空间的实现: Rinda 和他自己开发的 Blackboard。元组空间提供了一个元组的容器,可以实现并行访问。元组一般提供三个访问原语:write(将一个元组写入元组空间),read(从元组空间中读取一个元组),take(从元组空间中读取一个元组并将其移除)。

Linda 是一个协调模型,由 David Gelernter 和 Nicholas Carriero 提出,用于解决全局对象协调的问题。
Rinda 是 Linda 的 Ruby 实现,而且是一个内置程序库。一个 Rinda 元组可能看起来是这个样子的:t1 = [:add, 5, 9],客户端可能会将其解释为一个将两个数相加的任务。

Rinda 最大的缺陷是其不支持持久化,这样一旦程序停止或崩溃的话,所有在元组空间中的元组则会丢失。
这便是 Luc 开发 Blackboard 的原动力。Blackboard 是一个基于 Key-Value 数据库 Redis 的一个元组空间实现,这样它便拥有了持久化的能力。

[Redis] 和 memcached 很相似,但是数据集不易失。取值可以为字符串,就如同 memcached 一样,但是还支持使用原子操作来 push/pop 诸如列表和集合之类的元素

该 API 的使用范例如下:

复制代码
ts = Blackboard::TupleSpace.new
ts.write [:calculator, :add, 1, 2]
ts.take [:calculator, :add, nil, nil]

基准测试显示了 Rinda 和 Blackboard 的区别(摘自该演讲):

Rinda Blackboard Write (1000) 0.042749 0.253068 Take (500) 0.082744 15.844250 Read (500) 0.020098 20.098478 当前的实现只是第一步,Luc 计划弃用 Redis 而实现一个 Erlang 的 Blackboard 定制实现,这样就可以方便地使用 Ruby 这样的第三方语言进行调用。

查看英文原文: Exploring Tuple Spaces Persistence In Ruby With Blackboard

2009 年 7 月 15 日 21:13904
用户头像

发布了 80 篇内容, 共 15.5 次阅读, 收获喜欢 3 次。

关注

评论

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

12.4大数据计算框架MapReduce-架构

张荣召

12.3大数据计算框架MapReduce-编程框架

张荣召

从物理空间到数字世界,数字孪生打造智能化基础设施

华为云开发者社区

IoT 智能 数字

12.2分布式文件系统

张荣召

以太公约系统开发详情丨以太公约源码案例

系统开发咨询1357O98O718

以太公约系统开发介绍

架构探索:事务处理三

carol

阿里P8大佬带你全面了解—MySQL锁:03.InnoDB行锁

比伯

Java MySQL 编程 架构 程序人生

shell脚本的使用该熟练起来了,你说呢?(篇四)

良知犹存

shell脚本编写

学习笔记-week12

张荣召

话题讨论 | 作为程序员你的业余爱好是什么呢?

小天同学

话题讨论 业余爱好

第五周作业第1题

走走,停停……

架构探索:事务处理总结

carol

12.5大数据集群资源管理系统Yarn

张荣召

架构之书:传道与《设计模式》

lidaobing

架构 设计模式

区块链版权应用开发,区块链版权保护解决方案

135深圳3055源中瑞8032

年轻程序员不讲武德,做表竟然拖拉拽

雯雯写代码

程序员

API研发效能提升实战

xiuxiuing

研发效能 API研发

12.1大数据技术发展史

张荣召

Java中CAS原理分析(volatile和synchronized浅析)

叫练

volatile 多线程 synchronized CAS JUC

Eclipse Vert.x 4发布

dinstone

Java Reactive Vert.x

排查指南 | 关于 mPaaS-iOS 小程序打不开问题的解决方案

蚂蚁集团移动开发平台 mPaaS

小程序 mPaaS

架构探索:事务处理二

carol

区块链技术在旅游业中的应用探索

CECBC区块链专委会

旅游

DolphinDB与Aliyun HybridDB for PostgreSQL在金融数据集上的比较

DolphinDB

postgresql 阿里云 时序数据库 DolphinDB 数据库开发

架构师训练营第 1 期 第 12 周作业

李循律

极客大学架构师训练营

区块链电子合同平台开发,区块链电子合同应用

135深圳3055源中瑞8032

GaussDB(DWS)磁盘维护:vacuum full执行慢怎么办?

华为云开发者社区

数据库 数据 DWS

双十二好物推荐:「mPaaS 安全加固」带你看看别人家的应用

蚂蚁集团移动开发平台 mPaaS

安全 mPaaS 应用

无可限量的数字经济

CECBC区块链专委会

数字经济

英特尔唐炯:36.4% PC同比增长,预示了2021是个好年

intel001

智慧警务大数据决策指挥平台开发,智慧微警务系统搭建

135深圳3055源中瑞8032

通过Blackboard探索Ruby的元组空间持久化-InfoQ