解读NoSQL技术代表之作Dynamo

NoSQL在过去的一年里,逐渐已经成为了家喻户晓的东西,我()自从去年开始人人网的NoSQL系统的研发以来,一直看NoSQL越来越热,越来越引来大家的围观 。受InfoQ中文站编辑之托,特作此文,一来作为过去一年的总结,二来希望对NoSQL系统在国内的发展和推广尽绵薄之力 。
NoSQL背后的两种模式
NoSQL其实并不是什么妖魔鬼怪,相反,NoSQL的真谛其实应该是Not Only SQL,其产生背景是在数据量和访问量逐渐增大的情况下下,人为地去添加机器或者切分数据到不同的机器,变得越来越困难,人力成本越来越高,于是便开始有了这样的项目,它们的本意是提高数据存储的自动化程度,减少人为干预的时间,让负载更加均匀等 。在国际上,真正的代表之作有来自的和 的,他们分别使用了不同的基本原理 。
这是历史最久的一种模型,典型的代表是 。Map表示映射,表示化简 。通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性(Map);每个节点会周期性地把完成的工作和状态的更新报告回来() 。大多数分布式运算可以抽象为操作 。Map是把输入Input分解成中间的Key/Value对,把Key/Value合成最终输出 。这两个函数由程序员提供给系统,下层设施把Map和操作分布在集群上运行 。
这里我把专门归纳成为了一种,其原因是它与有很大的不同,自成一派 。先说一下历史,于2006年推出了自己的云存储服务S3,2007年其CTO公布了S3的设计方案,从此江湖中就不再太平了,开源项目一个个如雨后春笋般地出现了 。比较常见的有开发的(如果没有记错,在去年浏览他们项目网页的时候,上面还写着他们之中的一个开发人员是的设计人员,现在风头紧,去掉了),还有的,而在国内话,有豆瓣网的,人人网的等等 。这里我主要讨论的也是的方案细节 。
【解读NoSQL技术代表之作Dynamo】入门基础
的意思是发电机,顾名思义,这一整套的方案都像发电机一样,源源不断地提供服务,永不间断 。以下内容看上去有点教条,但基本上如果你要理解原理,这每一项都是必须知道的 。
CAP原则
先来看历史,Eric A. 教授,公司的创始人,也是大学的计算机教授,是雅虎搜索现在的台端技术核心支持 。最主要的是,他们 (公司)在最早的时间里,开始研究分布计算 。CAP原则的提出,可以追溯到2000年的时候(可以想象有多么早!),教授在一次谈话中,基于他运作以及在伯克利大学里的经验,总结出了CAP原则(文末参考资料中有其演讲资料链接) 。图一是来自教授当年所画的图:
图一:CAP原则当年的PPT
(一致性):即数据一致性,简单的说,就是数据复制到了N台机器,如果有更新,要N机器的数据是一起更新的 。
(可用性):好的响应性能,此项意思主要就是速度 。
(分区容错性):这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性 。

解读NoSQL技术代表之作Dynamo

文章插图
定理:任何分布式系统只可同时满足二点,没法三者兼顾 。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍 。
DHT——分布式哈希表
DHT( Hash Table,分布式哈希表),它是一种分布式存储寻址方法的统称 。就像普通的哈希表,里面保存了key与value的对应关系,一般都能根据一个key去对应到相应的节点,从而得到相对应的value 。
这里随带一提,在DHT算法中,一致性哈希作为第一个实用的算法,在大多数系统中都使用了它 。一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由 。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中 。至于一致性哈希的细节就不在这里详细说了,要指明的一点是,在的数据分区方式之后,其实内部已然是一个对一致性哈希的改造了 。