3

我想了解 Pinterest 如何根据此视频进行分片,但似乎无法完全了解如何进行。我很感兴趣,因为我想将相同的策略应用于我的应用程序并在 Amazon RDS 之上构建自己的分片。

据我了解:

  • 他们决定创建 4096 个虚拟分片
  • 多个分片可以映射到一个或多个物理服务器。因此,例如,您可以在刚开始时将所有分片映射到一台服务器

如果我假设以下映射表:

虚拟分片 1 -> 127.0.0.1

虚拟分片 2 -> 127.0.0.1

……

看看他们是如何构建他们的唯一 ID(Shard ID + Type + Local Auto Increment)的,如果我决定添加另一台服务器 12.0.0.2,因为 127.0.0.1 的数据容量越来越大,我想添加更多机器到增加容量?

如何将分片准确映射到新服务器?我知道数据不会根据讲座移动,所以他们怎么可能没有热点。我真的无法理解它是如何完成的,有人可以给我一个好的一步一步的解释吗?谢谢

4

2 回答 2

1

Tumblr 有一个名为Jetpants的开源库来处理他们的分片需求。你可以看看他们是如何处理所有这些事情的。据我所知,Pinterest 还没有发布他们的具体实现。

不过,正如我在评论中指出的那样,在大多数情况下,“我应该如何分片”的答案是“不要分片,几乎所有网站都有更好的选择”。

于 2012-10-25T21:27:01.223 回答
1

pinterest 工程博客描述它

“增加更多容量

在我们的系统中,可以通过三种主要方式来增加容量。最简单的方法是升级机器(更多空间、更快的硬盘驱动器、更多 RAM,无论您的瓶颈是什么)。

增加更多容量的下一个方法是开辟新的范围。最初,即使我们的分片 ID 是 16 位(总共 64k 个分片),我们也只创建了 4,096 个分片。只能在这些前 4k 分片中创建新对象。在某个时候,我们决定创建具有 4,096 到 8,191 分片的新 MySQL 服务器并开始填充这些分片。

我们增加容量的最后一种方法是将一些分片移动到新机器上。如果我们想为 MySQL001A(具有 0 到 511 的分片)添加更多容量,我们创建一个具有下一个最大名称(例如 MySQL009A 和 B)的新主-主对,并从 MySQL001A 开始复制。"

于 2016-01-26T06:16:08.490 回答