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 将由托管提供商管理,而您将能够设置扩展选项、调整设置和管理访问。您可以将数据库配置为可从 Internet 连接,或将其直接连接到由同一提供商管理的应用程序。
成本
云提供商管理的 PostgreSQL 数据库的成本范围很广。在低端,一些提供商提供免费层级,性能和正常运行时间最低。在高端,如果流量意外激增,自动扩展以满足任何需求可能会让您一夜之间花费数千美元。与大多数云服务一样,您的实际使用情况将影响您每月的账单。许多云服务提供成本警报,甚至在使用量/成本超过某个点时自动关闭。监控您的使用情况并配置截止点以管理数据库系统的运营成本非常重要。
可扩展性
尽管成本有时难以预测,但好消息是云中的扩展极其容易。分配给数据库的资源可以即时配置。这意味着您只需更改帐户中的设置,即可增加存储容量、内存和计算能力,或管理数据的副本数量。如果配置不当,可能导致高成本的强大功能之一是根据当前需求动态扩展数据库资源的能力。这使您始终能够满足您的需求,前提是您可以支付相关成本。
性能
与可扩展性相关,性能是云中另一个极其灵活的领域。您可以根据自己的使用模式,经常微调对数据库性能影响最大的设置。如果当前配置能力不足,您还可以分配额外的资源。将数据库与使用它们的应用程序 colocating 也可以帮助您在数据库和应用程序之间获得良好的网络性能。
管理复杂性
就管理复杂性而言,云托管数据库相当简单。您正在付费让提供商承担大部分管理负担。虽然您仍然需要控制您的帐户和影响数据库的设置,但硬件、操作系统和大部分 PostgreSQL 配置将由提供商处理。这可以在很大程度上降低使用数据库的管理开销,但在某些特殊情况下,您可能无法访问您想要的调整级别。
附加说明
通常,为云提供商管理的 PostgreSQL 数据库付费通常是一个有吸引力的选择。它在可扩展性和性能方面提供了极大的灵活性,同时管理工作量较小。选择云提供商的数据库产品的缺点是,在某些级别上,您最终支付的费用可能会比其他方式更多。此外,如果您的工具开始过于依赖特定于提供商的功能,则存在被当前提供商困住的危险。
第三方托管数据库
除了直接从您的云提供商购买数据库外,您还可以选择通过第三方提供商管理您的数据库。在大多数情况下,此选项会将数据库部署和管理到您选择的云或多个云上,从而将数据库管理与底层资源提供商解耦。
| 托管选项 | 第三方管理 |
|---|---|
| 项目阶段 | 开发、预演、生产 |
| 成本 | 高度可变,取决于您的选择 和使用情况。 |
| 性能 | 高度可变 |
| 可伸缩性 | 高 |
| 管理复杂性 | 低 |
| 附加说明 | 第三方托管数据库具有许多 与云提供的数据库相同的优势。 但是,通过第三方管理数据库, 您可以将数据库管理与底层云提供商解耦。 从底层云提供商解耦。 这可以更容易地在未来迁移到不同的 主机,有时可以提供更强大的管理选项。 更强大的管理选项。 |
由第三方提供商管理的数据库通常使用与云提供商本身提供的数据库相同的基本组件。但是,第三方提供商通常与多个云合作,在您的帐户中启动资源,并且通常在您需要时提供更低级别的访问权限。该服务将不再使用云提供商提供的数据库,而是在提供商上启动虚拟服务器并使用这些服务器安装和配置 PostgreSQL。他们可以调整操作系统上的设置,并为您提供对托管实例的服务器的访问权限。第三方 PostgreSQL 提供商的示例是 ElephantSQL,它目前可以管理四个不同云中的实例。
第三方产品
以下第三方提供商提供托管 PostgreSQL 数据库,您可以根据需要购买、配置和扩展
服务器和大部分 PostgreSQL 将由提供商管理,而您将能够设置数据库运行的云平台、扩展选项、调整设置和管理访问。您可以将数据库配置为可从 Internet 连接,或将其直接连接到由同一提供商管理的应用程序。
成本
就成本而言,第三方解决方案也往往差异很大。作为用户,您必须支付部署到的云中的计算资源费用,以及数据库管理服务收取的管理费用。由于您向云提供商支付的是更基本的资源而非托管数据库的费用,因此这方面的成本可能更低。但是,与管理服务相关的成本可能会在某些价格点上累计使其更昂贵。您必须弄清楚每个方面在不同级别如何扩展,才能确定您的总成本。
性能
数据库的性能特征也可能差异很大。由于您的管理服务安装在云中的计算实例上,因此您的提供商除了可以调整 PostgreSQL 设置外,还可以调整服务器配置。这意味着他们可能能够调整一些设置以更合理地匹配您的需求。
另一方面,他们可能无法访问虚拟化和硬件组件的低级层,这些层是进行充分调优所必需的。强烈建议针对云提供商提供的原生数据库测试您的性能。
可扩展性
第三方托管数据库的可扩展性通常非常好。由于这些提供商可以在任何具有足够资源的计算实例上部署,因此他们有时可以提供比云提供商暴露的更广泛的扩展选项。如果您的扩展原因之一是为了提高可用性,许多第三方服务能够跨多个可用区甚至提供商。
管理复杂性
管理数据库的第三方服务的复杂性各不相同。由于此选项需要两个不同提供商(托管计算实例的云和数据库管理服务)之间的协调,因此与使用云提供商提供的原生数据库服务相比,复杂性会固有地增加。
一些管理服务将自己定位为简化的选项,以类似于共享网络托管的方式隐藏复杂性。其他解决方案利用操作系统可访问的事实,向用户暴露各种配置选项。许多服务提供这两种体验,以允许用户找到自己喜欢的复杂性级别。
附加说明
将数据库管理与底层资源提供商解耦既有优点也有缺点。
如果您的数据库管理服务抽象了底层,您在迁移到不同的云提供商时可能会有更大的灵活性。这种抽象还使您能够选择您习惯的复杂性级别。您可以使用数据库管理服务提供的完整抽象和接口,但由于您还可以访问为您配置的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可以提供一个简单的界面来管理这些操作系统级别的调整。
这种设置的缺点在于,您将依赖多个方来正确操作您的数据库。这可能会增加服务中断的可能性。您还可能会错过您的云提供商提供的数据库服务的任何底层优化。您的数据库管理服务将只能访问您的云提供商向他们公开的内容,并且他们将无法优化底层虚拟化或硬件层。
总的来说,使用第三方管理服务是关于偏好和测试的。您需要测试性能并了解定价结构可能如何影响您在不同使用级别。
总结
以下是此处讨论的各种选项之间的比较概述
选择数据库托管方案很大程度上取决于您的应用程序需求、开发阶段以及您自行管理 PostgreSQL 的能力。不同的选择在这些因素之间提供了权衡,使其在某些时间或某些组织中更适用。
一旦您拥有 PostgreSQL 数据库,您就可以使用 Prisma Client 从您的 JavaScript 或 TypeScript 应用程序中管理它。了解如何将 Prisma 添加到 现有项目 或如何 从头开始使用 Prisma。


