全部產品
Search
文件中心

Simple Log Service:分區(Shard)

更新時間:Jun 30, 2024

Log Service使用Shard控制Logstore或MetricStore的讀寫資料的能力,資料必定儲存在某一個Shard中。

Shard範圍

每個Shard均有範圍,為MD5左閉右開區間[BeginKey,EndKey)。每個Shard範圍不會相互覆蓋,且屬於整個MD5範圍內[00000000000000000000000000000000,ffffffffffffffffffffffffffffffff)。您可以在建立Logstore或MetricStore時指定Shard個數,Log Service將自動平均劃分整個MD5範圍。

  • BeginKey:指定Shard範圍的起始值,Shard範圍中包含該值。

  • EndKey:指定Shard範圍的結束值,Shard範圍中不包含該值。

例如Logstore A中包含4個Shard,各個Shard範圍如下:

表 1. Shard範圍

Shard ID

範圍

Shard0

[00000000000000000000000000000000,40000000000000000000000000000000)

Shard1

[40000000000000000000000000000000,80000000000000000000000000000000)

Shard2

[80000000000000000000000000000000,c0000000000000000000000000000000)

Shard3

[c0000000000000000000000000000000,ffffffffffffffffffffffffffffffff)

在Shard讀寫資料過程中,讀資料時必須指定Shard ID,寫資料時可通過負載平衡模式或者指定Hash Key的模式。

  • 負載平衡模式:每個資料包隨機寫入當前可用的Shard中。

    如果您的寫入流量大於單Shard的服務能力,建議採用負載平衡模式。

  • 指定Hash Key模式:指定MD5的Key值,資料將被寫入包含該Key值的Shard中。

    例如Shard範圍如Shard範圍所示,當您寫入資料時指定MD5的Key值為5F時,則資料將被寫入包含5F的Shard1上;當您寫入資料時指定MD5的Key值為8C時,則資料將被寫入包含8C的Shard2上。

Shard的讀寫能力

每個Shard提供一定的服務能力,具體請參見資料讀寫

建議您根據實際資料流量規劃Shard個數。當資料流量超出讀寫能力時,及時分裂Shard以增加Shard個數,從而達到更大的讀寫能力。當資料流量遠未達到Shard的最大讀寫能力時,及時合并Shard以減少Shard個數,從而降低活躍Shard租用費用。

重要
  • 當寫入資料的API持續報告403或者500錯誤時,您可以通過LogstoreCloudMonitor查看流量和狀態代碼判斷是否需要增加Shard。

  • 超過Shard服務能力的讀寫,Log Service會儘可能服務,但不保證服務品質。

Shard狀態

Shard狀態包括readwrite(讀寫)和readonly(唯讀)。

建立Shard時,所有Shard狀態均為readwrite狀態。執行分裂或合併作業後,Shard狀態變更為readonly,並產生新的readwrite狀態的Shard。Shard狀態不影響其資料讀取的效能。readwrite狀態的Shard可保證資料寫入效能,readonly狀態的Shard不提供資料寫入服務。

分裂與合并

Log Service支援分裂和合并Shard。

  • 分裂操作是指將一個Shard分裂為另外兩個Shard,即分裂後Shard數量增加2。兩個新產生的Shard的狀態為readwrite,排列在原Shard之後且兩個Shard的MD5範圍覆蓋原Shard的MD5範圍。

    分裂Shard時,需指定一個處於readwrite狀態的Shard。分裂完成後,原Shard狀態由readwrite變為readonly,該Shard中的資料仍可被消費,但該Shard不支援寫入新資料。

  • 合併作業是指將兩個Shard合并為一個Shard。新產生的Shard的狀態為readwrite,排列在原Shard之後且其MD5範圍覆蓋原來兩個Shard的MD5範圍。

    合并Shard時,需指定一個處於readwrite狀態且未排列在最後一個的Shard,Log Service自動找到所指定Shard右側相鄰的Shard,並進行合并。合并完成後,原來兩個Shard的狀態由readwrite變為readonly,這兩個Shard中的資料仍可被消費,但這兩個Shard不支援寫入新資料。