Log Service使用Shard控制Logstore、EventStore、MetricStore的讀寫資料的能力,資料必定儲存在某一個Shard中。通過分裂、合併作業控制活躍的Shard數量來調整Log Service提供的最大讀寫能力。分裂Shard可以自動觸發,但合并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範圍所示,當寫入資料時指定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不支援寫入新資料。
分裂Shard
建議您根據實際業務資料流量規劃Shard個數。每個Shard支援5MB/s或500次/s的資料寫入、10MB/s或100次/s的資料讀取。此限制非硬性限制,超出限制時,系統會儘可能提供服務,但是不保證服務品質。當資料讀寫流量超出Shard讀寫能力時,需要及時分裂Shard以增加Shard個數,從而提供更高的讀寫能力。
當寫入資料的API持續報告403或者500錯誤時,您可以通過LogstoreCloudMonitor查看流量和狀態代碼判斷是否需要增加Shard。
控制台操作
在Project列表地區,單擊目標Project。

單擊
日誌儲存,在日誌庫中,將滑鼠懸浮在目標Logstore上,選擇。在Logstore屬性頁面中,單擊修改。
選擇待分裂的Shard,單擊分裂。
重要分裂Shard時,需要選擇一個處於readwrite狀態的Shard。

選擇分裂數量,單擊確定。
單擊儲存。
查看Shard
控制台操作
在Project列表地區,單擊目標Project。

單擊
日誌儲存,在日誌庫中,將滑鼠懸浮在目標Logstore上,選擇。在Logstore屬性頁面中,查看當前Logstore的Shard列表。

自動分裂Shard
Log Service支援自動分裂Shard,協助您自動處理業務流量超出預估值的情境。自動分裂Shard需要滿足以下幾個條件。
開啟了自動分裂Shard開關。
當寫入資料量超出當前Shard的寫入服務能力且持續5分鐘以上。
Logstore中readwrite狀態的Shard數目未超過設定的最大Shard總數。
最近15分鐘內分裂出來的新Shard不會自動分裂。
您可以在建立或修改Logstore時開啟自動分裂Shard,並設定Shard的最大分裂數。
自動分裂Shard
例如原本存在4個Shard,Log Service會獨立判斷各個Shard是否滿足分裂條件。滿足分裂條件的Shard會各自進行分裂,分裂總數不會超過您所設定的最大分裂數。
最大分裂數
Shard自動分裂的最大總數目。開啟自動分裂Shard功能後,最多支援自動分裂至256個readwrite狀態的Shard。
合并Shard
當資料讀寫流量遠達不到Shard的最大讀寫能力時,建議您合并Shard,降低活躍Shard租用費用。您可以通過合併作業減少Shard數量,Log Service會找到指定Shard右側相鄰的Shard,並將兩個Shard合并。合并Shard只支援手動操作,無法自動合并。
合并Shard時,必須指定一個處於readwrite狀態的Shard,且不能是最後一個readwrite狀態的Shard。
單擊
日誌儲存,在日誌庫中,將滑鼠懸浮在目標Logstore上,選擇。在Logstore屬性頁面中,單擊修改。
選擇待合并的Shard,單擊合并。

單擊儲存。
合并完成後,所指定的Shard及其右側相鄰Shard的狀態變成readonly。同時新產生一個readwrite狀態的Shard,新Shard的MD5範圍覆蓋原來兩個Shard的範圍。
刪除Shard
刪除Shard後,無法恢複,請謹慎操作。
自動刪除
如果您在建立Logstore時設定了資料儲存時間,那麼Shard及Shard中的資料超出儲存時間後會被自動刪除。
手動刪除
如果您在建立Logstore時開啟了永久儲存,建議您通過刪除Logstore的方式刪除Logstore中的Shard和資料。更多資訊,請參見停止計費/刪除Logstore。
Shard介面
操作 | 介面 |
分裂Shard | |
合并Shard | |
查詢Shard |
> 修改