2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

使用托管数据库的隐性成本

  • 2024-03-21
    北京
  • 本文字数:3530 字

    阅读完需:约 12 分钟

大小:1.73M时长:10:06
使用托管数据库的隐性成本

本文要点

  • 托管关系型数据库有代管、可扩展和成本方面的优势,其使用量近来急剧上升。

  • 用户需要监控服务成本,其中包括出口费,并修改其工作负载的默认设置。

  • 用户应该了解使用托管服务时所涉及的运营成本。

  • 用户必须更多地了解其局限性,例如缺乏灵活性、可观察性等。

  • 用户必须对何时使用托管数据库解决方案做出明智的决定。

 

2024 年,云计算无处不在,但很多时候并不引人注意(如 iCloud 和 Google Docs)。云计算已经变得像真正的云一样无处不在。云计算的许多优点,如弹性、可扩展性和易用性,现在都得到了很好的理解。它们缩短了新产品上市的时间,并解决了现有产品的扩展挑战,而且无需经历艰辛的计划和采购过程。

 

由于存在这些优势,我们看到,人们对数据库、消息队列、应用程序运行时等托管服务有着巨大的需求。然而,本文要讨论的是云计算较少讨论的一面:使用托管服务(特别是托管关系型数据库)的隐性成本。

 

作为Cloudflare数据库从业者Omnigres构建人员,我有在纯内部部署、公有云和混合等环境中开发、管理和操作数据库的经验。从业务角度来看,每种模式各有其优缺点。一旦公司采用了公有云,使用任何托管服务都变得相当简单,数据库只是一次点击而已。

 

一项服务想要吸引用户使用首先得具备易用性。如果它在大多数情况下都有效,那还有什么理由不继续使用,甚至更进一步呢?为什么不创造更多这样的东西呢?

 

成本——实实在在的美元

来自云提供商的托管数据库在运行、备份和监控等方面提供了很多价值。它们还提供了高可用性。在 SCaLE20x 大会上,我介绍了构建自托管数据库服务的挑战:将这项工作转移给提供商可以减少运营成本,缩短上市时间,并带来更多的灵活性。当然,提供商提供了这些好处,就得向用户收费。

 

首先,计算托管数据库的成本并不简单。成本取决于多种因素,例如:

  1. 实例大小和类型(小、大、超大)

  2. 定价模型(按需、预留)

  3. 存储(通用、预配置 IOPS、实际 IOPS)

  4. 数据传输成本(VPC 内/VPC 外、区域间/区域内)

  5. 实例引擎(PostgreSQL、MySQL、SQL Server 等)

  6. 备份存储频率和保留时限

  7. 部署类型(单/多 AZ、无服务器)

 

尽管很复杂,但还是可以量化的。有些第三方工具可以简化价格计算。此外,诸如禁用多可用区域、停用开发环境实例等也是很常见的成本优化措施。沃尔玛等公司开始转向混合云。与此同时,像Basecamp这样小一些的公司出于成本考虑,已经将他们的大部分服务从云上迁移了出去。

 

要了解托管服务的成本是否值得,就必须了解其使用模式。云计算的主要优点是灵活性;如果不需要这个,也可以在自己的硬件上运行数据库。让我们看一些成本更主观、更难以度量的领域。

 

负载失控,无谓支出

云计算独有的价值主张之一是可扩展性。如果网站或产品一夜成名,也不需要购买基础设施来支撑暴涨的工作负载。这很好,但有一个问题,如果不谨慎使用,也可能会造成意外。想象一下,数据库上有一个失控的或恶意的工作负载,由于许多云提供商都是根据 IOPS 或 CPU 时间等收费,所以这些工作负载可能会无谓地产生一笔数额巨大的账单

 

出口费——数据进来容易,要出去就不那么简单了

在多云或混合云设置中,服务需要跨不同提供商的网络进行通信。通常,将数据(入口)传入托管数据库不会产生数据传输成本。然而,将数据传出(出口)则是有成本的。对于需要从托管数据库服务传出数据的企业来说,出口费是一个重要的成本因素。从某种意义上说,这是为了限制用户迁出他们的数据

 

像 Cloudflare 这样的提供商非常清楚这一挑战,他们创建了带宽联盟,旨在降低或免除成员提供商之间的数据传输成本。最近,谷歌云取消了将数据迁移到另一家云提供商的数据传输费。这种做法是如此的不公平,以至于欧盟和英国的监管机构正在积极进行调查

 

运营成本——还是有很多事情要做

虽然服务提供商负责第 0 天的操作,但用户还是要面对第 1 天和第 2 天的挑战。期望提供商解决所有的运营挑战是不合理的。不过,了解下需要做些什么操作以及涉及哪些成本还是好的。

 

a)二次备份

数据是业务的核心。我认为,如果数据完好无损,任何软件业务都可以重建。作为一名数据库工程师,数据丢失是我迄今为止最大的噩梦。执着于备份并不是一件坏事。完全依赖提供商进行备份就像把所有鸡蛋放在一个篮子里。即使提供商提供了一个很好的 SLA/SLO,但是完全丢失备份的风险依然存在。

 

在大多数情况下,保护数据是企业对最终用户的责任。大多数成熟的组织在其主要服务提供商之外都有二次备份。要做到这一点,就得付出存储和计算、数据传输和工程成本。

 

b)备份恢复

备份的质量由恢复能力决定。如果备份无法恢复,那么它们还有什么价值呢?遗憾的是,在这方面,许多提供商都没有做任何事情,而是把这部分工作留给了他们的用户。这个问题很复杂,但也很容易理解,因为提供商无法知道每家企业的需求。因此,用户需要经常进行自动或手动测试,以验证备份及恢复过程的完整性。

 

服务停止——这是常有的事

遗憾的是,随着事情的发展,有些服务可能会停止。去年,Azure 上的MariaDB就退役了。Aurora Serverless V1在2024年后也将不再支持。如果数据库是闭源的,那么唯一的出路就是使用提供商提供的工具将其导出到其他地方。实际上,数据迁移的架构必须能够减少数据丢失和服务停机时间。如果服务是基于像 Postgres 这样的开源数据库,甚至是使用了开放协议(例如 Postgres Wire Protocol),那么迁移起来就更容易一些。然而,数据库/数据迁移总的来说是很痛苦的。

 

缺乏灵活性——无法完全控制

由于托管服务往往会专注于解决常见的问题,所以有时很有局限性。提供商必须为数千客户管理许多服务,因此很难甚至不可能提供充分的灵活性。可能开始的时候,这听起来并不是什么问题,但随着业务的发展,那可能会开始造成伤害。例如,Postgres 有一个庞大的扩展生态系统

 

许多托管服务只允许安装其中的一部分扩展。例如,AWSGCP不支持pg_ivm(增量视图维护)和zombodb(简化 Postgres 中的搜索)等开源扩展,这可能严重限制你可以构建或依赖的特性

 

缺乏可见性——发生了什么?

作为一名工程师,没有什么比有工程问题无法解决更让我沮丧的了。在某种程度上,数据库可以看作是一个黑盒子。大多数数据库用户都把它们作为存储和检索数据的地方。他们不用太关心数据库里发生了什么。尽管如此,当某些东西出现故障时,用户仍然可以使用提供商提供的工具排除故障。

 

通常,提供商会使用一些虚拟化技术(虚拟机、容器)来运行数据库,有时甚至由编排器(如 k8)来操作。而且,对于运行数据库的服务器,它们不一定会提供完整的访问权限。多层抽象并没有让事情变得更简单。

 

虽然提供商不提供完整的访问权限是为了防止用户“搬起石头砸自己的脚”,但可能会有高级用户需要更高的权限来了解不同栈上发生的事情并解决潜在的问题。这是我选择自托管软件时考虑的主要因素,目的是获得最大的控制权限。这可能涉及到托管在我本地的数据中心或利用一些基本组件,如虚拟机和对象存储,让我可以创建和管理我的服务。

 

此外,在Hacker News等论坛上也有大量关于自托管与托管服务的讨论。其中一条评论总结道:

这里(自托管)肯定有一些东西需要考虑。不过,我发现大多数人都大大高估了与之相关的工作量。

 

此外,他们往往低估了使用托管解决方案时所需的工作量。例如,即使对于托管选项,你肯定也希望进行二次备份和恢复测试。

 

我注意到,还有一个副作用是,团队倾向于在遇到问题时投入更多的资金(增加实例大小),希望借此在无法确定根本原因的情况下解决他们的一些挑战。根据Ottertune(一家专门从事数据库工作负载调优的公司)的说法,如果不经过专业的调优配置,即使是增加实例类型,也不会带来成比例地性能提升

 

无论你的技能水平如何,这个挑战也都几乎是无法解决的。例如,Kyle Kingsbury是分布式系统专家,也是Jepsen test(用于验证分布式系统的安全性和一致性)的作者。在测试 MySQL 8.0 版本的正确性时,他遇到了一个数据库复制问题,并向服务提供商寻求了支持。

 

一个越来越明显的趋势是,服务提供商依赖于其他托管提供商来交付解决方案。然而,当基础提供商未能满足期望表现不佳时,他们就会产生挫败感。关键是,即使支付了高昂的价格,并与供应商签订了业务 SLA,他们也无能为力。

 

权衡

你可能已经注意到,本文有一个不变的主题,就是权衡。本文的目的不是阻止任何人使用云计算或托管服务。本文主要是为了让人们意识到其中所涉及的成本、保持开放和提供商锁定之间的界限、有限的功能集、可见性的缺失以及必须进行的 Day-2 操作。

 

当第一次开始使用托管数据库服务时,我并没有留意到这些方面。希望本文能帮助开发商和运营商做出明智的决定。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://www.infoq.com/articles/managed-relational-databases-costs/

2024-03-21 17:206788

评论

发布
暂无评论
发现更多内容

整理混乱的头文件,我用include what you use

华为云开发者联盟

c++ 开发 C语言 技能

“只跑一趟”,小区装维任务主动推荐探索

鲸品堂

运维

解密函数计算异步任务能力之「任务的状态及生命周期管理」

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

多模输入事件分发机制详解

OpenHarmony开发者

Open Harmony

湘江鲲鹏加入昇腾万里伙伴计划,与华为续写合作新篇章

极客天地

一文掌握数仓中auto analyze的使用

华为云开发者联盟

数据库 sql 后端 analyze

实战模拟│JWT 登录认证

经验分享 JWT 开发语言 7月月更 跨域认证

可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成

Apache SeaTunnel

数据同步 数据集成 可视化开发 数据集成平台 拖拉拽

英特尔集成光电研究最新进展推动共封装光学和光互连技术进步

科技之家

联想首次详解绿色智城数字孪生平台 破解城市双碳升级难点

科技大数据

托管式服务网络:云原生时代的应用体系架构进化

阿里巴巴云原生

阿里云 云原生 服务网格

能源势动:电力行业的碳中和该如何实现?

脑极体

赋能数字经济 福昕软件出席金砖国家可持续发展高层论坛

联营汇聚

智洋创新与华为签署合作协议,共同推进昇腾AI产业持续发展

极客天地

广电五舟与华为签署合作协议,共同推进昇腾AI产业持续发展

极客天地

使用 BlocConsumer 同时构建响应式组件和监听状态

岛上码农

flutter ios 安卓 移动端开发 7月月更

python小知识-python泛函数

AIWeker

Python python小知识 7月月更

应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设

SelectDB

数据库 数据中台 Apaache Doris

基于Netty,徒手撸IM(一):IM系统设计篇

JackJiang

网络编程 Netty 即时通讯 im开发

DevEco Device Tool 3.0 Release带来5大能力升级,让智能设备开发更高效

HarmonyOS开发者

HarmonyOS

linux实战清理挖矿病毒kthreaddi

入门小站

Linux

使用 MyBatis 操作 Nebula Graph 的实践

NebulaGraph

mybatis 图数据库 Nebula Graph

华为nova 10系列支持应用安全检测功能 筑牢手机安全防火墙

科技汇

在线文本行固定长度填充工具

入门小站

工具

CANN算子:利用迭代器高效实现Tensor数据切割分块处理

华为云开发者联盟

人工智能 算子 迭代器

HUAWEI nova 10系列发布 华为应用市场筑牢应用安全防火墙

最新动态

Nebula Importer 数据导入实践

NebulaGraph

图数据库 数据导入 Nebula Graph

在线SQL转Excel(xls/xlsx)工具

入门小站

工具

上线首月,这家露营地游客好评率高达99.9%!他是怎么做到的?

天天预约

小程序 SaaS 线上预约 预约工具 露营

扩展你的KUBECTL功能

mengzyou

Kubernetes DevOps kubectl krew

玩转gRPC—深入概念与原理

闫同学

gRPC 网络协议 后端开发

使用托管数据库的隐性成本_数据库_Vignesh Ravichandran_InfoQ精选文章