对Pinterest进行分片 - 究竟是如何完成的

时间:2012-10-25 21:23:28

标签: mysql scalability sharding

我想了解Pinterest如何根据this video进行分片,但似乎无法完全理解。我很感兴趣,因为我想在我的应用程序中应用相同的策略,并在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的数据容量变得非常大而且我想添加更多机器增加容量?

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

2 个答案:

答案 0 :(得分:1)

Tumblr有一个名为Jetpants的开源库,可以处理它们的分片需求。您可以看看他们如何处理所有这些事情。据我所知,Pinterest尚未发布他们的特定实现。

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

答案 1 :(得分:1)

pinterest engineering blog descirbe it

“添加更多容量

在我们的系统中,有三种主要方法可以添加更多容量。最简单的是升级机器(更多的空间,更快的硬盘,更多的RAM,无论你的瓶颈是什么)。

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

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