从一到无穷大 #5 公有云时序数据库定价

news2024/12/28 5:14:30

文章目录

  • 引言
    • serverless
    • 实例售卖
    • 结论
  • Azure CosmosDB
    • 预配吞吐量
    • 自动缩放吞吐量
    • Serverless
    • 预留容量
    • 存储量
  • Amazon Timestream
    • 写入计费
    • 查询计费
    • 存储
  • 阿里云TSDB
  • 阿里云Lindom时序引擎
    • 实例固定费用
    • 存储费用
    • 节点费用
  • 华为云GaussDB(for Influx)
  • 腾讯云CTSDB
  • TDengine
  • InfluxDB Cloud
    • AWS
    • Google Cloud
    • Microsoft Azure

引言

使得公有云中架构不得不改变的关键因素有三个,disaggregation,multi-tenancy,serverless。

disaggregation由存储与计算资源需要分别扩容的需求驱动。
multi-tenancy则是源自于为每个租户提供专用硬件根本不符合成本效益,在租户之间共享资源能够使云供应商能够大幅降低提供服务的成本。
而serverless是为了在负载多变的情况下降低成本,租户不再需要提前为高峰期的使用提供资源,由云供应商根据数据库工作负载的需求来获取和释放资源,租户只需为其工作负载实际使用的资源付费。

从多租户的角度讲,安全性/性能与成本其实是互相矛盾的,[7]中提到:

• Degree of consolidation: The higher up in the stack virtualization is supported, the greater the degree of consolidation
achievable, leading to lower cost for the service provider.
• Degree of isolation: The lower down in the stack the virtualization logic is supported, the greater is the security and
performance isolation achievable across tenants.

所以为了成本的卖点,除了KV以外的其他模态时常会放弃提供吞吐量和延时的SLO,而是在实现上保证用户可以使用的资源最低限制,转而提供可用性的的SLO。因为为了保证性能的SLO需要预留资源,不但是POD内部的资源预留(高利用率导致性能下降),也还有POD的级别资源的预留。所以公有云服务提供商往往倾向于SLO要求高的用户独占资源,价格提高,而SLO需求不强的用户则降低价格,出售本来不会被使用到的资源。

从下面列举的各种公有云时序数据库提供方定价来看基本分为三类:

类别公有云服务提供方
存储量+RUCosmosDB
存储量+扫描数据量+写入数据量Influxdb Cloud,Amazon Timestream
存储量+实例+其他腾讯云CTSDB,阿里云Lindom,阿里云TSDB,华为云GaussDB(for Influx)

站在公有云服务提供商的角度:

  1. 存储量+RU:设计原则上看成本最低,因为RU本身代表了CPU/存储IO/网络IO/Memory四个维度的归一化抽象单位,本身可以最真实的反映用户所使用的资源数量。用户体验最好,但是有理解成本。
  2. 存储量+扫描数据量+写入数据量 :更加单一,因为时序场景计算需求也非常强烈,跨越一天的时间查询往往存在千万级别的时间序列,这导致在存储量之前可能有其他资源首先到达瓶颈,这对于提供商来讲意味着亏损,但是因为不提供预配吞吐量和自动缩放吞吐量,看起来就是一个阉割版的serverless。用户体验也不差,且容易理解。
  3. 存储量+实例+其他:对于用户和运营商来说都是成本较高的选择,因为资源本身大概率是闲置的,用户为了流量突发只能购买更大规格的实例,提供商为了保证流量突发也不能过度超卖这部分资源。

serverless

从定价上看前两种就是Serverless的一种体现,但是难点在于多租户的隔离。因为CPU的使用只会转移而不会消失,计算与存储分离可以使得存储层面租户间共享且隔离,但是计算节点此时仍旧独占,这对于公有云提供商来说仍旧是成本,因为我卖的是RU/扫描数据量,但是我还是有单独的机器分配给了某个租户。

如果计算节点共享,此时需要面对的就是CPU隔离的问题,DBaas对于此类问题的讨论已经持续十几年[9][10][11][12],已经拥有了成熟的解决方案,但是均需要从引擎上下手,投入开发的人力成本也不可小觑。

所以以目前的发展现状来看,计算与存储分离,计算层隔离需要引擎的定制化改造,存储层因为吐的是原始数据,基于RU的隔离完全够用,计算层和存储层都做多租户隔离,用户不关心规格,这样Serverless的定价就会非常利好服务提供商和用户。因为对于用户来说,我买了两台机器的RU/写入读取数据量(vcore转RU[13]),可能我的查询实际可能跑在几十台机器上,而且池子够大,业务的高峰流量完全可以hou住;对于提供商来说,因为用户业务属性的不同,我在超卖率极高的情况下仍旧满足用户的需求,且池子随时可以扩缩容。

实例售卖

不利好服务提供商和用户,运营商不敢超卖太多,用户不敢买规格太小。

结论

从上述结论来看,serverless的计费方式显然是大势所趋,但是因为时序场景的特殊,用单纯的扫描数据量无法衡量实际的资源使用情况,数据类型才是影响实际资源消耗的关键,比如iot,监控,trace,会议,直播等场景。维度数,Field稀疏程度,tag大小,短生命周期时间序列等等都对整体资源使用冲击极大,而且冲击是全方位的,存储成本(压缩率),CPU利用率,内存利用率,接入机和存储机器之间的数据传输量都受实际查询类型和数据类型的影响。

所以拥有一个精确衡量资源使用的RU计量方法,且基于此执行serverless收费+存储量是最优的方案。

这个方案有一个问题客观存在,即Dynamodb和CosmosDB对于RU框架有一个重要的约束是:为了方便管理和规划容量,确保针对给定数据集执行的给定数据库操作的 RU 数是确定性的以及用户的可理解性,Dynamodb和CosmosDB均使用扫描的数据量作为RU的计费单位。

时序场景因为查询的特殊性不存在像是KV模态一样稳定的基准线,即扫描的数据量无法代表实际集群的资源消耗(当其他维度先到达瓶颈是就会亏钱),所以不能精确衡量集群资源调度和分配租户,这就是矛盾痛处。

Azure CosmosDB

虽然没有标准的时序模态,但是cosmosdb的计费标准实在是太经典。计费方式分为预配吞吐量,自动缩放吞吐量和Serverless,显然的从RU成本上看,预配吞吐量>自动缩放吞吐量>Serverless。其实从实现的角度讲这么做很好理解,因为云服务是无限扩展的,但是给一个租户总是要预留预期的固定资源,当然这部分资源在实际的存储和计算几点上都是多租户共享的,那自然用户指定上限越高,收费就越贵了。

另外存储量,定期备份(大于两个),流水备份,multi region,专用gateway都是额外收费的选项。通过预留容量,包年的价格还可以优惠14%到44%。

这里很有意思的一点在于这里关于可用性只提到了region级别而没有提及到副本级别,理论上上我们最好给用户足够的自由性,用户不但可以指定副本数,region数,甚至可以指定副本的角色和一致性级别,以达到用户降本的需求。

预配吞吐量

在这里插入图片描述

自动缩放吞吐量

在这里插入图片描述

Serverless

在这里插入图片描述

预留容量

在这里插入图片描述

存储量

在这里插入图片描述
目前汇率算到话1人民币等于0.14美元,所以这里成本转化人民币分别为¥1.785和¥0.214,可以说是非常实惠了,至于行列导向价钱差别大的的原因也很好理解,列式的压缩比可以做到非常夸张,而行式就没那么容易了,而且还会因为比如集群容量预估不准确导致LSM树形不标准,额外元信息较多等原因造成容量上涨。这里计费采用的是压缩前的容量。

还有这里的容量规划器工具[1]还是很有意思的,以后我们这边也有一个这玩意就好了。

Amazon Timestream

Amazon Timestream按照下面四个维度收费,

  1. 写入次数:从应用程序写入表格的数据量(四舍五入到最接近的 KB)。
  2. 查询次数:Amazon Timestream 的无服务器分布式查询引擎在计算查询结果时扫描的数据量(四舍四入到最近的 MB,最小值为 10MB)。
  3. 内存存储:每个表的内存存储中存储的数据量
  4. 磁性存储:每个表的磁性存储中存储的数据量。

对于这样的定价策略其实可以看出aws还是对自己相当自信。

aws给出了一些优化成本的方法,参考[3]。我觉得其中很多方法我们可以用到,比如:

  1. 用通用属性减少用户的写入量
  2. 给用户一些减少查询使用量的建议,这同时也是保护我们自己,因为公有云中一些架构下多租户隔离还是比较难做的

写入计费

在这里插入图片描述

查询计费

在这里插入图片描述

存储

在这里插入图片描述

阿里云TSDB

TSDB的定价可以参考[5],一看就是典型的上一代云产品,基于Hbase的KV引擎,这种计费模式下其实做多租户很麻烦,因为单个集群盘子太小,超卖的风险太高,无法像云原生数据库那样做到优雅的隔离。

阿里云Lindom时序引擎

Lindom在公有云上的架构构成如下:

  1. Lindom实例固定费用
  2. 存储空间费用
  3. 节点费用(不同规格,不同引擎不同)
  4. 云盘
  5. LTS数据导入服务
  6. 备份
  7. 计算引擎下的弹性计算资源

仅仅看时序引擎,也是传统的按量付费和按照节点规格包月付费。目前Lindom 的架构在官方图中可以看到是LindomStore分布式文件系统之上构建多个协议的引擎,时序引擎则是由TSCore/TSCompute/TSProxy构成,可以想来给用户卖TSProxy,实际数据存储在TSCore,TSCompute做实时数据聚合和降采样(减少TSCore的资源使用)。

但是Lindom基于TSM/TSI的做法也会有不同场景导致性能/资源使用差异极大的情况,这种计费也很难满足一些极端客户的场景,可能会导致为了满足用户的场景,实例需要买非常大,价格收费非常高;而且因为不支持Serverless,虽然时序场景写入稳定,但是用户的查询却是不太稳定的,显然晚上BI分析,视图展示等需求就是会降低很多,这也是一大劣势点。本质其实在于用户可能无法很好的预估自己的使用规格,对用户来说可能造成很大的资源浪费,那用户可能会天天有扩缩容的需求,运营也很麻烦,但倘若支持serverless,不同的用户的就会有更适合的选择余地。

在这里插入图片描述
在这里插入图片描述

实例固定费用

在这里插入图片描述

存储费用

在这里插入图片描述

节点费用

在这里插入图片描述

华为云GaussDB(for Influx)

华为云的定价可以参考[6],定价策略更加简洁易懂,即就卖节点和存储,这也是存算分离下很经典的计费模式,但是华为的价格真是不便宜啊,比阿里快贵了一倍了。

值得一提的是华为规定了每台实例的可以的时间线上限和没次查询的field和时间线,我的想法就是无法支持基数爆炸的场景,基数爆炸对性能影响太大,只能紧止掉。

在这里插入图片描述
在这里插入图片描述

这架构图实在是不太走心,画的有点抽象,不过可以看出来和lindom是一个路数。在这里插入图片描述

腾讯云CTSDB

说是内存规格+存储空间,本质还是按照不同的节点规格收费,分为包年包月和按时间消费,不过这个阶梯式收费就很迷。
在这里插入图片描述

TDengine

需要联系销售,正在联系中。

InfluxDB Cloud

可以看到在各大公有云上的产品计费策略是使用存储量+实际查询数+查询数据量+写入数据量,不愧是垂直领域龙头,

AWS

在这里插入图片描述

Google Cloud

价格和AWS一致

Microsoft Azure

在这里插入图片描述

虽然各大公有云厂商没有规定基数限制,但是infludb cloud中是有限制的,但是需要联系销售,正在联系中。
在这里插入图片描述

参考:

  1. https://cosmos.azure.com/capacitycalculator/
  2. https://azure.microsoft.com/zh-cn/pricing/details/cosmos-db/
  3. https://docs.aws.amazon.com/timestream/latest/developerguide/metering-and-pricing.html
  4. https://help.aliyun.com/document_detail/387477.html?spm=a2c4g.610211.0.0.2e8a7c30QCWmwn
  5. https://www.alibabacloud.com/zh/product/hitsdb
  6. https://support.huaweicloud.com/influxug-nosql/nosql_05_0045.html
  7. Multi-Tenant Cloud Data Services: State-of-the-Art, Challenges and Opportunities
  8. Tenant Placement in Oversubscribed Database-as-a-Service Clusters
  9. SQLVM: Performance Isolation in Multi-Tenant Relational Database-as-a-Service
  10. Retro: Targeted Resource Management in Multi-tenant Distributed Systems
  11. 2DFQ: Two-Dimensional Fair Queueing for Multi-Tenant Cloud Services
  12. CPU Sharing Techniques for Performance Isolation in Multi-tenant Relational Database-as-a-Service
  13. https://learn.microsoft.com/zh-cn/azure/cosmos-db/convert-vcore-to-request-unit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++11下篇 + 智能指针

c11下篇 智能指针 1 可变参数模板1.1 递归函数方式展开参数包1.2 逗号表达式展开参数包1.3 STL容器中的empalce相关接口函数: 2 lambda达式2.1 c的痛2.2 lambda表达式语法2.3 函数对象与lambda表达式 3 包装器3.1 bind 4 线程库4.1 thread类的简单介绍4.2 面试题&a…

MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库

文章目录 MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库官方示例数据介绍world_x数据库world_x数据库安装world-db/world.sql的脚本内容参考 MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库 官方示例数据介绍 MySQL 官方提供了多个示例数据库&#…

差分数组 技巧小记

差分数组 差分数组二维差分 差分数组 如果两个信息“长得很像”,只要保留一个,对另一个,只要保留它们的差异,然后进行微调就行了。 差分数组: 3210,3208,3206,3211,32…

Three.js--》Gui.js库的使用讲解

目录 Gui.js库基本使用 使用three自带gui库实现基本操作 gui库实现下拉菜单和单选框 gui库分组方法实现 使用dat.gui第三方库 Gui.js库基本使用 gui.js说白了就是一个前端js库,对HTML、CSS和JavaScript进行了封装,学习开发3d技术时借助该库可以快速…

230502-LLM-Vicuna介绍、安装与注意事项整理

最终效果 在对话过程中,GPU与CPU均会有波动,但是主要还是CPU波动为主 相关资料 序号链接说明001本地CPU6G内存部署类ChatGPT模型(Vicuna 小羊驼) - 知乎极简安装版本,只支持CPU与命令行002最新开源语言模型 Vicuna 媲…

【Linux进阶之路】初始Linux

文章目录 一.时代背景二.硅谷发展模式三.操作系统基本定义常见的操作系统Linux系统的常见安装方式 四.基本指令的使用登录指令与用户相关的指令ls 指令——信息查看pwd指令——打印当前所处的文件位置cd指令——访问文件rm——删除指令touch——创建文件与修改文件信息tree ——…

Rust - 变量与数据的交互方式(clone)

在上一篇文章中我们介绍了变量与数据的交互方式-move,通过底层原理我们知道Rust 永远也不会自动创建数据的 “深拷贝”。因此,任何 自动的复制可以被认为对运行时性能影响较小。 但是如果我们 确实需要深度复制 String中堆上的数据,而不仅仅…

RT1010 PWM 组成配置和 PWMX 的使用

1. 前言 本篇博文将着眼于 i.MX RT1010 内部的 eFlexPWM,介绍其各个功能模块,以及 PWM 产生的原理。 2. 功能模块组成 以下是 RT1010 内部 PWM 的一个 Submoudle 的组成框图,从框图中我们可以看到: 自左向右依次有 Prescaler 对…

【C++入门】C++为什么要有缺省参数

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

后端程序员的前端必备【Vue】- 01 Vue入门

Vue概述与基础入门 1 Vue简介1.1 简介1.2 MVVM 模式的实现者——双向数据绑定模式1.3 其它 MVVM 实现者1.4 为什么要使用 Vue.js1.5 Vue.js 的两大核心要素1.5.1 数据驱动![请添加图片描述](https://img-blog.csdnimg.cn/963aca7d7a4447009a23f6900fdd7ee1.png)1.5.2 组件化 2 …

IDEA2022版教程上(下载、卸载、安装、新建工程、jdk设置、详细设置、新建/导入/删除 普通java模块、修改普通java模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)

0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言,熟悉了记事本、EditPlus、NotePad或Sublime Text3等简易开发工具的Java初学者熟练使用其他Java集成开发环境(IDE),需要转向IDEA工具的Java工程师们关注IDEA各方面特性的J…

BPMN2.0 任务-脚本任务

描述 脚本任务(script task)是自动执行的活动。当流程执行到达脚本任务时,会执行相应的脚本。 脚本任务用左上角有一个小“脚本”图标的标准BPMN 2.0任务(圆角矩形)表示。 脚本任务使用script与scriptFormat元素定义。 <scriptTask id="theScriptTask" nam…

Qt中的绘图事件

文章目录 QPainter 绘图绘图设备QPixmap QPainter 绘图 绘图事件 void paintEvent()声明一个画家对象 QPainter painter(this) this指定绘图设备画线、画圆、画矩形、画文字设置画笔 QPen 设置画笔宽度 、风格设置画刷 QBrush 设置画刷 风格 测试 #include "widget.h&quo…

科学计算库Numpy快速入门

目录 Numpy概述array数组数组结构数组类型数值运算排序操作数组形状操作数组生成函数四则运算随机模块文件读写 Numpy概述 NumPy 是 Python 中的一个开源数学库&#xff0c;提供了快速且便捷的数组处理功能&#xff0c;可以用来进行科学计算、数据分析、算法开发等多种任务。N…

InnoDB 磁盘结构及表空间 ( Tablespaces )

InnoDB磁盘主要包含Tablespaces&#xff0c;InnoDB Data Dictionary、Doublewrite Buffer、redo log和Undo Logs Tablespaces: 表空间分为系统表空间&#xff08;ibdata1文件&#xff09;、临时表空间、常规表空间、Undo表空间以及file-per-table表空间。系统表空间又包括双写…

CDH6.3.2-组件安装安全认证

HDFS 1.选择自定义。 2.选择HDFS ZK YARN然后点继续。 3.选择安装的主机。 4.审核更改默认就行&#xff0c;点继续。 5.配置HDFS的HA。 安装好以后点击hdfs进入实例就能够看到启动了高可用。 6.启动YARN的高可用。 KAFKA 更具需求修改资源 一直点继续就行了 FlUME HI…

CTF权威指南 笔记 -第二章二进制文件- 2.3 -静态链接

目录 地址空间分配 两个链接的方式 按序叠加 相似节合并 静态链接的详细过程 虚拟内存 重定位文件 静态链接库 地址空间分配 我们把之前的两函数分为两个文件 main.c extern int shared extern vooid fun(int *a,int *b); int main(){int a100;func(&a,&share…

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part III)

MySQL监控告警及可视化&#xff1a;ZabbixPercona PMP实现&#xff08;Part III&#xff09; 告警配置配置告警邮箱配置告警消息模板配置告警用户配置告警规则告警测试 告警配置 配置告警邮箱 在Zabbix Web前端的 Administration - Media Types - Email 中配置发送告警信息的…

什么是恺撒密码?如何用Python实现它(36)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 猫妹目前在看的&#xff0c;ycl Python等级考试五级教材&#xff0c;有一章是介绍恺撒密码的。 今天&#xff0c;咱们…

2023-5-2面试题学习

1、内存的可见性你了解吗&#xff0c;讲述一下&#xff1f; 内存可见性是指多个线程访问同一共享变量时&#xff0c;在一个线程修改了该变量值后&#xff0c;下一个线程能立即看到这种变化的能力。 如果一个变量在多个线程间共享&#xff0c;那么为了避免出现数据不一致的情况&…