PostgreSQL

托管 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 需要您购买或租用您将使用的服务器空间。实际服务器可能位于您的组织内部,托管在数据中心,或作为云提供商托管的虚拟机(也称为虚拟专用服务器或 VPS)运行。

服务器的成本变化很大。低功耗的 VPS 可能相当便宜,而多个专用服务器将很快变得昂贵。然而,服务器的成本并不是唯一需要考虑的因素。您还必须将额外的管理成本考虑在内。根据您的部署环境,这可能包括管理数据库层、服务器软件和硬件的人员成本。这些成本将取决于您的可用性要求、托管环境以及您的运营规模。

性能

在独立服务器上部署 PostgreSQL 具有实现非常高性能的潜力。由于运行 PostgreSQL 的机器规格在您的控制之下,您可以完全灵活地选择符合您需求的硬件。如果将来需要扩展,您可以升级硬件或购买额外的服务器来扩展您的工作负载。

您还可以微调数据库配置以获得额外的性能优势。您可以调整与内存管理、缓存、打开文件处理、客户端连接等相关的设置。尽管这为您提供了强大的能力,但利用这些选项需要时间、专业知识和实验。与运行您自己的服务器的其他方面一样,其收益受限于您能够为此项目方面分配的时间和资金。

可伸缩性

如上所述,在专用服务器上运行使您能够应对数据库系统不断变化的需求。您可以通过向数据库服务器添加额外资源和硬件来纵向扩展,也可以通过在 PostgreSQL 服务器池中平衡请求来横向扩展。这两种选项都是对不同类型压力的合理响应。

管理复杂性

一般来说,扩展性与性能调优具有相同的优点和局限性:您拥有令人难以置信的灵活性和强大功能,但您需要负责管理成本和配置。任何需要额外硬件的更改(例如需求增加)都必须与主动监控结合,以便您的组织有时间采购硬件、配置软件并平衡您的工作负载。

额外说明

总而言之,管理您自己的 PostgreSQL 可以非常高效、强大和灵活,但也可能需要大量专用时间和资源。此选项最适合拥有内部基础设施和服务器专业知识,并希望控制其数据库运行时环境、配置和架构拓扑的组织。

使用 Docker 运行 PostgreSQL

另一种自行托管选项是使用 Docker 将 PostgreSQL 作为容器运行。Docker 允许您在本地或远程机器上的隔离环境中运行 PostgreSQL。

托管选项Docker 容器
项目阶段开发、预发布、生产
成本可变。购买或租用额外
服务器以及额外的管理成本。
性能中高
可伸缩性
管理复杂性中高
额外说明容器化基础设施的复杂性差异很大
。虽然容器使
许多事情变得更容易,尤其是在开发
和预发布阶段,但它们也需要经验和
复杂的编排才能在生产环境中良好运行。
对于生产工作负载,容器可能
只有在您已经投入使用
容器编排(如 Kubernetes)时,才是一个好的选择。

与传统的本地安装相比,使用 Docker 的一些优势包括

  • 使用官方 PostgreSQL Docker 镜像运行 PostgreSQL 比安装 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 托管类似的方式隐藏复杂性。其他解决方案则利用操作系统可访问的事实,向用户公开广泛的配置选项。许多服务同时提供这两种体验,以允许用户找到自己喜欢的复杂性级别。

额外说明

将数据库管理与底层资源提供商解耦既有优点也有缺点。

如果您的数据库管理服务抽象了底层,您在迁移到不同的云提供商时可能会有更大的灵活性。这种抽象还让您能够选择您觉得舒适的复杂性级别。您可以使用数据库管理服务提供的完整抽象和接口,但由于您也可以访问为您提供的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可以提供一个简单的界面来管理这些操作系统级别的调整。

这种设置的缺点在于,您将依赖多个方来确保数据库的正常运行。这可能会增加服务中断的可能性。您也可能会错过您的云提供商提供的数据库服务中可用的任何底层优化。您的数据库管理服务将只能访问您的云提供商向他们公开的内容,他们将无法优化底层虚拟化或硬件层。

总的来说,使用第三方管理服务取决于偏好和测试。您需要测试性能并了解定价结构在不同使用级别下可能对您产生的影响。

总结

以下是这里讨论的各种选项之间的比较概述

Chart comparing PostgreSQL hosting options

选择正确的数据库托管方式在很大程度上取决于您的应用程序需求、开发阶段以及您自行管理 PostgreSQL 的能力。不同的选择在这些因素之间提供了权衡,使其在特定时间或特定组织更适用。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直撰写关于数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子住在柏林。他通常不需要以第三人称写作,这对所有相关方都是一种解脱。
Daniel Norman

Daniel Norman

Daniel 是一名软件工程师,在现代网络和云环境中拥有丰富的经验。他开发数据库已有超过 15 年的经验,并对开源和现代开发工具充满热情。
© . All rights reserved.