共用方式為


穀物目錄實作

概觀和架構

Orleans 中的穀粒目錄是一個索引鍵/值存放區,其中索引鍵是穀粒識別碼,值是指向可能裝載該穀粒的正在運行的筒倉的註冊條目。

雖然 Orleans 提供預設的記憶體內分散式目錄實作(如本文所述),但粒度目錄系統的設計是可插拔的。 您可以透過實作 IGrainDirectory 介面並將其註冊到孤島的服務集合,來實作您自己的目錄。 這允許使用不同記憶體後端或一致性模型的自定義目錄實作,以更符合特定應用程式需求。 由於引進新的強式一致性目錄,因此對外部目錄實作的需求較少,但 API 會維持回溯相容性和彈性。 您可以根據每個粒紋類型設定粒紋目錄。

若要優化效能,Orleans會在每個資料倉內本地快取目錄查詢。 這表示只有在本機快取項目遺失或無效時,才需要遠端目錄讀取。 此快取機制可減少與粒紋位置查閱相關聯的網路額外負荷和延遲。

最初,Orleans 實作最終一致的目錄,結構為分散式哈希表。 這已由 v9.0 中的 Orleans 強式一致目錄取代,其依據是兩階段 虛擬同步方法。 它也會結構化為分散式哈希表,但透過虛擬節點提供改善的負載平衡。 本文說明後者較新的粒紋索引實現。

分散式粒紋目錄

Orleans 中的分散式資料目錄提供強一致性、負載平衡、高性能和容錯。 實作遵循兩階段設計,基於虛擬同步方法; 並與垂直Paxos 有相似之處。

目錄分割區有兩種作業模式:

  1. 正常運作:分割區在本機執行要求,不需與其他主機協調。
  2. 檢視變更:主機會彼此協調,以轉移目錄範圍的擁有權。

目錄運用 Orleans的強式一致性叢集成員資格系統,其中稱為「視圖」的組態具有單調增加的版本號碼。 當獨立模組加入和離開叢集時,會建立接續的檢視,從而改變範圍歸屬。

所有目錄操作都包含視圖協調:

  • 要求會攜帶呼叫端的檢視號碼。
  • 回應包括分割區的檢視編號。
  • 檢視次數不一致會觸發同步。
  • 請求會在檢視變更時自動重試。

這可確保目錄分割區的正確擁有者會處理所有要求。

分區策略

目錄使用一致性哈希環進行分割,並將範圍指派給叢集中活躍的silo。 資料標識符會通過哈希加密,以尋找擁有其哈希對應的環形區段之資料倉。

每個啟用中的儲存桶擁有預設的範圍數目,預設為每個儲存桶30個範圍。 這類似於 Amazon DynamoApache Cassandra 所使用的配置,其中會為每個實體節點(主機)建立多個「虛擬節點」(範圍)。

分割區的大小取決於其哈希與下一個分割區哈希之間的距離。 在檢視變更期間,範圍可能會被分割成多個筒倉。 這會增加檢視變更程序的複雜性,因為每個分割區都必須與多個其他分割區協調。

檢視變更程序

目錄分割區(在 GrainDirectoryPartition中實作)使用具有版本控制的範圍鎖,以防止在檢視變更期間對範圍的無效訪問。 範圍鎖定會在檢視變更期間建立,並在檢視變更完成時釋放。 這些鎖類似於虛擬同步性方法中使用的「楔子」。

發生檢視變更時,分割區可以成長或縮小:

  • 如果新的倉加入叢集,現有的分割區可能會縮小以騰出空間。
  • 如果一個儲槽離開叢集,剩餘的分割區有可能會增長以接管這些孤立的區域。

目錄註冊必須先從舊擁有者轉移至新擁有者,才能進行處理。 傳輸程式會遵循下列步驟:

  1. 先前的擁有者會鎖定範圍區段,並建立其目錄項目的快照。
  2. 新的擁有者會要求並套用快照。
  3. 新任擁有者開始處理範圍內的請求。
  4. 先前的擁有者會收到通知並刪除快照。

復原過程

當主機當機而未能妥善移交其目錄分區時,後續的分區擁有者必須進行恢復操作。 這牽涉到:

  1. 查詢叢集中的所有作用中儲存桶,以取得其 Grain 註冊。
  2. 重建受影響範圍的目錄狀態。
  3. 確保不會發生重複的粒子激活。

當叢集內部成員快速變動時,也需要進行復原。 雖然叢集成員資格保證單調性,但孤立的系統可能會遺漏中繼成員資格視圖。 在這種情況下:

  • 快照集傳輸已放棄。
  • 將執行復原,而不是執行一般的分區對分區交接。
  • 儘管缺少中繼狀態,但系統仍維持一致性。

未來針對叢集成員的改進,可能會透過確保所有環節都能看到所有視圖來減少或消除這些情況。