Sharding vs DFS

时间:2011-08-06 03:15:48

标签: nosql hdfs distributed-computing sharding distributed-filesystem

据我所知,分片(例如在MongoDB中)和分布式文件系统(例如HBase或HyperTable中的HDFS)是数据库用于横向扩展的不同机制,但是我想知道它们如何比较?

1 个答案:

答案 0 :(得分:16)

传统的分片涉及将表分成少量部分并在单独的机器上的单独数据库中运行每个部分(或“分片”)。由于大的碎片大小,这种机制可能由于热点和不平等的增长而容易出现不平衡,如Foursquare incident所证明的那样。此外,由于每个分片都在单独的计算机上运行,​​因此如果其中一台计算机出现故障,这些系统可能会遇到可用性问题。为了缓解此问题,大多数分片系统(包括MongoDB)都实现了副本组。每台机器由一台主机中的三台机器和两台从机配置替换。这样,如果计算机出现故障,则有两个剩余的副本用于提供数据。这种设计存在一些问题:首先,如果副本组中的副本出现故障,并且该组只剩下两个成员,要将复制计数恢复为三个,则这两台计算机之一上的数据需要克隆。由于整个群集中只有两台可用于重新创建副本的计算机,因此在重新复制时会对这两台计算机之一进行巨大拖动,从而导致严重的性能有问题的分片上的问题(在一个千兆链路上复制1TB需要两个小时)。第二个问题是当其中一个副本发生故障时,需要用新机器替换它。即使群集中有足够的备用容量来解决复制问题,也不能使用该备用容量来纠正这种情况。解决它的唯一方法是更换机器。从运营的角度来看,这变得非常具有挑战性,因为集群规模可以扩展到数百或数千台计算机。

Bigtable + GFS设计解决了这些问题。首先,表数据被分解为更精细的“平板电脑”。 Bigtable集群中的典型计算机通常具有500多个平板电脑。如果出现不平衡,解决它只是将少量平板电脑从一台机器迁移到另一台机器的简单问题。如果TabletServer出现故障,由于数据集被分解并以如此精细的粒度进行复制,因此可能有数百台计算机参与恢复过程,从而分配恢复负担并加快恢复时间。此外,由于数据不依赖于特定的一台或多台计算机,因此群集中所有计算机上的备用容量都可以应用于故障。由于整个群集中的任何备用容量都可用于纠正复制不平衡,因此无需更换机器的操作要求。

  • Doug Judd Hypertable公司首席执行官。