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 資料庫,您可以根據需要購買、配置和擴充套件
- Aiven
- Compose
- ElephantSQL
- Database Labs
- ScaleGrid
伺服器和大部分 PostgreSQL 將由提供商管理,而您將能夠設定資料庫執行所在的雲平臺、擴充套件選項、調整設定和管理訪問許可權。您可以將資料庫配置為可透過網際網路連線,或將它們直接連線到由同一提供商管理的應用程式。
成本
就成本而言,第三方解決方案通常也高度可變。作為使用者,您將需要支付部署到雲上的計算資源費用,以及您的資料庫管理服務收取的管理費用。由於您向雲提供商支付的是更基本的資源費用而不是託管資料庫費用,因此這方面的成本可能較低。然而,與管理服務相關的成本可能會在某些價格點上使總成本更高。您需要弄清楚各方在不同級別上的擴充套件方式,以確定您的總成本是多少。
效能
您的資料庫的效能特性也可能顯著不同。由於您的管理服務安裝在雲中的計算例項上,因此您的提供商除了 PostgreSQL 設定之外,還可以調整伺服器配置。這意味著他們可能能夠調整一些設定,以更合理地匹配您的需求。
另一方面,他們可能無法訪問足夠調優所需的虛擬化和硬體元件的底層。強烈建議您針對雲提供商提供的原生資料庫測試您的效能。
可伸縮性
第三方託管資料庫的擴充套件性通常非常好。由於這些提供商可以在任何具有足夠資源的計算例項上部署,因此他們有時可以為您提供比雲提供商公開的更廣泛的擴充套件選項。如果您擴充套件的原因之一是為了提高可用性,許多第三方服務都能夠跨越多個可用區甚至提供商。
管理複雜性
用於管理資料庫的第三方服務具有不同的複雜性。由於此選項需要兩個不同提供商(託管計算例項的雲和資料庫管理服務)之間的協調,因此與使用雲提供商提供的原生資料庫服務相比,複雜性會有內在的增加。
一些管理服務將自己定位為簡化選項,以與共享 Web 託管類似的方式隱藏複雜性。其他解決方案則利用作業系統可訪問的事實,向用戶公開廣泛的配置選項。許多服務同時提供這兩種體驗,以允許使用者找到自己喜歡的複雜性級別。
額外說明
將資料庫管理與底層資源提供商解耦既有優點也有缺點。
如果您的資料庫管理服務抽象了底層,您在遷移到不同的雲提供商時可能會有更大的靈活性。這種抽象還讓您能夠選擇您覺得舒適的複雜性級別。您可以使用資料庫管理服務提供的完整抽象和介面,但由於您也可以訪問為您提供的資料庫伺服器,因此您可以登入並根據需要修改資料庫伺服器。資料庫管理服務還可以提供一個簡單的介面來管理這些作業系統級別的調整。
這種設定的缺點在於,您將依賴多個方來確保資料庫的正常執行。這可能會增加服務中斷的可能性。您也可能會錯過您的雲提供商提供的資料庫服務中可用的任何底層最佳化。您的資料庫管理服務將只能訪問您的雲提供商向他們公開的內容,他們將無法最佳化底層虛擬化或硬體層。
總的來說,使用第三方管理服務取決於偏好和測試。您需要測試效能並瞭解定價結構在不同使用級別下可能對您產生的影響。
總結
以下是這裡討論的各種選項之間的比較概述
選擇正確的資料庫託管方式在很大程度上取決於您的應用程式需求、開發階段以及您自行管理 PostgreSQL 的能力。不同的選擇在這些因素之間提供了權衡,使其在特定時間或特定組織更適用。
一旦您擁有 PostgreSQL 資料庫,您就可以在 JavaScript 或 TypeScript 應用程式中使用 Prisma Client 來管理它。瞭解如何將 Prisma 新增到現有專案中,或者如何從零開始使用 Prisma。


