2012-10-25 18 views
2

我想了解Pinterest是如何根據this video進行分片的,但似乎無法完全理解。我很感興趣,因爲我想將相同的策略應用於我的應用程序,並在Amazon RDS之上構建分片。在Pinterest上分拆 - 如何完成

從我的理解:

  • 他們決定創建虛擬4096個碎片
  • 幾個碎片可以被映射到一個或多個物理服務器。因此,例如,可以將所有碎片映射到一臺服務器,當你剛剛起步的

如果我假設如下映射表:

虛擬碎片1 - > 127.0.0.1

虛擬碎片2 - > 127.0.0.1

....

看着他們如何建立自己獨特的ID(碎片ID +類型+本地自動遞增),如果我決定增加另一個服務器12.0.0.2,因爲數據卡帕奇ty的127.0.0.1變得相當大,我想增加更多的機器來增加容量?

我該如何精確地將碎片映射到新服務器?我知道數據不會根據講座移動,所以他們怎麼能沒有熱點。我真的不明白它是如何完成的,有人能給我一個好的一步一步的解釋嗎?謝謝

+0

你真的需要分片嗎?這是一個非常罕見的網站,需要這個 - 在大多數情況下,有更好的方法 - 擴大規模,只讀副本,更好的緩存等。 – ceejayoz

回答

1

Tumblr有一個名爲Jetpants的開源庫,可以處理他們的分片需求。你可以看看他們如何處理所有這些事情。據我所知,Pinterest尚未公佈其具體實施。

正如我在我的評論中指出的那樣,在大多數情況下,「我該如何分片」的答案是「不要碎片,幾乎所有的網站都有更好的選擇」。

+0

我只想要一個解決方案,噸得到的一點問自己,爲什麼我還沒有想過這個問題之前 –

+0

考慮這個:http://37signals.com/svn/posts/1509-mr-moore-gets-to-punt-on-sharding HTTP://37signals的。COM/SVN /職位/ 3089 - 三年前,後-MR-穆爾 - 是 - 仍然讓-US-平底船上的數據庫分片 – ceejayoz

0

pinterest engineering blog descirbe it

「增加更多的容量

在我們的系統中,有三種主要方式來添加更多的容量。最簡單的就是提升機(更多的空間,更快的硬盤,更多的內存,無論你的瓶頸是)

增加更多容量的下一個方法是打開新的範圍,即使我們的碎片ID是16位(總共64k的碎片),我們只創建了4,096個碎片。在這些前4k的碎片中,在某些時候,我們決定創建帶有碎片4,0的新MySQL服務器96至8,191,並開始填補這些。

我們增加容量的最終方法是將一些碎片到新機器。如果我們想要更多的容量增加MySQL001A(其中有碎片0到511),我們創建了一個新的主 - 主對下一個最大的名稱(說MySQL009A和B),並開始從MySQL001A複製。 「