从一到无穷大 #18 时序数据库运营SLI思考

news/2024/7/4 7:37:45 标签: 时序数据库, 数据库

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

公有云数据库>时序数据库SLA

运营商产品每服务周期服务可用率不低于99.9%衡量服务不可用数据指标从采集到用户可查询的延时
阿里云TSDB[1]当某一分钟内,客户所有试图与指定的云数据库实例建立连接的连续尝试均失败,则视为该分钟内该云数据库实例服务不可用。 在一个服务周期内云数据库实例不可用分钟数之和即服务不可用分钟数。
金山云influxdb[2]当客户所有试图与指定的单个InfluxDB实例建立连接的尝试均失败,且该状态持续一分钟或更长时间则视为该InfluxDB实例服务不可用。
天翼云influx[3]指依照数据库>时序数据库Influx版服务系统中日志记录,因天翼云原因数据库>时序数据库Influx版实例连续超过五分钟无法访问,低于五分钟的不可用时间不计算在内
TDengine[4]没在公开页面找到
Lindorm[5]一个计费月内,您的服务中所有运行实例均无法与外部连接或无法运行的总分钟数。
Amazon CloudWatch [6]对于 Amazon CloudWatch Metrics API 调用和 Amazon CloudWatch Logs Data Ingestion API 调用,此类功能处理的请求在 5 分钟时间间隔内因服务器错误而失败的百分比;以及对于 Amazon CloudWatch Alarms,5 分钟时间间隔内 Amazon CloudWatch Alarms 未处理的规则百分比。并没有规定在SLA中[7]在这里插入图片描述
百度云TSDB[8]当用户所有试图与指定的TSDB实例建立连接的连续尝试均失败,且状态持续超过5分钟以上,则视为该分钟内该TSDB实例服务不可用。 在一个服务周期内TSDB实例不可用分钟数之和即服务不可用分钟数
腾讯云数据库[9]99.95%当某一分钟内,客户所有试图与指定的云数据库实例建立连接或者读写请求连续尝试均失败,且该状态持续1分钟以上,则视为该分钟内该云数据库实例服务不可用。
GaussDB NoSQL (GaussDB NoSQL)[10]指依照云数据库GaussDB NoSQL系统中日志记录,因华为云原因导致云数据库GaussDB NoSQL实例连续超过五分钟无法访问的情形,不超过五分钟的不可用时间不计算在内。
influxdb cloud 2.0[11]通过 InfluxDB API 发起的任何读取、写入、任务或管理操作,“不可用”表示在一分钟间隔内对服务的所有连续请求均失败并返回 5xx 错误代码。“不可用”具有相应的含义
influxdb cloud 3.0[12]通过 InfluxDB API 发起的任何读取、写入、任务或管理操作,不可用”是指在一分钟间隔内对服务的所有连续请求均失败并返回 5xx 错误代码
Amazon Timestream[13]99.99%“不可用”和“不可用”是指所有时间流请求在 5 分钟间隔内响应错误。“错误”是指返回 500 或 503 错误代码的任何请求

运营SLI指定

读者首先应该理解Service Level ObjectiveService Level AgreementService Level Indicator之间的区别。

事实上在我看来SLO和SLA是偏向交付的概念,更关心系统的整体运作水平,而对于日常的运营工作,我们更关注SLI的健康情况;其次因为SLA与钱挂钩,相对来讲厂商不会激进的设定SLA,并会附加上严苛的免责条款,但是对于日常运营,在出现意外情况是我们仍然应该准确的获取SLI的值,以此发现,分析并解决问题。

KV系统模型,链路均较为简单,且约束明确(存在时延,可用性,一致性约束),我们可以设定如下指标作为内部人员分析问题的指标水平:

  1. 失败量
  2. 平均延时
  3. 聚合分钟粒度最小成功率
  4. 聚合分钟粒度最大P99

但是时序系统并不一样:

  1. 首先写入链路复杂,存在直连proxy,kafka,prometheus等写入方式(写入请求不能用简单的写入时延,成功率统计);
  2. 其次系统内部关心整体趋势,对于零星的失败容忍性远大于KV系统,只要重试成功问题就不是很大(对于请求成功率本身要求并不是特别高)
  3. 慢查询是可预期的,因为存在用户做长周期的分析需求,时序的特殊性会导致扫描几乎全量数据,这并不是错误的(查询不能像kv一样统一分析,也就是说P99指标用处不大)
  4. 有时与业务捆绑较深,比如一个页面可能触发N次查询,当多人同时点击页面时,如果只是衡量系统侧每一个查询性能是片面的,应该从用户的角度分析,将一个session内的查询视为一个整体,用session粒度去做分析,这样服务降级也好做;

暂且不考虑技术,站在用户的角度我认为只有两点较为重要:

  1. 数据产生到实际可读整体链路(kafka,prometheus,直连)需要的时间,包含错误/重试(请求失败,过载不care)
  2. 一个用户session内的查询时延 (单次查询时延不care)

站在开发的角度则需要更为细致的指标,简单来讲如果我运营一个数据库>时序数据库系统,如何能够衡量健康情况,如何快速发现问题

  1. 数据产生到实际可读的时间消耗(包含写入kafka延迟,数据在Kafka停留时间,接收到数据整体处理流程的时延,包含总体失败重试时延)
  2. 一个用户session内查询总体时延(体现在用户感受上):失败量,平均延时,聚合分钟粒度最小成功率 ,聚合分钟粒度最大时延P99;
  3. 时间范围覆盖较小的查询请求:失败量,平均延时,聚合分钟粒度最小成功率 ,聚合分钟粒度最大时延P99;
  4. 时间范围覆盖较大的预期慢查询,所以需要感知慢查询对应的sql,时间线和数据量,要让慢查询预期的慢,不符合预期的慢时需要分析原因;

事实上这样决策的原因有这么几点:

  1. 读写差异巨大,读写的SLI设定应该分离,而且写入偶尔的失败是可预料的,频繁的告警没有意义
  2. 数据库内的写可能只是链路的一部分,我们希望跟踪全链路的写入指标
  3. 时间范围不同的查询告警指标的设定应该不是一致的
  4. 我们希望通过session做服务降级,也希望更好的理解业务层面的SLI,单独的查询分析不能cover这一场景

当然还有用于大盘数据展示集群整体趋势的监控数据指标,这个不再细谈,大体思路就是cluster,pod,account,database,account,partition,measurement级别的数据分析;kafka本身topic/partition的待commit数,生产速度,消费速度等。

当然本篇文章只讨论读写;CQ,降采样,流计算的SLI我们不讨论,但是链路和指标本身也都很有考量的余地。

总结

工作已经一年多了,从COS索引层到云原生多模数据库,愈来愈发觉监控体系和运营手段之于一个云数据库系统的重要程度,运营的能力和工具自动化也是各大厂商雄厚能力的体现,当然也是工程师综合素质提升必须要过的一关,不会运营永远不能有底气的说自己做过存储和DB。

参考:

  1. 时序时空数据库(TSDB)服务等级协议
  2. 金山云数据库>时序数据库InfluxDB服务等级协议
  3. 天翼云数据库>时序数据库Influx版服务等级协议
  4. 万字解读|怎样激活 TDengine 最高性价比?
  5. Lindorm Service Level Agreement
  6. Amazon CloudWatch Service Level Agreement
  7. CloudWatch Publish custom metrics
  8. 数据库>时序数据库TSDB服务等级协议SLA(V2.0)
  9. 腾讯云云数据库服务等级协议
  10. 数据库 GaussDB NoSQL (GaussDB NoSQL)服务等级协议
  11. InfluxDB Cloud 2.0 Service Level Agreement
  12. InfluxDB Cloud 3.0 Dedicated Service Level Description
  13. Amazon Timestream Service Level Agreement

http://www.niftyadmin.cn/n/5091650.html

相关文章

open stack安装

啥意思csdn不让用了啊?

【Linux】线程属性的定义如何修改线程属性(附图解与代码实现)

我们知道,在创建线程时,会用到pthread_create()函数 ,我们来简单介绍一下该函数: pthread_create(线程的tid , 线程属性 , 工作函数名 , 函数需要的参数); 这篇博客要讲的线程属性&#xff0c…

动态内存管理改造简易通讯录

动态通讯录 本章内容基于上章内容实现,具体情况若有不清楚,请先查看上一篇文章。 动态通讯录实现了,动态开辟,如果存放满了,再开辟空间进行存储,相对静态更方便一些。 动态通讯录需要改造的地方 我们基于…

mp4文件怎样提取mp3音频文件

Mp4视频文件怎样提取mp3等音频文件呢? 推荐一个免费网址,且不用任何注册,直接可以使用 https://audio-extractor.net/cn/ 上传视频,选择转换的音频格式, 更多格式,包括如下: 转换文件完成后…

记一次密码控制功能

需求:控制应用启动,蓝牙开启,USB切MTP模式 原理:设置里面定义一个PrizeCheckPasswordActivity.java用于验证密码,修改密码,定义一个receiver用于从系统服务中发广播启动Activity.系统服务中不能直接启动Pr…

【linux kernel】linux内核设备驱动的注册机制

文章目录 1、简介2、driver_register分析👉(2-1)driver_find分析👉(2-2)bus_add_driver分析 3、总结 🔺【linux内核系列文章】 👉对一些文章内容进行了勘误,本系列文章长…

【算法与数据结构】--常见数据结构--树与图

一、二叉树 二叉树(Binary Tree)是一种重要的树状数据结构,它由节点构成,每个节点最多有两个子节点:一个左子节点和一个右子节点。这种结构使得二叉树在计算机科学和编程中具有广泛的应用。 1.1 二叉树的基本特性&am…

Qt6开发的网络通信工具(支持TCP和UDP)

1. 页面展示 1.2 通信展示 1.2.1 UDP 通信显示 注意:前面的R表示时接收消息,S表示的是发送消息。 1.2.2 TCP通信显示 注:勾选服务器后,出现客户端连接列表,可以群发消息和私发消息。 3. 程序下载 应用程序免费下载&a…