OpenTSDB的设计之道

二月 26th, 2013 by klose | Posted under 互联网应用, 海量数据存储与处理.

OpenTSDB是一个架构在Hbase系统之上的实时监控信息收集和展示平台。

它在海量数据的压力下,仍然保证了存储的效率,那么它背后有什么值得借鉴的地方呢?
1)使用AsyncHbase而非HBase自带的HTable。使用线程安全、非阻塞、异步、多线程并发的HBase API,在高并发和高吞吐时,可以获得更好的效果。建议在使用AsyncHBase​时,在CPU core有保证的前提下,可以设置16或者24。
2)采用固定长度的Rowkey,让Rowkey包含尽可能多的检索信息。这一点的话,OpenTSDB存储的数据要包含大量的metrics和tag信息,这些信息的长度是变长的,因此,在实现上设置了一个表格uid-tsdb存储这些信息,作为一个全局唯一的编号,并把编号与TimeStamp合并作为Rowkey。
 
3)每一行要存储尽可能多的信息,这一点在OpenTSDB被发挥到了极致。例如,把某个时间段的分散采集的数据合并在一起,按照一个Row来提交给hbase。这种方案,会减少整个表格Rowkey的个数,从而提高检索Row的速度,但是该方法并没有节省存储空间。
在这个基础上,OpenTSDB又推动了一步,让一个column记录多条内容,从而降低存储空间的浪费。
4)按照时间的Boundary来存储,仍采用无状态的存储方案,从而提供系统的容错能力。
附录:OpenTSDB中一个KeyValue的存储结构如下:

From Binospace, post OpenTSDB的设计之道

文章的脚注信息由WordPress的wp-posturl插件自动生成





Tags: , ,

Comments

2 Responses to “OpenTSDB的设计之道”
  1. llc 说道:

    不明觉厉!
    我知道的一个方案是本地记日志,后台起个agent从日志文件里抓信息,用http发出去,相比起来弱爆了。。

Do you have any comments on OpenTSDB的设计之道 ?