简介
大规模的互联网服务旨在在出现意外故障时保持高可用性和响应性。提供这种服务通常需要在大量系统中每秒监视和分析数千万个测量值,一个特别有效的解决方案是在时间序列数据库(TSDB)中存储和查询这些测量值。Gorilla 通过村存储时间戳的变化量的变化量(delta of delta)以及对存储的value进行异或(XOR)操作从而提升读写性能,查询延迟降低了73倍,查询吞吐率提升了14倍。
Gorilla在监控数据写入HBase存储之前,起到一个write-through cache的作用。Gorilla的数据模型是一个简单的3元组,包括一个string类型的key、一个64-bit整型timestamp和一个双精度浮点类型value。监控数据中定义的key用来唯一标识一个时间序列(timeseries)。根据键值(key)将时间序列(timeseries)数据进行分片(shard),每个时间序列(timeseries)数据集会被映射到一台单独的Gorilla主机上。因此扩展Gorilla主机时,可以通过调整分片算法将新的timeseries数据映射到新的主机上
Gorilla的主要特点:
- 写占主导地位
- 状态转换(state transitions) 它能在数十秒之内显示状态转换,以防止错误蔓延。(个人觉得是一种预警机制吧)
- 高可用性
- 容错
Gorilla的压缩算法
1.对于时间戳的变化量的变化量(delta of delta)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQKa1vCA-1632981337346)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20210927170324884.png)]
首先我们有每个时间的时间戳 t n t_n tn ,然后计算时间戳变化量的变化量 D = ( t n − t n − 1 ) − ( t n − 1 − t n