索引器規模的最終目标是 10^{15} 個索引。這不是存儲的資料位元組數,而是存儲的索引數。索引是 CID 到内容提供商資料的映射。實際資料量要大得多。目前,我們處理大約 10^{12} 個索引,在此期間,我們将分幾步朝着最終的規模目标邁進。
大多數索引工作目前以攝取索引資料為主。傳入的資料在速率和數量上都可能超過單個索引器可以處理的數量,并且還在迅速增加。是以,為了實作擴充目标,最緊迫的需要是處理不斷增加的攝取負載。
方法:處理索引攝取的簡單政策
資料攝取
索引資料攝取發生在索引器從釋出者收到一條“通告”消息,宣布新索引資料廣告可用時,作為響應,索引器随後檢索尚未從釋出者檢索到的所有索引資料。随着釋出者數量的增加,在某些時候,單個索引器節點将無法跟上新索引資料釋出的速度,并且節點上可能沒有足夠的存儲空間來存儲所有資料。
攝取工作配置設定
索引器擴充以處理攝取工作負載基于一種簡單的政策,即在索引器池中配置設定攝取,這種方式允許在需要額外容量時添加節點,而無需移動資料以重新平衡存儲。首先将不同的内容釋出者配置設定給不同的索引器節點,以便每個節點處理單獨的一部分攝取工作。這是使用獨立的輕量級配置設定器服務完成的,該服務不屬于關鍵索引攝取路徑的一部分。
當索引器達到其配置的存儲限制時,它會停止攝取新的索引資料,并且池中的其他索引器會恢複從配置設定給完整索引器的釋出者攝取資料。随着需要更多的存儲容量和攝取工作配置設定,更多的索引器節點被添加到池中。
此可擴充性政策的三個主要組成部分是:
配置設定器服務:将釋出者配置設定給索引器的服務
索引器當機模式:沒有索引新内容的索引器操作模式
釋出者配置設定的移交:将釋出者從當機索引器重新配置設定到活動索引器,以在當機索引器停止的地方恢複索引
這篇文章将總結這些元件。設計文檔和設計示範幻燈片中提供了更多詳細資訊。
擴充政策的優缺點
優點:
更少的同步:不需要每個索引器都與每個釋出者同步
中繼資料未複制到多個索引器(與鍵分片一樣):中繼資料僅在索引器處理提供者上。
索引器之間不共享任何資料。他們各自管理自己的出版商連鎖店。
無需閱讀廣告來檢查提供者(與提供者分片相比)
索引器可以有不同的存儲容量。
不需要達成共識。
可以重新配置設定攝取工作,而無需在索引器之間移動資料。
缺點:
分布不均:一些釋出者會比其他釋出者索引更多的資料
分散/聚集查詢是必需的:查詢複制到所有索引器,響應合并為對用戶端的單個響應。
提供者更改釋出者可能會導緻重複索引(與提供者分片相反)。
在現有索引器達到存儲限制之前,添加索引器不起作用。
這種方法的總體優勢是它的實作相對簡單,同時仍然消除了對攝取可擴充性的限制。
委托人服務
配置設定器服務 (AS) 負責将釋出者配置設定給其配置的索引器池中的索引器。AS 作為單個執行個體運作,用于索引器池,在與其管理配置設定的索引器相同的網絡上。一個索引器隻能是一個配置設定器的索引器池的成員。
除了将新釋出者配置設定給索引器之外,AS 還會檢測索引器何時進入“當機”模式,并負責将釋出者從當機索引器重新配置設定給非當機索引器。AS 還通過八卦 pubsub 重新釋出直接 HTTP 公告,以便池中的所有索引器都可以接收它們。
由于許多假設,AS 旨在用于單個私有部署:可以對任何索引器進行配置設定,所有索引器的管理 API 都在私有網絡上或受到類似保護,并且沒有既定的方法或協定,供不同方管理添加到池中或從池中删除的節點。
将釋出者配置設定給索引器
AS 監聽 gossip-sub 和直接 HTTP 消息,宣布新廣告的可用性。它從每條消息中讀取釋出者并确定釋出者是否已配置設定給所需的索引器。如果不是,則 AS 選擇配置設定最少的索引器并将釋出者配置設定給該索引器。配置設定後,索引器會收到釋出者的公告并自行處理攝取。
AS 以防止索引器池内過度配置設定的方式處理索引器脫機。AS 還支援将特定釋出者配置設定給特定索引器的配置選項。
補充閱讀:https://filecoin.io/blog/posts/indexer-scalability-for-ingest-heavy-workload/
無持久配置設定狀态意味着索引器可以随時停止和啟動
索引器池是單個部署中的一組索引器節點
Assignment Replication将釋出者配置設定給多個索引器
索引器當機模式
當索引器的存儲使用量達到其配置的限制時,索引器會自動進入“當機”模式。這是一種操作模式,索引器不存儲任何新的索引資料,但仍處理索引資料的更新和删除。當機的索引器不會接受任何新的釋出者配置設定。在内部,索引器會跟蹤它已讀取的每個廣告鍊中的位置,以擷取更新和删除廣告。索引器繼續響應對索引資料的任何查詢。[FreezeAtPercent]()
也可以使用其管理 API 請求當機來手動當機索引器。這樣做可以停止攝取,直到索引器的存儲容量增加,或者如果使用 AS,以便其他索引器節點可以接管繼續索引。
補充閱讀:https://filecoin.io/blog/posts/indexer-scalability-for-ingest-heavy-workload/
磁盤使用監控由每個索引器完成
當機能力不依賴于 AS
解凍功能允許索引器恢複索引
出版商交接
AS 定期輪詢索引器,如果發現某個索引器已當機,則 AS 會為配置設定給當機索引器的每個釋出者進行切換。切換是将釋出者重新配置設定給另一個索引器的方式,以便索引在活動索引器上繼續,而在當機索引器上停止。在切換期間,活動索引器還從當機索引器擷取提供者和擴充提供者資訊。
AS 使用與決定在何處配置設定新釋出者時相同的邏輯來決定将釋出者移交給哪些索引器。這是針對每個被移交的釋出者單獨完成的,導緻當機索引器的配置設定被重新配置設定到池中的可用索引器。
補充閱讀:https://filecoin.io/blog/posts/indexer-scalability-for-ingest-heavy-workload/
AS能夠恢複未完成的切換
釋出者資料分布在當機的和活動的索引器中
使用配置設定器服務設定索引器池
此處描述了使用配置設定器服務部署索引器池的步驟。總結這些步驟:
部署索引器
部署配置設定器服務
根據需要部署額外的索引器
還提供了示例AS 配置檔案。