nuclear(一種網路數據存儲系統)

nuclear(一種網路數據存儲系統)

本詞條是多義詞,共3個義項
更多義項 ▼ 收起列表 ▲

Nuclear存儲系統,是中國最大的SNS網站人人網下屬UGC團隊在遇到海量的UGC數據存儲需求情況下,開發的在高性能、高可靠、可擴展方面有著優良表現的海量數據存儲系統。

它參考了dynamo設計文檔,並且分析了現存開源no-sql系統的優劣,完整分析了Cassandra、Voldemort代碼的基礎之上,在UGC小組的努力下,加入了自動平衡機器負載,簡單切換底層引擎等特色而適用的功能,還有相關的附屬功能,可以使一個系統從普通的DB輕易將數據移到nuclear集群中來。

基本介紹

  • 中文名:Nuclear存儲系統
  • 外文名:Nuclear
  • 所屬機構:人人網下屬UGC團隊
  • 參考:dynamo設計文檔,開源no-sql系統
分區,節點變更,路由,特性,高可拓展,高可靠性,高性能,

分區

Nuclear是一個分散式的Key-Value存儲系統,那么key對應的數據分布在什麼節點上,需要遵守一定的規則。熟悉MemecachedClient的同學一定清楚一致性Hash的套用,沒錯,HashRing就是我們的不二選擇。在Nuclear中,數據分布在0~2的HashRing上,Nuclear集群初始化的時候,根據節點數均分整個Hash Ring。
在N=3時,A,B,C三個節點的配置就是系統需要的最少節點了。Nuclear中,順時針的開始值和結束值確定一個分區管理的數據範圍,同時規定分區的範圍左開右閉。因此,如上圖,我們記錄A,B,C分別管理的分區範圍是:
A {[c,a],[b, c],[a,b]}
B {[a,b],[c,a],[b,c]}
C {[b,c],[a,b],[c,a]}
可以看出,A處理管理自己的分區數據外,還會把自己管理的數據順時針往前複製到2(N-1)個節點中。

節點變更

Nuclear增加節點時需要制定目標節點的名稱,即增加的節點是用來分擔目標節點的負載的。這點不同於Dynamo的分區策略,節點增加的時候會均衡的從現有的節點竊取分區,Nuclear中增加的節點只會影響到鄰近的三個節點。
記錄N,A,B,C管理的分區如下:
N {[c,n],[b,c],[a,b]}
A {[n,a],[c,n],[b,c]}
B {[a,b],[n,a],[c,n]}
C {[b,c],[a,b],[n,a]}
Nuclear的分區管理模組將自動的計算出需要同步到N上的數據:
A [a,b] => N
B [b,c] => N
C [c,n] => N
不難明白,其實就是把A,B,C不再需要的數據挪給新的節點了。刪、替換節點原理大同小異,不再冗述。

路由

Nuclear提供伺服器端路由策略,Client的請求隨機落在Node節點上,由接收到請求的節點處理後續的邏輯。相對於Client端路由來說,優點是Client無需知道Nuclear集群元數據,易於維護;缺點是會造成一定程度的延時,不過我們的測試結果顯示延時在可接受範圍之內。
兩個設計上的Tips貢獻給大家:
1. 萬事皆異步
我們在編碼的過程中走了一些彎路,同步的操作在高並發的情況下帶來的性能下降是非常恐怖的,於是乎,Nuclear系統中任何的高並發操作都消除了Block。no waiting, no delay。
2. 根據系統負載控制後台執行緒的資源占用
Nuclear系統中有不少的後台執行緒默默無聞的做著各種辛苦的工作,但是它們同樣會占用系統資源,我們的解決方案是根據系統負載動態調整執行緒的運行和停止,並達到平衡。

特性

高可拓展

一個Nuclear集群支持1到n(n<2的64平方)個節點(Node)的規模,每台伺服器(Server)支持部署多個節點。當集群資源達到瓶頸時,可以通過增加新的節點來擴展。增加新節點的過程,系統服務無需停止,無需人工干預遷移數據。Nuclear理論上可以無限Scale-Out。

高可靠性

單個節點的crash永遠對系統的運行造成影響,不存在單點風險。數據的寫入參考Dynamo的W+R>N理論,簡釋之,例如設定系統每一份數據都存儲在3個節點上(N=3),那么讀的話必須成功讀到兩個節點上的數據才認為讀成功 (R=2),寫的話必須成功寫到兩個節點上才認為寫成功( W=2)。系統永遠可寫入(Hinted HandOff)。

高性能

在Xeon E5405 CPU的伺服器上,單節點每秒最高2.5w req/s。整個集群的性能取決於一致性級別、N、W、R數及底層存儲引擎的選擇。

相關詞條

熱門詞條

聯絡我們