Keyspace keyvalue 存储系统

程序名称:Keyspace

授权协议: AGPL

操作系统: 跨平台

开发语言: C/C++

Keyspace 介绍

Keyspace 是一家叫做 Scalien 的创业公司开发的高可靠 key-value 存储系统。比起 Redis、Tokyo Tyrant
等系统来说,Keyspace 还非常新,才上线几个月。有一篇 white paper 详细介绍了 Keyspace 的设计和架构。Keyspace
强调的技术点是高可靠性,有以下一些特点:

  • Key-value store:一个 key-value 数据存储系统,只支持一些基本操作,如:SET(key, value) 和 GET(key) 等;
  • 分布式:多台机器(nodes)同时存储数据和状态,彼此交换消息来保持数据一致,可视为一个完整的存储系统。为了更可靠,Keyspace 推荐使用奇数个 nodes,比如:3,5,7等;
  • 数据一致:所有机器上的数据都是同步更新的、不用担心得到不一致的结果,Keyspace 使用著名的 Paxos 分布式算法;
  • 冗余:所有机器(nodes)保存相同的数据,整个系统的存储能力取决于单台机器(node)的能力;
  • 容错:如果有少数 nodes 出错,比如重启、当机、断网、网络丢包等各种 fault/fail 都不影响整个系统的运行;
  • 高可靠性:容错、冗余等保证了 Keyspace 的可靠性。

架构

Keyspace 的整个架构不复杂很清晰,最核心的就是 Leslie Lamport 的 Paxos consensus
algorithm,这是分布式系统的经典的算法,具体可以看 VPSee 的这篇文章:Paxos 算法。(八卦一下,Leslie Lamport 大牛还是
LaTeX 的创建者和早期开发人员,现在在 Microsoft Research 工作)

Paxos 通过一个消息层来发消息给其他 nodes,Paxos
本身并不假设每次消息都能发送成功,因为消息可能在发送的过程中丢失、延迟、重组等。面临这些可能会出现的 fail 以及对应的容错措施都是由 Paxos
算法本身来处理的。Keyspace 是一个 master-slave 系统,如果 master node 出错、当机了怎么办?Keyspace 中的每个
node 都可以得到 master lease 并且一次可以占用5秒钟,当然可以继续占有这个 master lease 只要 node 没 fail
掉,如果 fail 的话,master lease 就会过期(超过5秒),自动释放了 master lease,这个时候另一个 node 就接过
master lease 充当起 master,Keyspace 用 PaxosLease Protocol 来释放 master
lease。PaxosLease 算法和其他 lease 算法一样对时钟很敏感,所以要正常运行 Keyspace 的话必须同步每个 node
的时钟,如可以用 Unix 上面的标准 Network Time Protocol (NTP) 来同步。为了同时支持 TCP 和 UDP
协议,Keyspace 做了一个 Message Transport 层,这样就可以用 UDP 来发小消息,用 TCP 来发包含很多数据的大消息。图中的
Paxos 层用来实现 Paxos 算法,用 Paxos 来冗余数据库的写操作,这里的 Paxos 只是用来找 consensus,一旦确定
consensus 后各个 nodes 都会被通知到 consensus 值已经找到。一旦 consensus 被确定,ReplicatedLog
层就会把写操作交给 KeyspaceDB 模块,由这个模块负责把写数据写到本地硬盘上。Keyspace 使用 Berkeley DB 的
Transactional Data Store 引擎存储数据。图中最上面的 HTTP 和 Keyspace Protocol
提供了接口给用户使用,用户可以通过这些 API 来操作 Keyspace 存储系统。

操作

Keyspace 是一个 master based 的冗余数据库,一些操作只能由 master node 来执行,如:

write 操作(SET, TEST-AND-SET, ADD, DELETE, REMOVE, PRUNE and SUBMIT)
safe read 操作(GET, LIST-KEYS, LIST-KEYVALUES)

也有一些操作可以由任意的 node 来执行,如:

get current master 操作(GET-MASTER)
dirty read 操作(DIRTY-GET, DIRTY-LIST-KEYS, DIRTY-LIST-KEYVALUES)

dirty read 操作可以从任意 node 上读取结果,但是返回的结果可能会不一致,所以称为 “dirty”。如果要修改数据库的话必须连上 master
在 master 上操作,如果只是读取数据库而且不是很在意数据一致性的话可以连上任意 node 进行 dirty read
操作。如果需要数据一致怎么办?可以层通过修改应用程序的逻辑来取得数据的一致性,比如在读之前停止所有写操作。

所有操作都可以通过 HTTP 的 GET 来执行,所以可以通过浏览器来执行这些操作。不过 HTTP 只用来测试,因为每个操作会创建一个新 TCP/HTTP
连接,系统开销太大而且没有必要。Keyspace APIs 使用 Keyspace protocol 来操作 Keyspace 系统。

安装

安装 Keyspace 的过程很简单,安装完必要软件包后下载 keyspace 源代码编译:

yum install gcc-c++ db4 db4-devel

wget http://scalien.com/releases/keyspace/keyspace-1.0.1.tgz

# tar zxvf keyspace-1.0.1.tgz
# cd keyspace-1.0.1
# make

使用

在单机上运行 Keyspace:

script/safe_keyspaced bin/keyspaced test/0/keyspace.conf test/0

# script/safe_keyspaced bin/keyspaced test/1/keyspace.conf test/1
# script/safe_keyspaced bin/keyspaced test/2/keyspace.conf test/2

然后通过 HTTP 访问 Keyspace:

curl http://localhost:8080/getmaster

0
I’m the master

curl http://localhost:8081/getmaster

0
I’m a slave

curl http://localhost:8082/getmaster

0
I’m a slave

如果想在多台机器运行需要修改每台机器的 keyspace.conf 配置文件。

介绍内容来自 http://www.vpsee.com/2009/09/keyspace-highly-available-key-value- store/

Keyspace 官网

https://github.com/scalien/keyspace

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SchemaCrawler提供一组用于增强标准JDBC Metadata的API.SchemaCrawler还包含一个命令行工具能够将数据库结构和数据以一种易读的形式输出.
ER Master 是一个用于设计ER模型图的Eclipse插件。提供的功能包括:从数据库导入关系生成ER图,导出设计图,导出DDL数据定义语句等。目前完整支持的数据库包括
Eclipse下用于画数据库ER图的插件,主要特性如下: 图形化编辑ER图 从数据库结构中导入ER图
PowerDesigner 是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner
Mogwai ERDesigner NG是一个实体关系建模工具类似于ERWin。它设计成让数据库建模变得尽可能简易并为整个开发过程提供支持,从数据库设计到模式
Power*Architect 是一个数据建模工具,主要用在数据仓库和数据集市的模型设计。
MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL
DbWrench 是一个数据库设计和同步软件,为数据库开发人员提升生产率,可轻松的创建和修改数据库。
是一个采用Python开发的使用ER图的数据库建模工具
CA公司的数据库建模工具 (非开源) ,为你提供一个易于使用的用户界面(UI)环境,简化数据库设计过程,并将许多令人疲惫的任务自动化,如创建高性能事务和数据仓库数据库。这是一款可以和PowerDesigner并驾齐驱的
Altova MapForce® 2008是您首选的数据综合和网络服务器实现工具。它可以通过映射数据源到WSDLO操作的方法,实现多种文件之间的转化,包括XML文件, 数据库文件,
一个用Java开发的可视化数据库设计工具,支持JDBC 2.0的数据库
一个图形化的数据库模型浏览工具,SchemaSpy analyzes database metadata to reverse engineer
从事软件开发多年,感觉数据库在整个软件开发过程中扮演一个不可或缺的角色。一旦一个业务项目进入立项阶段,需要支持哪些数据库平台,如何使用该种数据库平台都将成为架构师需要考虑的内容,对于一般的开发人员,
Middlegen一个免费数据库驱动(database-driven)的代码生成引擎。它基于JDBC,Velocity,Ant和XDoclet.
Ermodeller是一个用于数据建模的CASE工具。该工具支持概念建模和逻辑建模,并在最后生成特定数据库的物理模型。支持的数据库包括:MySQL、PotgreSQL、Oracle、Pointbase,对其它数据库的支持需要通过XML文件自定义
GMOD is the G eneric M odel O rganism D atabase project, a collection of open source software tools for creating and managing genome-
pgDesigner 是一个为PostgreSQL数据库设计的建模工具
Enterprise Architect是一款计算机辅助软件工程(CASE)工具,用于设计和构建软件系统、业务流程建模及更多通用的建模。
mybatis 通用 basedao,含自动生成通用 XMLMapper。 可通过此工具自动生成 Mybatis XML 文件和 dao 的 class 类