写点什么

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

  • 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:206697

评论

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

速度和质量不可兼得,为什么DevOps落地如此困难?

飞算JavaAI开发助手

揭秘!网易有道技术岗实习生都在做什么?

有道技术团队

招聘 实习 网易有道

郑泽康:一名热爱技术的“保安”|OneFlow U

OneFlow

人工智能 机器学习 深度学习 程序人生 cuda

手把手教你从Apk中取出算法

奋飞安全

android 安全 java

windows下C与C++执行cmd命令并实时获取输出

DS小龙哥

3月月更

ABAP 文件上/下载

Jasen Ye

upload abap download template GRAPHICS

云原生时代已来,计算机教育如何因「云」而变?

阿里云弹性计算

云原生 ECS 计算机教育

从HDFS的写入和读取中,我发现了点东西

华为云开发者联盟

hdfs HDFS写入 HDFS读取 文件读取

【直播回顾】OpenHarmony知识赋能第四期第三课——I2C驱动开发

OpenHarmony开发者

OpenHarmony 驱动开发

大数据培训连续登录经典面试案例

@零度

大数据

你的“数学潜意识”原来可以被唤醒!

博文视点Broadview

项目管理标准化的武林秘籍

大智若愚

团队管理 项目管理 标准化 软技能 标准框架

java培训如何用反射做简易 Spring IOC 容器

@零度

Java springloc

容器化 | K8s 部署 RadonDB MySQL Operator 和集群

RadonDB

MySQL 数据库 Kubernetes 高可用 RadonDB

利用亚马逊云科技整个自用免费网盘

亚马逊云科技 (Amazon Web Services)

Builder 专栏

数仓如何设置大小写不敏感函数

华为云开发者联盟

MySQL DWS GaussDB(DWS) 大小写不敏感函数 GUC参数

从多快好省到好快省多,您的项目管理走对了吗?

禅道项目管理

项目管理

一首古诗带来的图数据库大冒险

NebulaGraph

知识图谱 实践案例 分布式图数据库

OceanBase 源码解读(九):存储层代码解读之「宏块存储格式」

OceanBase 数据库

源码剖析 oceanbase

ABAP excel数据上传函数改造

Jasen Ye

Excel upload abap

如何升级到 React 18

CRMEB

web前端培训如何用CSS来实现透明方格

@零度

CSS web前端

对于金融机构而言,为什么选择私有化IM比企业微信、钉钉更好?

BeeWorks

知识管理在企业竞争发展中的作用

小炮

知识管理

WebGL 及其在 WebRTC 中的应用

ZEGO即构

WebRTC WebGL 实时音视频 即构科技

实践丨SpringBoot整合Mybatis-Plus项目存在Mapper时报错

华为云开发者联盟

spring 容器 Spring Boot 测试 Mybatis-Plus

微服务架构下消息服务多通道设计思路

全象云低代码

微服务 低代码 后端开发 消息中间件 后端技术

Meetup预告|云原生时代热门监控利器解析与应用

云智慧AIOps社区

运维 云原生 安全 监控工具

SeaTunnel 在 oppo 的特征平台实践 | ETL 平台数据处理集成

Apache SeaTunnel

Big Data 大数据平台 大数据开发 apache 社区 opensource

加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源

华为云开发者联盟

软件 DevOps 代码托管 智能调度 华为云DevOps

Facebook 开源 Golang 实体框架 Ent 现已支持 TiDB

PingCAP

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