分區(qū)(Shard)
日志服務(wù)使用Shard控制Logstore或MetricStore的讀寫數(shù)據(jù)的能力,數(shù)據(jù)必定保存在某一個(gè)Shard中。
Shard范圍
每個(gè)Shard均有范圍,為MD5左閉右開區(qū)間[BeginKey,EndKey)。每個(gè)Shard范圍不會(huì)相互覆蓋,且屬于整個(gè)MD5范圍內(nèi)[00000000000000000000000000000000,ffffffffffffffffffffffffffffffff)。您可以在創(chuàng)建Logstore或MetricStore時(shí)指定Shard個(gè)數(shù),日志服務(wù)將自動(dòng)平均劃分整個(gè)MD5范圍。
BeginKey:指定Shard范圍的起始值,Shard范圍中包含該值。
EndKey:指定Shard范圍的結(jié)束值,Shard范圍中不包含該值。
例如Logstore A中包含4個(gè)Shard,各個(gè)Shard范圍如下:
表 1. Shard范圍
Shard ID | 范圍 |
Shard0 | [00000000000000000000000000000000,40000000000000000000000000000000) |
Shard1 | [40000000000000000000000000000000,80000000000000000000000000000000) |
Shard2 | [80000000000000000000000000000000,c0000000000000000000000000000000) |
Shard3 | [c0000000000000000000000000000000,ffffffffffffffffffffffffffffffff) |
在Shard讀寫數(shù)據(jù)過程中,讀數(shù)據(jù)時(shí)必須指定Shard ID,寫數(shù)據(jù)時(shí)可通過負(fù)載均衡模式或者指定Hash Key的模式。
負(fù)載均衡模式:每個(gè)數(shù)據(jù)包隨機(jī)寫入當(dāng)前可用的Shard中。
如果您的寫入流量大于單Shard的服務(wù)能力,建議采用負(fù)載均衡模式。
指定Hash Key模式:指定MD5的Key值,數(shù)據(jù)將被寫入包含該Key值的Shard中。
例如Shard范圍如Shard范圍所示,當(dāng)您寫入數(shù)據(jù)時(shí)指定MD5的Key值為5F時(shí),則數(shù)據(jù)將被寫入包含5F的Shard1上;當(dāng)您寫入數(shù)據(jù)時(shí)指定MD5的Key值為8C時(shí),則數(shù)據(jù)將被寫入包含8C的Shard2上。
Shard的讀寫能力
每個(gè)Shard提供一定的服務(wù)能力,具體請(qǐng)參見數(shù)據(jù)讀寫。
建議您根據(jù)實(shí)際數(shù)據(jù)流量規(guī)劃Shard個(gè)數(shù)。當(dāng)數(shù)據(jù)流量超出讀寫能力時(shí),及時(shí)分裂Shard以增加Shard個(gè)數(shù),從而達(dá)到更大的讀寫能力。當(dāng)數(shù)據(jù)流量遠(yuǎn)未達(dá)到Shard的最大讀寫能力時(shí),及時(shí)合并Shard以減少Shard個(gè)數(shù),從而降低活躍Shard租用費(fèi)用。
當(dāng)寫入數(shù)據(jù)的API持續(xù)報(bào)告403或者500錯(cuò)誤時(shí),您可以通過Logstore云監(jiān)控查看流量和狀態(tài)碼判斷是否需要增加Shard。
超過Shard服務(wù)能力的讀寫,日志服務(wù)會(huì)盡可能服務(wù),但不保證服務(wù)質(zhì)量。
Shard狀態(tài)
Shard狀態(tài)包括readwrite(讀寫)和readonly(只讀)。
創(chuàng)建Shard時(shí),所有Shard狀態(tài)均為readwrite狀態(tài)。執(zhí)行分裂或合并操作后,Shard狀態(tài)變更為readonly,并生成新的readwrite狀態(tài)的Shard。Shard狀態(tài)不影響其數(shù)據(jù)讀取的性能。readwrite狀態(tài)的Shard可保證數(shù)據(jù)寫入性能,readonly狀態(tài)的Shard不提供數(shù)據(jù)寫入服務(wù)。
分裂與合并
日志服務(wù)支持分裂和合并Shard。
分裂操作是指將一個(gè)Shard分裂為另外兩個(gè)Shard,即分裂后Shard數(shù)量增加2。兩個(gè)新生成的Shard的狀態(tài)為readwrite,排列在原Shard之后且兩個(gè)Shard的MD5范圍覆蓋原Shard的MD5范圍。
分裂Shard時(shí),需指定一個(gè)處于readwrite狀態(tài)的Shard。分裂完成后,原Shard狀態(tài)由readwrite變?yōu)閞eadonly,該Shard中的數(shù)據(jù)仍可被消費(fèi),但該Shard不支持寫入新數(shù)據(jù)。
合并操作是指將兩個(gè)Shard合并為一個(gè)Shard。新生成的Shard的狀態(tài)為readwrite,排列在原Shard之后且其MD5范圍覆蓋原來兩個(gè)Shard的MD5范圍。
合并Shard時(shí),需指定一個(gè)處于readwrite狀態(tài)且未排列在最后一個(gè)的Shard,日志服務(wù)自動(dòng)找到所指定Shard右側(cè)相鄰的Shard,并進(jìn)行合并。合并完成后,原來兩個(gè)Shard的狀態(tài)由readwrite變?yōu)閞eadonly,這兩個(gè)Shard中的數(shù)據(jù)仍可被消費(fèi),但這兩個(gè)Shard不支持寫入新數(shù)據(jù)。