PostgreSQL
5 种托管 PostgreSQL 数据库的方法
简介
有许多方法可以为您的项目或组织获取 PostgreSQL 实例以供使用。您可以学习如何自己安装和配置 PostgreSQL,也可以付费给服务提供商来为您管理 PostgreSQL 数据库。
本指南将介绍运行 PostgreSQL 的不同方法及其各自的优点和缺点。通过比较不同的选项,您应该对哪种类型的解决方案最适合您的项目或开发阶段有更好的了解。
自管理 PostgreSQL
最灵活且最容易描述的选项是自托管您的 PostgreSQL 服务器。自托管 PostgreSQL 意味着您在您控制的计算机上安装和配置数据库,就像任何其他软件一样。
自托管让您可以自由选择安装和运行数据库的位置。如果您选择本节中的选项之一,您可以使用本指南学习 如何在您的系统上安装 PostgreSQL。
在本地开发计算机上安装 PostgreSQL
对于早期开发、测试和概念验证,在本地开发机器上安装 PostgreSQL 可以为您的数据库提供可靠、易于管理的访问。
托管选项 | 本地开发机器 |
---|---|
项目阶段 | 开发 |
成本 | 无额外成本 |
性能 | 低 |
可扩展性 | 无 |
管理复杂性 | 低 |
附加说明 | 不需要网络配置。良好 用于本地开发。 |
成本
在您的开发机器上设置 PostgreSQL 是免费的。您正在从一台已经在开发中活动的计算机上运行数据库。您只需要考虑 PostgreSQL 在启动并运行时将消耗的资源量。
性能
在您的开发机器上安装 PostgreSQL 是一种低性能选项。
您的数据库不易或不可靠地供其他用户使用。您自己对数据库的使用将受到您的硬件以及您可以为 PostgreSQL 提供的资源量的限制。这些问题通常在本地测试或开发时不是问题,但对于任何更复杂的情况都完全不足。
可扩展性
托管在您的开发机器上几乎不提供 可扩展性。您可以更改分配给 PostgreSQL 的资源量,但仅此而已。您可以升级您的开发机器,但这既不实用,从长远来看也没有特别用处。
管理复杂性
在复杂性方面,在本地机器上托管 PostgreSQL 通常非常简单。大多数操作系统的安装过程都经过深思熟虑,并且可以轻松启动或停止生成的数据库。但是,考虑到资源限制和消费者网络的不稳定性,为外部访问配置本地 PostgreSQL 实例通常不值得付出努力。
虽然在本地设置 PostgreSQL 并不复杂,但您仍然需要管理您的数据库并根据需要执行任何升级。这些可能偶尔需要用于安全补丁,如果您担心您的数据,您有责任跟踪这些实例。
附加说明
在本地安装意味着即使网络中断,您的数据库也可以从您的开发计算机访问。这在旅行时尤其有用。在本地访问您的数据消除了网络复杂性,使您可以专注于开发而不是数据库访问。
在本地开发计算机上安装 PostgreSQL 很有用,但有一些非常明显的限制。您无法轻松配置多用户访问,并且您的数据库正常运行时间直接与您的计算机的可用性和网络稳定性相关。由于这些原因,在开发机器上安装几乎总是作为补充选项,旨在提高您的生产力和灵活性,而不是唯一的数据库安装。
在单独的服务器上安装 PostgreSQL
另一种自托管选项是在单独的计算机上安装和管理 PostgreSQL。一些常见的实现包括
- 在专用服务器上安装: PostgreSQL 配置为在专用计算机上运行的唯一服务。它可以访问机器的所有资源。
- 与相关应用程序一起安装: PostgreSQL 与需要它的应用程序一起安装。这对于小型部署来说是一个流行的选择,因为所有组件都可以在一台机器上管理。计算机的资源必须在 PostgreSQL 和其他正在运行的应用程序之间共享。
在单独的服务器上安装 PostgreSQL 与在开发机器上安装看起来非常不同
托管选项 | 单独的服务器 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 可变。购买或租赁额外的 服务器以及额外的管理成本。 |
性能 | 高潜力 |
可扩展性 | 高潜力 |
管理复杂性 | 高 |
附加说明 | 最灵活的选项。也需要最大的 动手管理量。如果 您拥有内部硬件或数据库专业知识,这是一个不错的选择 您可以投入到管理中。 |
一个需要进一步强调的考虑因素是,当您自己管理 PostgreSQL 时,安全是您的责任。如果您已经处理了组织其他部分的基础设施、软件和网络安全,这可能不是问题。但是,如果您不太熟悉,那么保护您的 PostgreSQL 实例及其保存的数据可能是一个重大挑战。在决定走这条路之前,请务必将其纳入您的计划。
成本
在专用或共享机器上运行 PostgreSQL 需要您购买或租用您将使用的服务器空间。实际服务器可能位于您组织的本地、数据中心托管或作为云提供商托管的虚拟机(也称为虚拟专用服务器或 VPS)运行。
服务器的成本可能会有很大差异。低功耗 VPS 可能非常便宜,而多个专用服务器将很快变得昂贵。但是,服务器的成本不是唯一的考虑因素。您还必须考虑额外的管理成本。根据您的部署环境,这可能包括管理数据库层、服务器软件和硬件的人员成本。这些成本将取决于您的可用性要求、托管环境和运营规模。
性能
在单独的服务器上部署 PostgreSQL 具有很高的性能潜力。由于运行 PostgreSQL 的机器的规格由您控制,因此您可以完全灵活地选择符合您需求的硬件。如果您将来需要扩展,您可以升级您的硬件或购买额外的服务器来扩展您的工作负载。
您还可以微调数据库配置以获得额外的性能优势。您可以调整与内存管理、缓存、打开文件处理、客户端连接等相关的设置。虽然这为您提供了很大的权力,但利用这些选项需要时间、专业知识和实验。与运行您自己的服务器的其他方面一样,好处受到您可以分配给项目这方面的时间和金钱的限制。
可扩展性
如上所述,在专用服务器上运行使您可以对数据库系统的不断变化的需求做出反应。您可以通过向数据库服务器添加额外的资源和硬件来向上扩展,或者通过在 PostgreSQL 服务器池中平衡您的请求来向外扩展。这两种选择都是对不同类型压力的合理响应。
管理复杂性
一般来说,扩展与性能调优具有相同的优点和局限性:您拥有令人难以置信的灵活性和强大功能,但您负责管理成本和配置。任何需要额外硬件的更改(例如需求增加)都必须与主动监控相结合,以便您的组织有时间采购硬件、配置软件和平衡您的工作负载。
附加说明
总而言之,管理您自己的 PostgreSQL 可能非常高效、强大和灵活,但可能需要大量专门的时间和资源。此选项最适合具有内部基础设施和服务器专业知识的组织,他们希望控制其数据库的运行时环境、配置和架构拓扑。
使用 Docker 的 PostgreSQL
另一种自托管选项是使用 Docker 将 PostgreSQL 作为容器运行。Docker 允许您在本地或远程机器上的隔离环境中运行 PostgreSQL。
托管选项 | Docker 容器 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 可变。购买或租赁额外的 服务器以及额外的管理成本。 |
性能 | 中高 |
可扩展性 | 高 |
管理复杂性 | 中高 |
附加说明 | 容器化基础设施的复杂性可能差异很大 在复杂性方面。虽然容器使 许多事情变得更容易,尤其是在开发期间 和暂存,它们也需要经验和 复杂的编排才能在生产环境中良好运行。 对于生产工作负载,容器很可能 只有当您已经投入到 像 Kubernetes 这样的容器编排。 |
与传统的本地安装相比,使用 Docker 的一些好处包括
- 与安装 PostgreSQL 相比,使用官方 PostgreSQL Docker 镜像 运行 PostgreSQL 需要更少的精力。
- Docker 允许您在多个环境中重现完全相同的数据库配置,这对于团队协作处理需要相同 PostgreSQL 配置的项目非常有用。
- 您可以使用 Docker 来控制分配给 PostgreSQL 的 CPU、内存和存储资源。
- Docker 减少了 PostgreSQL 与您机器上运行的其他软件之间不兼容的可能性。
在本地或远程机器上使用 Docker 安装 PostgreSQL 是相似的,尽管根据您是否将 PostgreSQL 用于生产工作负载,还有一些额外的注意事项。
虽然 Docker 简化了运行 PostgreSQL 的某些方面,但有一些权衡需要注意
- 根据您的配置,使用 Docker 运行可能会增加您的网络配置的复杂性。
- Docker 添加了一个额外的抽象层,这需要额外的安全考虑,并且有可能使故障排除变得不那么直接。
容器和 Kubernetes
使用 Kubernetes,您可以在由多台服务器组成的集群上运行 Docker 容器。如果集群中的一台服务器需要停机维护,只要底层数据分区可访问,Kubernetes 就会将 PostgreSQL 容器移动到另一台服务器。您还可以在 Kubernetes 上运行使用 PostgreSQL 的应用程序,这可以减少应用程序和 PostgreSQL 之间的网络延迟。
托管服务
在您自己运行 PostgreSQL 之外的另一种选择是从提供商处租用或购买 PostgreSQL 数据库。托管服务允许您轻松地将数据库作为服务或 API 使用,而无需担心 PostgreSQL 软件或底层服务器的幕后管理。
存在不同类型的托管服务以满足不同的需求。本节将介绍由托管或云提供商、第三方托管数据库和应用程序平台提供的数据库提供的服务。
由云提供商管理的数据库
也许最常见的托管 PostgreSQL 托管类型是云或托管提供商提供的类型。这些示例包括 Amazon Web Service 的 RDS(关系数据库服务)、Google Cloud Platform 的 Cloud SQL 和 Azure Database。
托管选项 | 云提供商管理 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 高度可变,取决于您的选择 和使用情况。 |
性能 | 高度可变 |
可扩展性 | 高 |
管理复杂性 | 低 |
附加说明 | 一种高度可扩展的解决方案,通常由 可以运行您的云提供商提供 应用程序。这允许额外的控制 在网络和性能方面,无需 运行您自己的服务器的繁重工作。 |
云提供商提供各种各样的 PostgreSQL 数据库,这些数据库经过微调,可以在其数据中心运行,并与其其他服务无缝协作。
云提供商
以下云提供商提供托管 PostgreSQL 数据库,您可以根据需要购买、配置和扩展
服务器和大部分 PostgreSQL 将由托管提供商管理,而您将能够设置扩展选项、调整设置和管理访问。您可以将数据库配置为可从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
由云提供商管理的 PostgreSQL 数据库可能具有广泛的成本。在低端,一些提供商提供免费层级,但性能和正常运行时间最低。在高端,如果您的流量意外激增,自动扩展以满足任何需求可能会让您一夜之间花费数千美元。与云中的大多数事物一样,您的实际使用情况将影响您每月的账单。许多云提供商提供成本警报,甚至在使用量/成本超过某个点时自动关闭。监控您的使用情况并配置截止值以管理数据库系统的运营成本非常重要。
可扩展性
虽然成本有时可能难以预测,但好消息是云中的扩展非常容易。分配给数据库的资源可以动态配置。这意味着您只需更改帐户中的设置即可增加存储容量、内存和计算能力,或者管理数据的副本数量。动态扩展数据库资源以适应当前需求的能力是一项强大的功能,但如果配置不当,可能会导致高成本。这使您始终有能力满足您的需求,前提是您可以支付成本。
性能
与可扩展性相关,性能是在云中非常灵活的另一个领域。您通常可以根据您的使用模式微调对数据库性能影响最大的设置。如果当前配置性能不足,您还可以分配额外的资源。将数据库与使用它们的应用程序并置也可以帮助您在数据库和应用程序之间获得良好的网络性能。
管理复杂性
在管理复杂性方面,云托管数据库相当简单。您正在付费让提供商为您承担大部分管理负担。虽然您仍然需要控制您的帐户以及影响数据库的设置,但硬件、操作系统和大部分 PostgreSQL 配置将为您处理。这可以对减少使用数据库的管理开销产生巨大影响,但在某些特殊情况下,您可能无法访问您想要的调整级别。
附加说明
总的来说,为云提供商管理的 PostgreSQL 数据库付费通常是一个有吸引力的选择。它在扩展和性能方面提供了极大的灵活性,并且管理工作量较小。选择云提供商的数据库产品的缺点是,在某些级别上,您最终可能会支付比其他方式更多的费用。此外,如果您的工具开始过度依赖提供商特定的功能,则存在被当前提供商困住的风险。
第三方托管数据库
除了直接从云服务提供商处购买数据库外,您还可以选择通过第三方提供商管理数据库。在大多数情况下,此选项会将数据库部署和管理到您选择的云或多个云上,从而将数据库管理与底层资源提供商分离。
托管选项 | 第三方托管 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 差异很大,取决于您的选择 和使用情况。 |
性能 | 高度可变 |
可扩展性 | 高 |
管理复杂性 | 低 |
附加说明 | 第三方托管数据库具有许多 与云服务提供商提供的数据库相同的好处。 但是,通过第三方管理数据库, 您可以将数据库 管理与底层云服务提供商分离。 这可以使将来迁移到不同的 主机更容易,有时还可以提供 更强大的管理选项。 |
由第三方提供商管理的数据库通常使用与云服务提供商自身提供的数据库相同的基本组件。但是,第三方提供商通常与多个云合作,在您的帐户中启动资源,并且如果您需要,通常会为您提供更低级别的访问权限。该服务不会使用云服务提供商提供的数据库,而是在提供商处启动虚拟服务器,并使用这些服务器安装和配置 PostgreSQL。他们可以调整操作系统上的设置,并为您提供对托管实例的服务器的访问权限。第三方 PostgreSQL 提供商的一个例子是 ElephantSQL,它目前可以在 四个不同的云 中管理实例。
第三方产品
以下第三方提供商提供托管的 PostgreSQL 数据库,您可以根据需要购买、配置和扩展这些数据库
服务器和大部分 PostgreSQL 将由提供商管理,而您将能够设置数据库运行的云平台、扩展选项、调整设置和管理访问权限。您可以将数据库配置为可从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
在成本方面,第三方解决方案通常也差异很大。作为用户,您将需要为您部署到的云中的计算资源以及数据库管理服务收取的管理费用付费。由于您为云服务提供商支付的是更基础的资源,而不是托管数据库,因此这方面的成本可能会更小。但是,与管理服务相关的成本可能会使总累积成本在某些价格点上更高。您将需要弄清楚每一方在不同级别如何扩展,以确定您的总成本。
性能
数据库的性能特征也可能差异很大。由于您的管理服务安装在云中的计算实例上,因此您的提供商除了 PostgreSQL 设置外,还可以调整服务器配置。这意味着他们可能能够调整某些设置,以更合理地满足您的需求。
另一方面,他们可能无法访问虚拟化和硬件组件的底层,而这些底层对于充分调整是必要的。强烈建议您针对云服务提供商提供的原生数据库测试您的性能。
可扩展性
第三方托管数据库的可扩展性通常非常好。由于这些提供商可以部署在任何具有足够资源的计算实例上,因此它们有时可以为您提供比云服务提供商公开的更广泛的扩展选项。如果您的扩展原因之一是为了提高可用性,那么许多第三方服务都能够跨越多个可用区甚至提供商。
管理复杂性
用于管理数据库的第三方服务具有一定的复杂性。由于此选项需要在两个不同的提供商(托管计算实例的云和数据库管理服务)之间进行协调,因此与使用云服务提供商提供的原生数据库服务相比,复杂性固有地增加了。
一些管理服务将自己定位为简化的选项,以与共享 Web 托管非常相似的方式隐藏复杂性。其他解决方案利用操作系统可访问的事实,向用户公开各种配置选项。许多服务都提供这两种体验,以允许用户找到自己喜欢的复杂程度。
其他注意事项
将数据库管理与底层资源提供商分离既有优点也有缺点。
如果您的数据库管理服务抽象化了底层,那么在迁移到不同的云服务提供商时,您可能会有更大的灵活性。这种抽象化还使您可以选择您感到舒适的复杂程度。您可以使用数据库管理服务提供的完整抽象和界面,但由于您还可以访问为您配置的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可以提供一个简单的界面来管理这些操作系统级别的调整。
这种设置的缺点来自于您将依赖多个方来正确操作数据库这一事实。这可能会增加服务中断的可能性。您还可能会错过云服务提供商提供的数据库服务的任何底层优化。您的数据库管理服务只能访问您的云服务提供商向他们公开的内容,并且他们将无法优化底层的虚拟化或硬件层。
总的来说,使用第三方管理服务取决于偏好和测试。您将需要测试性能并了解定价结构如何在各种使用级别上影响您。
总结
以下是此处讨论的各种选项之间如何比较的概述
托管数据库的正确选择在很大程度上取决于您的应用程序的需求、您的开发阶段以及您自己管理 PostgreSQL 的能力。不同的选择在这些因素之间提供了权衡,这使得它们在某些时候或对于某些组织更合适。
一旦您拥有 PostgreSQL 数据库,您就可以使用 Prisma Client 从您的 JavaScript 或 TypeScript 应用程序中对其进行管理。了解如何将 Prisma 添加到 现有项目 或如何 从头开始使用 Prisma。