Learn Influxdb the hard way (1) - Overview of the architecture-阿里云开发者社区

开发者社区> 莫源> 正文

Learn Influxdb the hard way (1) - Overview of the architecture

简介:
+关注继续查看

前言

Influxdb是目前最流行的时序性数据库之一,由Go语言编写,无需特殊的环境依赖,简单方便,非常适合作为监控系统的后端存储。在容器相关领域的场景中,经常和telegraf、grafana、prometheus等开源系统相集成。从这篇文章开始,我们会从源码深入探讨Influxdb的设计思路。本系列文章基于Influxdbv1.5的源码,需要读者具备influxdb的基本使用经验。

Influxdb架构总览

首先我们先从上帝视角鸟瞰一下Influxdb的整体结构,在后续的文章中我们会深入到每一个组件进行解析。
overview.png
从整体的架构分层上来讲可以分为数据持久层、内部组件层、对外服务层,我们先从最下层向上层进行分析。在存储上,Influxdb分为两种储存,一种是META存储,一种是数据存储,首先我们先从磁盘上的目录结构进行查看。

├── data
│   ├── _internal
│   │   └── monitor
│   │       ├── 100
│   │           └── 000000006-000000003.tsm
│   └── k8s
│       └── default
│           ├── 10
│               └── 000000030-000000003.tsm
├── meta
│   └── meta.db
└── wal
    ├── _internal
    │   └── monitor
    │       ├── 100
    │           └── _00024.wal
    └── k8s
        └── default
            ├── 10
                └── _00208.wal

META存储会在数据目录下生成meta.db的文件,主要存储Influxdb的meta信息,例如创建的database的名字、database的retention policy等等。数据存储主要分为两种,一种是持久化数据一种是预写的日志,对于存储系统比较熟悉的同学对于这种同步预写异步刷盘的方式并不陌生,这种方式可以很好的解决分布式数据存储同步以及写入可靠性的问题。data与wal目录下的数据都是通过TSM Engine存储而来的,二级目录的名称是数据库的名称,三级目录的名称是retention policy的名字,四级目录是Shard的id,再下一级则是实际存储的数据文件。此外细心的同学会发现wal的目录结构和data的目录结构是一模一样的,包括文件的名称,这是因为在TSM Engine最小的逻辑存储单元实体是Shard,而Shard会根据自身的配置来构建data和wal,因此他们具备相同的目录结构。

内部组件层是Influxdb中对于底层组件的封装,例如所有需要操作meta信息的场景会引用MetaClient,需要写入数据的场景会默认引用PointsWritter,需要进行数据查询的场景会引用QueryExecutor等等,这些内部组件会被上层的Service引用,因此我们不会过多的赘述这些内部组件。

对外服务层是Influxdb对外的包装,可以分为三种,一种是内部服务,通常是一些定时任务,例如PrecreatorService是一个定时创建Shard的服务,会根据时间戳进行计算,动态创建Shard所需的目录结构。RetetionPolicyService会定时的清理不同的数据库的retention policy对应的数据是否需要清理,如果需要清理则会异步进行清理。一种是外部数据服务,通常是配置数据来源的方式,可以配置为定期拉取的方式,也可以配置为UDP等等不同的方式,支持Graphite、OpenTSDB、Collectd等等。还有一种是API Service,Influxdb将自身的能力通过多种不同的API Service进行暴露,其中ContinuousQueryService是将连续查询这种特殊的数据压缩查询方式独立暴露为API;HTTPDService将平时常用的Influxdb数据库的管理、数据的查询等操作通过HTTP的方式进行暴露;SnapshotterService将Influxdb关于数据的在线备份恢复等操作暴露为API;StorageService将TSM Engine的能力通过grpc协议暴露为服务。

最后

从整体来看Influxdb的设计还是很简单的,主要就是通过各种方式将TSM Engine的能力进行封装,并在上层进行逻辑操作的封装,在下一篇文章中会从代码的角度帮大家将整体的结构进行梳理,并逐渐深入到每个模块中进行进一步的分析。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
22599 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4502 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5465 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
444 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2146 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3831 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
1132 0
+关注
莫源
主要负责阿里云容器服务产品的底层服务发现系统、集群管理系统的研发,从事容器的持续交付、持续集成的方案的设计与实现。在云计算、分布式系统、图像识别与虚拟现实方向有多年的开发经验。个人博客:abandonzoo.com
53
文章
39
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载