2010-07-28 13:13:05
来 源
中国存储网
存储资讯
首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决呢?传统的方法是用数据库。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。 为你揭开Dynamo分布

Dynamo 是个什么东东呢?他是 Amazon 公司的一个分布式引擎。那么这个什么引擎又是什么?

首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决呢?传统的方法是用。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。

好,现在假设大家都很喜欢你的网站,访问的人越来越多。一个数据库已经处理不过来了。于是你安装了3台数据库主机,把用户分成了三类(男人,女人,IT人;总是有某种方法把用户分成数目大致差不多的几个部分吧)。

每次访问的时候,先看用户属于哪一类,然后直接访问存储那类用户数据的数据库。于是处理能力增加了三倍。这个时候你已经实现了一个分布式的存储引擎,Dynamo分布式存储引擎就是一个类似的东西。只是它的可靠性,可用性等方面更好一点而已。下面我们看看那个简单的分布式有什么不方便的地方,而Dynamo是如何解决的。

简单分布式系统实现可能存在的问题

先列举一下简单的分布式系统可能存在的问题吧:

1 很难扩容:如果现在业务发展迅速,3台主机撑不住了,需要加到5台主机,那要如何处理呢?首先要更改分类方法,把用户分成5类,然后重新迁移已经存在的数据。你要在网站上贴个条子,“系统维护中”,然后开始伟大的迁移工程,等到终于迁移完成,发现其实3台也不用了,用户都走光了。

2 数据可靠性无法保证:有一天,发现有一台数据库的硬盘坏了,这下麻烦就来了,本来网站就不赚钱,没用什么高档机器,只有一个定期的增量备份而已。经过一天复杂的恢复工作,你还要对部分用户说,麻烦你们把做过的事情再做一遍啊。

3 单点问题:负责把用户分类,然后决定使用哪个数据服务器的那台主机是网站的命根子啊,它如果宕机,所有的数据都不能访问了,它如果满负荷了,增加数据服务器也不会对整体性能有帮助。我好像看到一台贴满着驱邪保平安符咒的pc server。

这几个问题,看似不大,解决起来还真的不容易呢。尤其是想到自己的网站也许有一天也会和google有一样多的用户(可能因为你是天才或者google快倒闭了)。现在我们看看 Dynnamo 是怎么解决的吧。

Dynamo分布式存储引擎虚节点思想解决扩容问题

这个问题实际上是数据分布方式的问题(怎么分组)。最简单最容易想到的就是根据资源数目对数据进行哈希分布,比如算出一个哈希值,然后对资源数取模。这种简单处理的结果就是当资源数变化的时候,每个数据重新取模后,其分布方式都可能变化,从而需要迁移大量的数据。

举个简单的例子来说明一下,假设我的数据是自然数(1-20),资源现在是三台主机(A,B,C),采用取模分配方式,那么分配后A主机的数据为(1,4,7,10,13,16,19),B为(2,5,8,11,14,17,20) C(3,6,9,12,15,18) 现在增加一台主机D,重新分布后的结果是A(1,5,9,13,17) B(2,6,10,14,18) C(3,7,11,15,19) D(4,8,12,15,20) 。

可以看到,有大量的数据需要从一台主机迁移到另外一台主机。这个迁移过程是很消耗性能的。需要找到一种方式来尽可能减少对现存数据的影响(没有影响当然也不可能,那说明新添加的主机没有数据)。

Dynamo 采用的是 consistent hashing 来解决这个问题的。那么我们先来了解一下什么是consistent hashing。先想象一个圆,或者你自己的手表表面,把它看成是一个首尾相接的数轴,现在我们的数据,自然数,已经分布到这个圆上了,我们可以把我们的资源采用某种方式,随机的分布到这个圆上(图1-1)。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。