Keyspace是一家叫做Scalie的创业公司开发的高可靠key-value存储系统。比起Redis、TokyoTyrat等系统来说,Keyspace还非常新,才上线几个月。有一篇whitepaper详细介绍了Keyspace的设计和架构。Keyspace强调的技术点是高可靠性,有以下一些特点:
Key-valuestore:一个key-value数据存储系统,只支持一些基本操作,如:SET(key,value)和GET(key)等;分布式:多台机器(odes)同时存储数据和状态,彼此交换消息来保持数据一致,可视为一个完整的存储系统。为了更可靠,Keyspace推荐使用奇数个odes,比如:3,5,7等;数据一致:所有机器上的数据都是同步更新的、不用担心得到不一致的结果,Keyspace使用著名的Paxos分布式算法;冗余:所有机器(odes)保存相同的数据,整个系统的存储能力取决于单台机器(ode)的能力;容错:如果有少数odes出错,比如重启、当机、断网、网络丢包等各种fault/fail都不影响整个系统的运行;高可靠性:容错、冗余等保证了Keyspace的可靠性。架构
Keyspace的整个架构不复杂很清晰,最核心的就是LeslieLamport的Paxoscosesusalgorithm,这是分布式系统的经典的算法,具体可以看VPSee的这篇文章:Paxos算法。(八卦一下,LeslieLamport大牛还是LaTeX的创建者和早期开发人员,现在在MicrosoftResearch工作)
Paxos通过一个消息层来发消息给其他odes,Paxos本身并不假设每次消息都能发送成功,因为消息可能在发送的过程中丢失、延迟、重组等。面临这些可能会出现的fail以及对应的容错措施都是由Paxos算法本身来处理的。Keyspace是一个master-slave系统,如果masterode出错、当机了怎么办?Keyspace中的每个ode都可以得到masterlease并且一次可以占用5秒钟,当然可以继续占有这个masterlease只要ode没fail掉,如果fail的话,masterlease就会过期(超过5秒),自动释放了masterlease,这个时候另一个ode就接过masterlease充当起master,Keyspace用PaxosLeaseProtocol来释放masterlease。PaxosLease算法和其他lease算法一样对时钟很敏感,所以要正常运行Keyspace的话必须同步每个ode的时钟,如可以用Uix上面的标准NetworkTimeProtocol(NTP)来同步。为了同时支持TCP和UDP协议,Keyspace做了一个MessageTrasport层,这样就可以用UDP来发小消息,用TCP来发包含很多数据的大消息。图中的Paxos层用来实现Paxos算法,用Paxos来冗余数据库的写操作,这里的Paxos只是用来找cosesus,一旦确定cosesus后各个odes都会被通知到cosesus值已经找到。一旦cosesus被确定,ReplicatedLog层就会把写操作交给KeyspaceDB模块,由这个模块负责把写数据写到本地硬盘上。Keyspace使用BerkeleyDB的TrasactioalDataStore引擎存储数据。图中最上面的HTTP和KeyspaceProtocol提供了接口给用户使用,用户可以通过这些API来操作Keyspace存储系统。
操作Keyspace是一个masterbased的冗余数据库,一些操作只能由masterode来执行,如:
write操作(SET,TEST-AND-SET,ADD,DELETE,REMOVE,PRUNEadSUBMIT)saferead操作(GET,LIST-KEYS,LIST-KEYVALUES)
也有一些操作可以由任意的ode来执行,如:
getcurretmaster操作(GET-MASTER)dirtyread操作(DIRTY-GET,DIRTY-LIST-KEYS,DIRTY-LIST-KEYVALUES)
dirtyread操作可以从任意ode上读取结果,但是返回的结果可能会不一致,所以称为“dirty”。如果要修改数据库的话必须连上master在master上操作,如果只是读取数据库而且不是很在意数据一致性的话可以连上任意ode进行dirtyread操作。如果需要数据一致怎么办?可以层通过修改应用程序的逻辑来取得数据的一致性,比如在读之前停止所有写操作。
所有操作都可以通过HTTP的GET来执行,所以可以通过浏览器来执行这些操作。不过HTTP只用来测试,因为每个操作会创建一个新TCP/HTTP连接,系统开销太大而且没有必要。KeyspaceAPIs使用Keyspaceprotocol来操作Keyspace系统。
安装安装Keyspace的过程很简单,安装完必要软件包后下载keyspace源代码编译:
#yumistallgcc-c++db4db4-devel
#wgethttps://scalie.com/releases/keyspace/keyspace-1.0.1.tgz#tarzxvfkeyspace-1.0.1.tgz#cdkeyspace-1.0.1#make
使用在单机上运行Keyspace:
#script/safe_keyspacedbi/keyspacedtest/0/keyspace.coftest/0#script/safe_keyspacedbi/keyspacedtest/1/keyspace.coftest/1#script/safe_keyspacedbi/keyspacedtest/2/keyspace.coftest/2
然后通过HTTP访问Keyspace:
#curlhttps://localhost:8080/getmaster0I’mthemaster
#curlhttps://localhost:8081/getmaster0I’maslave
#curlhttps://localhost:8082/getmaster0I’maslave
如果想在多台机器运行需要修改每台机器的keyspace.cof配置文件。
介绍内容来自https://www.vpsee.com/2009/09/keyspace-highly-available-key-value-store/











评论