先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作!

转自:http://blog.sina.com.cn/s/blog_6de3aa8a0102wk0y.html

早期的OpenStack监控(遥测)项目ceilometer被一分为四(Ceilometer、Gnocchi、Aodh、Panko),各司其职!其中Ceilometer负责采集计量数据并加工预处理;Gnocchi主要用来提供资源索引和存储时序计量数据;Aodh主要提供预警和计量通知服务;Panko主要提供事件存储服务。促成Ceilometer分裂的主要原因是:早期各类资源的计量数据(即是时间序列数据)(measurement,核心字段是<</span>时间,值>)存储在SQL数据库中的sample表中;随着云环境中需要被监控的资源增多和时间的推移,计量数据的增长变得难以预测;计量数据的使用方面,查询操作首先要从巨大的sample单表中过滤所需条目,然后还会涉及到相关的聚合计算;可想而知,由此带来的性能开销绝对是无法忍受的,并且随着时间的推移这个瓶颈会愈加明显直至奔溃。要解决上述问题方法有很多,比如分表:每个监控指标(Metirc)一张表,那么一个资源可能会有多张表(比如一个instance至少会有cpu,cpu.util,memory,memory.usage,disk.* 等监控指标metrics);这似乎有点夸张,即使这样都可以接受的话,那么查询时对计量数据的聚合操作也还是个问题。

类似的思想,红帽的Julien Danjou(blog:https://julien.danjou.info/blog/)发起了Gnocchi项目来解决这类问题。其总体思路是:把各个计量指标Metric的计量数据measurement直接写入后端存储中;并在measurement写入之前根据预先设定的归档策略进行聚合操作;查询时直接读取对应的文件即可获得聚合后的监控信息点,显然时间复杂度变为O(1)了;并且提供资源索引,这样能更快的找到每个资源的基础信息metadata和其相关的metrics信息。

OpenStack/Gnocchi简介和架构[附文档翻译]

文档翻译(欢迎雅正):http://gnocchi.xyz

第一部分:Gnocchi简介 http://gnocchi.xyz/index.html

Gnocchi – Metric as a Service,Gnocchi计量作为一种服务
Gnocchi是一个多租户时间序列,计量和资源数据库。提供了HTTP REST接口来创建和操作数据。Gnocchi设计用于超大规模计量数据的存储,同时向操作者和用户提供对度量和资源信息的访问。
Gnocchi是OpenStack项目的一部分。因此它支持OpenStack,但也能完全独立的工作。
您可以在 http://gnocchi.xyz上阅读完整的在线文档。

Why Gnocchi?为什么使用Gnocchi?
Gnocchi已被创建满足在云计算环境中可用的时间序列数据库的需要:提供存储大量度量数据并且易于扩展的能力。
Gnocchi项目于2014年开始,作为OpenStack Ceilometer项目的分支,以解决Ceilometer在将标准数据库用作计量数据的存储后端时遇到的性能问题。更多信息,请参见Julien的博客Gnocchi。

Use cases,使用案例
Gnocchi旨在用于存储时间序列及其相关联的资源元数据。因此,它有用的例子如:
(1)计费系统的存储;(2)报警触发或监控系统;(3)数据的统计使用。

Key Features,关键特性
HTTP REST接口 水平可扩展性 度量聚合 测量批处理支持 存档策略 计量值搜索
结构化资源 资源历史 可查询资源索引器 多租户支持 Grafana支持 Statsd协议支持


第二部分:Gnocchi的架构 http://gnocchi.xyz/architecture.html

Project Architecture,项目架构
Gnocchi由几个服务组成:一个HTTP REST API(请参阅REST API Usage),可选的statsd兼容守护程序(请参阅Statsd守护程序使用)和异步处理守护程序。 通过HTTP REST API和statsd守护程序接收数据。异步处理守护程序(称为gnocchi-metricd)在后台对接收到的数据执行统计计算,度量标准清除等操作。
HTTP REST API和异步处理守护程序都是无状态的,并且是可扩展的。可以根据负载添加其它workers。

Back-ends,后端
Gnocchi使用了两个不同的后端存储数据:一个用于存储时间序列(存储驱动程序),另一个用于索引数据(索引驱动程序)。
存储器负责存储所创建的度量的计量值measurement。它接收时间戳和值,并根据定义的归档策略预先计算聚合。
索引器负责存储所有资源的索引,以及它们的类型和属性。Gnocchi不仅了解来自OpenStack项目的资源类型,也提供了一个通用类型,因此您可以创建基本资源并自己处理资源属性。 索引器还负责将资源与度量指标metric相关联。

How to choose back-ends,如何选择后端
Gnocchi目前提供了集中不同的存储引擎:File,Swift,S3,Ceph(首选)。
Storage的驱动程序基于一个名为Carbonara的中间库,由该中间库处理时间序列操作,因为这些存储技术本身都不能处理时间序列。
四个基于Carbonara的驱动程序运行良好,并且后端技术保证可扩展性。 Ceph和Swift本身就比文件驱动器更具可扩展性。
根据您的体系结构的大小,使用文件驱动程序并将数据存储在磁盘上可能就足够了。 如果需要使用文件驱动程序扩展服务器数量,则可以通过NFS在所有Gnocchi进程中导出和共享数据。在任何情况下,显然S3,Ceph和Swift驱动程序在很大程度上更具可伸缩性。Ceph还提供了更好的一致性,因此是推荐的驱动程序。

How to plan for Gnocchi’s storage,如何规划Gnocchi的存储
Gnocchi使用基于Carbonara库的自定义文件格式。在Gnocchi中,时间序列是点的集合,其中点是在时间序列的寿命中的给定测量或样本。使用各种技术压缩存储格式,因此可以基于其最坏情况情况使用以下公式来估计时间序列大小的计算: 点数×8字节=以字节为单位的大小
您要保留的点数通常由以下公式确定: 点数=时间跨度÷粒度
例如,如果您想保留一年的数据,一分钟的分辨率: 点数=(365天×24小时×60分钟)÷1分钟 = 525 600。然后:字节大小= 525 600字节×6 = 3 159 600字节= 3 085 KiB
这只是一个聚合时间序列。如果归档策略使用具有相同“一年,一分钟聚合”分辨率的6个默认聚合方法(mean,min,max,sum,std,count),则使用的空间将最多增加到6×4.1 MiB = 24.6 MiB。

How to set the archive policy and granularity,如何设置归档策略和计量粒度
在Gnocchi中,归档策略以点数表示。如果归档策略定义了10点的策略,粒度为1秒,则时间序列归档将保持长达10秒,每个代表1秒钟的聚合。这意味着时间序列将最多保留最近点和最旧点之间的10秒数据(有时多一点)。这并不意味着它将是10个连续的秒:如果数据被不规则地时间间隔送达,可能存在间隙。
相对于当前时间戳没有数据到期。此外,您不能删除旧的数据点(至少现在)。
因此,存档策略和粒度完全取决于您的用例。根据数据的使用情况,可以定义多个归档策略。典型的低粒度用例可能是:
3600点,粒度为1秒= 1小时
1440点,粒度为1分钟= 24小时
720点,粒度为1小时= 30天
365分,粒度为1天= 1年
这将表示每种聚集方法6125点×9 = 54 KiB。如果使用8标准聚合方法,您的指标将占用8×54 KiB = 432 KiB的磁盘空间。

Default archive policies,默认的归档策略
默认情况下,使用默认存档策略(在default_aggregation_methods中列出,即平均值,最小值,最大值,总和,标准值,计数)创建3个归档策略:
low(每个metric的最大估计大小:5 KiB)
5分钟粒度1小时;1小时粒度1天;1天粒度超过1个月
medium(每个metric的最大估计大小:139 KiB)
1分钟粒度1天;1小时粒度超过1周;1天的粒度超过1年
high(每个metric的最大估计大小:1 578 KiB)
1秒粒度;1分钟粒度1周;1小时粒度超过1年

OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念的更多相关文章

  1. sqler sql 转rest api 数据聚合操作

    sqler 2.0 提供了一个新的指令aggregate,注意这个和sql 的聚合函数不是一个概念,这个只是为了 方便api数据的拼接 参考格式   databases {    exec = &qu ...

  2. MongoDB中的聚合操作

    根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...

  3. PIE SDK打开长时间序列数据

    1. 功能简介 时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况.当前随着遥感卫星技术日新月异的发展,遥感卫星的 ...

  4. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  5. 大数据项目2(Java8聚合操作)

    前言:为很好的理解这些方法,你需要熟悉java8特性Lambda和方法引用的使用 一:简介 我们用集合的目的,往往不是简单的仅仅把数据保存哪里.而是要检索(遍历)或者去计算或统计....操作集合里面的 ...

  6. 使用 DML语句,对 “锦图网” 数据进行操作,聚合函数练习

    查看本章节 查看作业目录 需求说明: 根据客户 ID 统计订单数.订单总金额.最高订单金额.最低订单金额和每份订单平均金额,并按订单总金额升序显示 根据客户统计订单总订购人次数> 5 的统计信息 ...

  7. 爬虫简介与excel表格操作

    爬虫简介与excel表格操作 re模块简介 1.在python中使用正则表达式的话那么re模块就是选择之一 import re # 导入re模块 2.在re模块中使用findall找到所有我们给他的值 ...

  8. 数据聚合 & 分组:新一代系统监控的核心功能

    遥想 2015 年 8 月 17 日,Cloud Insight 还在梳理功能原型,畅想 Cloud Insight 存在的意义:为什么阿里云用户需要使用 Cloud Insight 来加强管理. 而 ...

  9. pandas的聚合操作: groupyby与agg

    pandas提供基于行和列的聚合操作,groupby可理解为是基于行的,agg则是基于列的 从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如su ...

随机推荐

  1. STORM_0010_Message passing implementation/消息传递的实现

    下面是0.8.0之前的表述,之后的已经基于Disruptor改造过了 这个文章演示了发射和转移tuple是怎么在storm中工作的   Worker为消息传递负责 当zk中的任务出现了变化或者每个ta ...

  2. HDU 1027 Ignatius and the Princess II(康托逆展开)

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  3. MVC服务器前台提示

    [HttpPost] public ActionResult AddMsg(MsgModel model) { string strSql = "insert into tbl_msg(ti ...

  4. [转发] 老叶观点:MySQL开发规范之我见

    原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...

  5. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

    搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...

  6. Java源码初学_AbstractList&AbstractCollection

    一.AbstractCollection抽象类:(提供了Collection接口的骨干实现,以减少实现接口所需要的工作) 1.contains方法 contains方法,通过迭代器对于列表的每一个元素 ...

  7. 使用xml方式定义补间动画

    在res下创建一个目录 anim目录 public class MainActivity extends Activity { private ImageView iv; @Override prot ...

  8. JS作用域和预编译(转载 学习中。。。)

    JS在页面加载过程中顺序执行.但是分块预编译.执行. JS在执行前会进行类似”预编译”的操作,而且先预声明变量再预定义函数. 此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行 ...

  9. js获取字符串的字节长度

    占用3个字节的范围 U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 个 U+2F00 - U+2FD5 : 0xE2 0xBC 0x80 ...

  10. 转:最小区间:k个有序的数组,找到最小区间使k个数组中每个数组至少有一个数在区间中

    转:http://www.itmian4.com/thread-6504-1-1.html 最小区间原题 k个有序的数组,找到最小的区间范围使得这k个数组中,每个数组至少有一个数字在这个区间范围内.比 ...