阅读319 返回首页    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-采集_用户指南_日志服务-阿里云