Dynomite: NetFlix对dynamo的开源通用实现

Dynomite是NetFlix对亚马逊分布式存储引擎Dynamo的一个开源通用实现,它不仅支持基于内存的K/V数据库,还支持持久化的Mysql、BerkeleyDb、LevelDb等数据库,并具有简单、高效、支持跨数据中心的数据复制等优点。Dynomite的最终目标是提供数据库存储引擎不能提供的简单、高效、跨数据中心的数据复制功能。目前,Dynomite已经实现了对Redis和Memcached的支持。

Dynomite的拓扑结构如下图:

从图中可以看出每个Dynomite集群包括多个数据中心(dc),每个数据中心都有一组机架,每个机架包括多个节点,每个机架都包括完整的数据集,该数据集被划分在同一机架的多个节点上。因此,多个机架架构能够提供更高的可用性的数据服务。机架上的每个节点都有个一个唯一的标示,该标示用来识别节点属于哪个数据集。每个Dynomite节点都有一个Dynomite process组件用来协同数据服务器提供服务,该组件具有代理、路由、协调等作用。

Dynomite支持多数据中心的复制,当发送写操作时,客户端能够连接到Dynomite集群的任意一个节点。如果Dynomite节点恰好接收的数据是属于本节点的数据时,该数据首先会被写到本地数据库服务中,并且异步的复制到所有数据中心的集群中的其他机架中。如果节点接收到不属于本节点的数据,Dynomite将会以一个协调者的角色发送写的操作到相同机架上应该存储数据的节点上,并复制写操作到其他机架和数据中心的相应节点上。下图所示的是Dynamo客户端正将数据往一个集群上写,该数据属于节点a2、b2、c2、d2。该请求发送给了a1节点,a1节点就充当协调员的角色,并将请求转发给节点a2、b2、c2、d2。

Dynomite还具有一个常规、一致性的哈希环,但是复制是不对称的。Dyno客户端的本地写使用了基于令牌的负载均衡,Dyno客户端在相同区域知道Dynomite的集群拓扑结构,因此,Dynomite能够使用一致性哈希直接将数据写到一个具体的节点中。

一致性是Dynomite的一个重要特性,但是在目前版本中,Dynomite开发团队把高可用性放在了首位,把Dynomite的一致性放到了下一个版本中。如果开发者的使用场景是存储高频率的时间序列数据的话,Dynomite完全能够满足需求。为了降低数据复制的延迟, Dynomite开发团队将进行代码路径优化和增强复制策略来降低数据复制的延迟。Dynomite开发团队还进行了线性试验,结果充分证明了Dynomite完全能够满足高效、跨数据中心的数据复制的性能要求。Dynomite遵循Apache License V2.0开源协议发布,其代码托管在GitHub上,更多关于Dynomite的信息请查看NetFlix技术博客对Dynomite的介绍。

Dynomite是Dynamo的一个用于K/V数据库的实现,Dynamo是亚马逊的一个分布式K/V存储系统,它具备去中心化、高可用性、高扩展性的特点。非常著名的NoSql数据库Cassandra就是按照Dynamo的P2P架构,同时融合了BigTable的数据模型及存储算法实现的。另外,还有一个数据库也叫做Dynomite,它由于受到Dynamo设计思想的启发,并采用 ErLang 语言开发的分布式K/V数据库,请读者不要将二者混淆.

感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Dynomite: NetFlix对dynamo的开源通用实现)