閱讀319 返回首頁    go 阿裏雲 go 技術社區[雲棲]


分區(Shard)__基礎概念_用戶指南_日誌服務-阿裏雲

每個日誌庫(Logstore)分若幹個分區(Shard),每個分區由MD5組成左閉右開區間組成,每個區間範圍不會相互覆蓋,並且所有的區間的範圍是MD5整個取值範圍:

Logstore讀寫日誌必定保存在某一個分區上

為了幫助理解分區概念,可以參考如下示意圖:

為了簡化說明,這裏假設md5的取值範圍是00 到ff。該Logstore共有4個分區,範圍分別是:

分區號 範圍
Shard0 [00,40)
Shard1 [40,80)
Shard2 [80,C0)
Shard3 [C0,FF)

當寫入日誌時,用戶指定一個md5的key是5F,那麼這個請求會落在第1號分區上;如果用戶指定md5是8C,那麼該請求的數據會落到第2號shard上。

分區的範圍如何劃分?

創建logstore時,指定分區個數,會自動平均劃分整個md5的範圍。之後可以通過分裂和合並操作來擴容和縮容分區個數。

分區讀寫能

每個分區能承載一定服務能力:

  • 寫入:5MB/S,2000次/S
  • 讀取:10MB/S,100次/S

根據每個分區能夠處理5M/s的寫數據,和10M/s的讀數據。根據流量計算出來需要多少個分區。

  1. 當寫入的API持續報錯403或者500錯誤時,通過Logstore雲監控查看流量和狀態碼,判斷是否需要增加分區。
  2. 對超過分區服務能力讀寫係統會盡可能服務,但不保證服務質量

分區狀態:

  • readwrite:可以讀寫
  • readonly:隻讀數據

擴容分區(Split)

擴容分區通過分裂(Split)操作。在分裂操作時,指定一個處於readwrite狀態的hardId,和一個md5.md5要求必須大於shard的inclusiveBeginKey,並且小於shard的exclusiveEndKey。

在分裂完成後,原來的分區變成隻讀(readonly)狀態,數據仍然可以被消費;新生成兩個readwrite狀態的分區,並且新生成的兩個分區的md5範圍覆蓋了原來分區的範圍。

縮容分區(Merge)

縮容分區通過合並(merge)操作。在合並操作時,指定一個處於readwrite狀態的shardId。要求所指定的分區不能是最後一個readwrite分區,服務端會自動找到所指定分區的右側相鄰分區。

在合並完成後,所指定的分區和其右側相鄰分區變成隻讀(readonly)狀態,數據仍然可以被消費;新生成一個readwrite狀態的分區,並且新生成的分區的md5範圍覆蓋了原來兩個分區的範圍。

刪除分區(shard)

分區在到達生命周期後會自動刪除,標記readonly分區不參與計費。

最後更新:2016-11-25 01:25:25

  上一篇:go 日誌庫(Logstore)__基礎概念_用戶指南_日誌服務-阿裏雲
  下一篇:go 采集方式__loghub-采集_用戶指南_日誌服務-阿裏雲