写点什么

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

  • 2009-07-15
  • 本文字数:1004 字

    阅读完需:约 3 分钟

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-07-15 21:131556
用户头像

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

关注

评论

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

预告| 2月24日不见不散!开源治理专场约定你

OpenI启智社区

人工智能 开源社区 开发者大会 开源治理 OpenI启智社区

社招前端一面必会vue面试题

bb_xiaxia1998

Vue

听说 ChatGPT 推荐了一场技术活动,就在本周六的北京?

Daocloud 道客

北京 技术活动

云原生观测性--OpenTelemetry 之实战篇

Daocloud 道客

云原生 可观测性 OpenTelemetry

滴滴前端一面常考手写面试题合集

helloworld1024fd

JavaScript

美团前端常考手写面试题总结

helloworld1024fd

JavaScript

React源码分析5-commit

goClient1992

React

react源码中的协调与调度

flyzz177

React

有哪些值得推荐的敏捷开发工具❓

没有用户名丶

混沌工程之 ChaosBlade 故障注入百宝箱

柠檬汁Code(binbin0325)

源码分析 混沌工程 故障注入 ChaosBlade Chaos

实时数仓Hologres新一代弹性计算组实例技术揭秘

阿里云大数据AI技术

大数据 实时数仓 弹性计算 企业号 2 月 PK 榜

优质的双机热备软件厂家是哪家?咨询电话多少?

行云管家

高可用 双机热备 双机热备软件

实践篇(三):如何有效评审软件架构图?

京东科技开发者

架构 后端 软件架构 企业号 2 月 PK 榜 架构评审

预告|因“AI”而“深” 第四届OpenI/O 启智开发者大会高校开源专场25日开启!

OpenI启智社区

人工智能 开源 OpenI启智社区

预告|第四届OpenI/O启智开发者大会NLP大模型论坛强势来袭!

OpenI启智社区

人工智能 NLP 大模型 开发者大会 OpenI启智社区 ChatGPT

一图读懂阿里云RDS架构与选型

NineData

数据库 阿里云 Serverless RDS arm

一台不容错过的Java单元测试代码“永动机”

京东科技开发者

Java 单元测试 京东云 京东技术

NFT链游开发实现DAPP系统落地

薇電13242772558

NFT 链游

即刻报名!飞桨黑客马拉松第四期如约而至,等你挑战

飞桨PaddlePaddle

深度学习 paddle 开源 大赛 飞桨

面试官:能用JavaScript手写一个bind函数吗

helloworld1024fd

JavaScript

别错过!4C首发直播,上届全国总冠军带你入门赛题

飞桨PaddlePaddle

计算机 飞桨 PaddlePaddle

预告| 亮点抢先看!第四届OpenI/O启智开发者大会主论坛24日启幕!

OpenI启智社区

人工智能 开发者大会 算力网络 OpenI启智社区

React源码分析7-state计算流程和优先级

goClient1992

React

在vue的v-for中,key为什么不能用index?

bb_xiaxia1998

Vue

基金行业,镭速文件传输系统方案

镭速

面试官:请实现Javascript发布-订阅模式

helloworld1024fd

JavaScript

React源码分析6-hooks源码

goClient1992

React

镇江有具有资质的等保测评机构吗?在哪里?

行云管家

等保 等级保护 等保测评 镇江

高级前端二面必会vue面试题合集

bb_xiaxia1998

Vue

Hadoop 及Spark 分布式HA运行环境搭建

京东科技开发者

大数据 hadoop spark 后端 企业号 2 月 PK 榜

火山引擎数智平台ByteHouse入围稀土掘金《Top10年度创新产品》

字节跳动数据平台

大数据 云原生 Clickhouse

通过Blackboard探索Ruby的元组空间持久化_Ruby_Sebastien Auvray_InfoQ精选文章