7

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

4

1 回答 1

17

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

Bigtable+GFS 的设计解决了这些问题。首先,表格数据被分解成更细粒度的“片剂”。Bigtable 集群中的一台典型机器通常有 500 多个平板电脑。如果发生不平衡,解决它只是将少量平板电脑从一台机器迁移到另一台机器的简单问题。如果 TabletServer 出现故障,由于数据集被分解并以如此精细的粒度进行复制,可能有数百台机器参与恢复过程,从而分散了恢复负担并加快了恢复时间。此外,由于数据不绑定到特定的机器或机器,集群中所有机器上的备用容量都可以应用于故障。

  • Doug Judd Hypertable Inc. 首席执行官
于 2011-08-06T06:17:26.223 回答