2015-03-31 63 views
0

我正在學習Apache Helix。我遇到了關鍵字'分區'。
根據這裏提到的定義http://helix.apache.org/Concepts.html,(主任務的)每個子任務被稱爲Helix中的分區。
當我通過配方 - 分佈式鎖定管理器時,分區只不過是資源的實例。 (增加numOfPartitions,增加鎖的數量)。
什麼是Apache Helix中的「分區」

final int numPartitions = 12; 
admin.addResource(clusterName, lockGroupName, numPartitions, "OnlineOffline", 
      RebalanceMode.FULL_AUTO.toString()); 

有人可以用簡單的例子說明一下,究竟是什麼分區Apache的Helix是?

回答

1

我認爲你是對的,分區本質上是一個資源的實例。與其他分佈式系統一樣,分區用於實現並行性。只有一個實例的資源只能在一臺機器上運行。分區只是簡單地提供必要的構造,以便通過對資源進行分區來在多臺機器中分配單個資源。

這是一種可在大部分分佈式系統中找到的模式。不過,差別在於,例如,分佈式數據庫顯式地將分區定義爲一個可放在單個節點上的較大數據集的子集,Helix更通用,因爲分區沒有明確的含義或用例,但有許多潛在的含義和潛在的用例。

其中一個我非常熟悉的系統中的用例是Apache Kafka的主題分區。在Kafka中,每個主題 - 實質上是一個分佈式日誌 - 被分成許多分區。雖然主題數據可以分佈在集羣中的許多節點上,但每個分區都被限制爲單個節點上的單個日誌。 Kafka通過向新節點添加新分區來提供可擴展性。當消息生成到Kafka主題時,它們在內部被散列到某個特定節點上的某個特定分區。消息從主題消費時,消費者會在分區之間切換 - 因此會在主題中消耗其節點。

該模式通常適用於許多可伸縮性問題,幾乎可以在任何HA分佈式數據庫(例如DynamoDB,Hazelcast),map/reduce(例如Hadoop,Spark)以及其他數據或任務驅動系統中找到。

LinkedIn blog post about Helix實際上給出了一堆資源和分區之間關係的有用示例。