身处大数据时代,信息的巨浪汹涌而来,其中夹杂着各种各样多元化的数据,怎样能够在这形势下高效地去获取相关数据,怎样高效地进行存储,怎样高效地展开分析,并且怎样高效地加以应用,这些现如今已变为技术团队需面对的核心挑战。
鉴于众多技术栈的存在,时序数据库,也就是Time Series Database,凭借其与众不同的数据模型,以及出色的读写性能,在处理监控数据,还有物联网指标等时间序列数据时,成为了第一选择手段,是这样的情况,有的。
围绕这一技术,本文会深入探讨它的数据库设计,还会探讨其 SQL-like 操作,也会探讨性能优化以及运维实战,目的是构建一个具备高可用特性、拥有可扩展能力的数据监控与分析平台。
深入理解时序数据库的数据模型
时序数据库的核心在于其针对时间戳优化存储结构。
于传统关系型数据库里的“行”概念相对应而为,时序数据库之中的一个数据点,也就是Point,是由三部分予以构成的,其一为时间戳,也就是Time,其二为标签,也就是Tags,其三为字段,也就是Fields。
时间戳:标识数据点产生的时间,是数据模型中的强制索引。
标签(Tags):是那种被索引的属性,一般是用来叙述数据源的元信息了,就像主机名、那种区域、还有各种各样的用户类型此类情况等。
高效查询,以及分组聚合,即Group By,其关键在于Tags。
字段(Fields):那是实际进行测量所获取到的值,其中包括像CPU使用率,还有内存占用情况,以及网络流量等这些方面。
字段通常不建索引,适合存储数值型数据并进行数学运算。
例如,存在一条用来记录小区上网流量的数据,能够把“小区名称”以及“运营商”设置成 Tags,会将“下行流量”还有“上行流量”设置为 Fields。
如此这般的设计,致使时序数据库得以凭借极高的压缩比,去存储海量的数据,并且借助Tags的任意组合,达成多维度的快速筛选。
数据库设计与高可用架构
在生产环境中,时序数据库的部署需要兼顾性能与容灾。
以下是一个典型的高可用设计实践:
先来说主备与负载均衡,为了防止出现单点故障这种情况,为此推荐去部署两个时序数据库实例,将它们用作主备节点。
运用虚拟IP ,也就是 VIP 技术,借助负载均衡器,像 Nginx 或者 HAProxy 这类的 ,把同一个域名对应映射到那俩后端节点。
如果主节点出现故障状况,那么VIP能够自动漂移到备用节点那里,达成服务的高可用切换状态。
2. 端口映射规划:时序数据库常常会给出好些服务端口,像是供客户端通信使用的 API 端口,以及用于集群内部通信的端口。
论及负载均衡这一方面,得要清晰明了地去规划映射的关系,要保证前端应用(类似数据展示工具这般)以及后端写入程序能够凭借域名加上端口这样的形式稳定地对数据库集群进行访问。
3. 权限精细化管控:企业级应用必须保障数据安全。
采用修改配置文件这种方式(譬如将 auth-enabled 选项开启),能够给数据库启用那种细粒度的权限控制,这种控制精确到了“表”这个级别。
只读角色(READ),被分配到数据可视化应用那里,或者是后台查询系统之中,以此来防止污染源数据出现误操作的情况。
仅书写角色(WRITE):分派给数据采集程序,保证数据能够持续不间断地写入,与此同时防止采集端具备读取权限可能引发的数据泄露危险。
管理角色:用于日常的数据库维护和 schema 变更。

数据写入与查询优化实践
原生的 HTTP API,是时序数据库提供出来的一大优势,借助它,将数据写入就变得极为便捷。
高效写入技巧:
凭借 curl 指令,或者编程语言里的 HTTP 库,能够简便地把数据推送至数据库。
数据格式需严格遵守协议:, 。
例如:
运用curl工具,以详细的方式,包含具体明细,执行POST请求,请求的目标地址为"http://:8086/write?db=&u=&p=" 通过指定参数,按照特定格式,发送数据,数据内容被设定为"net_metrics,region=华东,isp=移动 downstream=56,upstream=21 1672531200000000000"。
在此处,有对数据库的指定,还有认证信息的明确,并且借助 --data-binary 来传递精确的数据点。
于实际代码里面,要运用连接池以及批量写入即Batch Write,以此去显著提高吞吐量。
查询与聚合分析:
支持强大类SQL语法的时序数据库,内置了诸多聚合函数,像 MEAN(),还有 SUM(),以及 MAX(),包括 MIN(),再有 COUNT(),另外还有用于百分位统计的 PERCENTILE()。
这么搞能让从事运维工作的人员,轻轻松松地达成譬如“过往二十四小时CPU平均负载”、“本周峰值流量”这类复杂的查询操作。
可视化与智能运维
数据存储的最终目的是为了洞察与分析。
把时序数据库跟专业数据可视化工具相联合,可将其价值最大限度地呈现出来。
1. 对于数据源配置而言,于可视化工具当中,像Grafana这种,要把时序数据库配置成数据源。
因要匹配具备高可用特性的架构,那么URL应当直接去填写负载均衡器所拥有的域名,通过这样做来保证可视化层不会去在意后端数据库那种拓扑方面的变化。
版本较新时,时序数据库生态有支持的告警功能,此告警功能可通过可视化工具集成,也能够内置,这就是所谈到的告警规则配置。
可以针对查询结果设置阈值告警。
比如说,去配置这么一条规则:SELECT MEAN(used_percent) FROM"disk_usage" WHERE"host" = 'web-server' AND time > now() - 10m ,在那通过计算得出的均值超过百分之九十的时候,借助 Email、Slack 或者 Webhook 来触发报警。
监控面板设计,借助Tags组合的合理运用,能够在一个图表里绘制多条曲线,进而直观对比不同主机也就是HDFS节点的实时状态,以及不同队列即Kafka消费堆积的实时状态,并且对数值结果加上阈值线进行叠加操作,最终形成清晰易懂的运维大盘。
系统层运维保障
除了数据库本身的调优,底层系统的稳定性同样关键。
打个比方,去部署两台虚拟机,让它们各自去承载时序数据库实例,与此同时,在系统层面进行主备模式的配置,再搭配上域名解析与负载均衡,如此一来,能够有效地去应对因主机网络出现通断情况或者服务出现异常状况而导致的中断问题,最终保障数据采集链路能够持续保持可用状态。
经由上述涵盖数据模型、高可用架构、API 操作以及可视化监控的全盘实践,我们缔造了一个结实、高效、具备可扩展性的时序数据平台。
它不但解决了海量指标数据的存储问题,还解决了海量指标数据的计算问题,而且通过精细化的权限管理,还通过智能告警,切实达成了用数据给予言论依据、用数据提供决策支撑这样的运维目标。

Comments NOTHING