探索选择无服务器数据库时的关键注意事项。本文比较了流行的数据库,以帮助您做出明智的决定。
无服务器架构是一种已经存在多年的范式,它一直在改变我们构建和部署应用程序的方式。在这种方法中,开发人员可以专注于编写代码,而不必担心底层基础结构。他们可以依靠云提供商来处理其应用程序的扩展、维护和可用性,而不是管理服务器或虚拟机。
虽然无服务器架构已经存在了很长时间,但直到最近几年,无服务器数据库的概念才受到广泛关注。传统上,数据库具有有状态和性能敏感的性质,在采用无服务器方法时带来了挑战。然而,数据库的本质是简化数据管理,使开发人员能够专注于他们的核心业务目标。在这种情况下,探索和理解无服务器数据库对于支持开发人员来说可能很有价值。
那么,在选择无服务器数据库时应该考虑什么?让我们通过比较和分析流行的无服务器数据库(如TiDB,MongoDB,AWS Aurora,CockroachDB和DynamoDB)来深入研究这个主题。
适用性
选择数据库时,无论是否使用无服务器体系结构,都必须考虑其适用性。您应该选择通用数据库还是专用数据库?虽然专业数据库在特定场景中可能更方便和有利,但它们可能不是技术团队的唯一关键因素。有时,您需要平衡多个技术堆栈带来的复杂性、人才招聘的困难以及运营和开发的成本。
与传统的关系数据库相比,像DynamoDB或MongoDB这样的NoSQL数据库通常被认为具有更好的可扩展性和性能,因为限制较少。但是,用户最终可能会付出高昂的代价来补偿他们放弃的NoSQL功能。例如,他们可能需要自行确保数据一致性,并为查询和计算逻辑开发自定义代码。从这个角度来看,TiDB、AWS Aurora 或 CockroachDB 等关系数据库提供了更多的多功能性,但灵活性略低。此外,TiDB 还提供混合事务/分析处理 (HTAP) 功能,使用户无需单独的 ETL 流程即可直接分析操作数据。这简化了当前不需要复杂数据仓库的中小型用户的基础架构复杂性。
总之,选择正确的数据库需要仔细评估专业化和泛化之间的权衡,考虑可伸缩性、性能、复杂性和项目的特定需求等因素。
数据模型 | 酸交易 | 索引 | HTAP | |
DynamoDB/MongoDB | 无架构 | 弱 | 弱 | 不 |
AWS Aurora / CockroachDB | 主要是关系模型 | 强 | 强 | 不 |
天体数据库 | 是的 |
即用即付定价模型
无服务器的核心功能之一是即用即付定价。几乎所有无服务器数据库都试图解决一个共同的挑战:如何在不确定的工作负载下经济高效地预配资源。优先考虑降低成本可能意味着消耗更少的资源。但是,如果业务需求出现意外高峰,您可能不得不牺牲用户体验和系统稳定性。另一方面,更慷慨和安全的资源配置会导致资源浪费和更高的成本。在这两种风格之间取得平衡需要复杂而细致的工程管理。这会转移您对核心业务的注意力。
此外,即用即付计费模型在不同的无服务器产品中有不同的实现。大多数无服务器产品根据存储容量和单位读/写操作提供精细计费。这在很大程度上是可能的,因为分布式架构允许更精细的资源扩展。在这种情况下,AWS Aurora Serverless 是一个例外 – 它采用基于 Aurora 容量单位 (ACU) 的粗略计费模型,大致相当于 2GB 内存以及相应的 CPU 和网络带宽。此外,它不能缩减到零 ACU。对于不经常访问的数据,这可能会导致大量浪费,尤其是当您需要构建大量此类小规模集群时。
此外,每个提供商都有自己的定价结构。在这方面,TiDB 提供的价格比其他产品更实惠。
定价粒度 | 缩放到零 | |
迪纳摩数据库 | 每个查询 + 存储 | 是的 |
蒙戈数据库 | ||
天体数据库 | ||
蟑螂数据库 | ||
亚马逊云服务器极光 | ACU + 存储 | 不 |
可扩展性
实际上,无服务器数据库的概念本质上意味着可伸缩性
。从每秒 0 个事务 (TPS) 到数百万个 TPS,无服务器数据库应该能够根据工作负载自动缩放。虽然数据库提供商可以使用单个大型数据库来处理不同的工作负载,但这种方法会导致大量浪费和更高的价格。因此,用户需要根据实际工作负载调整无服务器数据库的架构。
在这方面,分布式数据库具有明显的优势。除了垂直扩展之外,它们主要依赖于水平扩展,这提供了更好的可扩展性,因为垂直扩展很容易达到其极限。与关系分布式数据库相比,NoSQL数据库由于没有严格的事务约束而提供了更好的可扩展性。然而,现实总是更加复杂。例如,MongoDB的无服务器产品是为小于1TB的小规模用户设计的。它的专用产品需要手动分片才能实现进一步的可扩展性。另一方面,TiDB 和 CockroachDB 支持水平扩展和自动分片,从而实现更好的可扩展性。
作为分布式关系数据库,TiDB 和 CockroachDB 都受益于存储计算解耦设计。这样可以近乎实时地扩展计算层。与 CockroachDB 不同,TiDB 可以在区域层面利用共享存储,在几分钟内实现快速稳定的存储扩展。

TiDB 无服务器架构
可扩展性 | 水平可扩展性 | |
迪纳摩数据库 | 非常高 | 水平可扩展性 |
蒙戈数据库 | 低 | 仅支持1TB<数据量 |
亚马逊云服务器极光 | 低 | 写入 - 垂直可扩展性/读取和写入容量有限的水平可扩展性。 |
蟑螂数据库 | 高 | 水平可扩展性 + 计算与存储解耦 |
天体数据库 | 高 | 水平可扩展性 + 计算存储解耦 + 通过对象存储实现快速存储可扩展性 |
滚动升级
数据库升级是不可避免的。传统上,它们通常涉及停机或业务连续性中断。但是,在无服务器数据库领域,最大限度地减少或消除升级期间的停机时间是一个关键考虑因素。这就是分布式架构的优势所在。其固有的容错设计允许对单个组件进行无中断滚动升级,而不会造成停机。非分布式体系结构在实现无中断升级方面面临挑战。如果我们看一下主要参与者,AWS Aurora Serverless 不支持无中断更新,强调了分布式架构在这方面的优势。
滚动升级 | |
迪纳摩数据库 | 是的 |
蒙戈数据库 | |
天体数据库 | |
蟑螂数据库 | |
亚马逊云服务器极光 | 不 |
连接模型
在传统的应用程序模型中,开发人员通常更喜欢与数据库的长期连接,而不是频繁的短期连接。但是,由于体系结构限制,在无服务器应用程序中维护长期连接通常具有挑战性。另一方面,使用 HTTP 协议进行数据访问使其更加方便。因此,许多数据库现在提供基于 HTTP 的访问接口,以方便数据检索和操作。
HTTP 数据接口 | |
迪纳摩数据库 | 是的 |
蒙戈数据库 | |
天体数据库 | |
亚马逊云服务器极光 | 是,对于 v1,对于 v2 不是。 |
蟑螂数据库 | 不 |
专业支持和服务
在选择数据库时,无论是否无服务器,都必须考虑专业支持和服务。评估供应商提供的支持至关重要。虽然我无法客观地评估特定产品的支持服务,但考虑供应商的声誉和对用户需求的响应是有价值的。例如,许多 TiDB 用户对供应商的支持表示满意,理由是及时的帮助和愿意纳入用户反馈以快速改进产品。
总结
总之,无服务器数据库已成为现代应用程序中数据管理的强大解决方案。通过卸载基础架构管理和实现可扩展性,它们使开发人员能够专注于其核心业务目标。选择无服务器数据库时,必须考虑各种因素,例如适用的范围、定价模型、可伸缩性、滚动升级功能和 HTTP 数据 API 的可用性。
下面是本文中介绍的不同无服务器数据库的比较摘要:
迪纳摩数据库 | 蒙戈数据库 | 天体数据库 | 亚马逊云服务器极光 | 蟑螂数据库 | |
适用范围 | 低 | 中等 | 非常高 | 高 | 高 |
即用即付定价 | 精细粒度
| 精细粒度 | 精细粒度 | 粗粒度 | 精细粒度 |
可扩展性 | 非常高 | 低 | 高 | 低 | 高 |
滚动升级 | 是的 | 是的 | 是的 | 不 | 是的 |
HTTP 数据接口 | 是的 | 是的 | 是的 | 是,对于 v1,对于 v2 不是。 | 不 |
请务必注意,此摘要表提供了一般概述,每个数据库的适用性取决于您的特定要求和用例。
通过仔细评估特征并将其与项目需求进行比较,您可以做出明智的决策并选择最合适的无服务器数据库来推动应用程序的成功。
原文作者:
Xiaoyu Ma user avatar 马晓宇
原文链接:https://dzone.com/articles/navigate-serverless-databases-a-guide-to-the-right




