MySQL
託管 MySQL 資料庫的 5 種方式
簡介
有多種方法可以為您的專案啟動和執行 MySQL 伺服器。您可以自行安裝和管理伺服器例項,也可以利用許多提供託管 MySQL 訪問的服務商之一。
本文將介紹 MySQL 伺服器的一些最常見選項,並比較它們的優勢和挑戰。通過了解您的專案和團隊的優先順序,您可以找到適合您需求的解決方案。
自管 MySQL
最靈活且最簡單描述的選項是自行託管 MySQL 伺服器。自行託管 MySQL 意味著您可以在自己控制的計算機上安裝和配置資料庫,就像任何其他軟體一樣。
自行託管讓您在安裝和執行資料庫方面有很大的選擇餘地。如果您選擇本節中的任一選項,可以參閱本指南瞭解如何在您的系統上安裝 MySQL。
在本地開發計算機上安裝 MySQL
對於早期開發、測試和概念驗證,在本地開發機器上安裝 MySQL 可以提供可靠、易於管理的資料庫訪問。
| 託管選項 | 本地開發機器 |
|---|---|
| 專案階段 | 開發 |
| 成本 | 無額外成本 |
| 效能 | 低 |
| 可伸縮性 | 無 |
| 管理複雜性 | 低 |
| 補充說明 | 無需網路配置。良好 適用於本地開發。 |
成本
在您的開發機器上設定 MySQL 是免費的。您是在一臺在開發過程中已經處於活躍狀態的計算機上執行資料庫。您只需要考慮 MySQL 啟動和執行時將消耗的資源量。
效能
在您的開發機器上安裝 MySQL 是一種低效能選項。
您的資料庫將無法輕易或可靠地供其他使用者使用。您對資料庫的使用將受限於您的硬體以及您可以為 MySQL 預留的資源量。這些問題在本地測試或開發時通常不是問題,但對於任何更復雜的情況都完全不足。
可伸縮性
在您的開發機器上託管幾乎不提供可伸縮性。您可以更改分配給 MySQL 的資源量,但僅此而已。您可以升級您的開發機器,但這既不實用,也對長期發展沒有特別大的用處。
管理複雜性
就複雜性而言,在本地機器上託管 MySQL 通常相當簡單。大多數作業系統的安裝過程都經過深思熟慮,並且生成的資料庫可以輕鬆啟動或停止。然而,考慮到資源限制和消費者網路不穩定性,為本地 MySQL 例項配置外部訪問通常不值得付出努力。
儘管在本地設定 MySQL 並不複雜,但您仍然需要管理您的資料庫並根據需要執行任何升級。有時可能需要進行安全補丁更新,如果您關心資料安全,跟蹤這些例項將是您的責任。
補充說明
在本地安裝意味著即使網路中斷,您的資料庫也可以從您的開發計算機訪問。這在旅行時特別有用。在本地訪問資料消除了網路複雜性,讓您可以專注於開發而不是資料庫訪問。
在本地開發計算機上安裝 MySQL 很有用,但有一些非常明顯的限制。您無法輕鬆配置多使用者訪問,並且資料庫的正常執行時間直接與您的計算機可用性和網路穩定性相關聯。由於這些原因,在您的開發機器上安裝幾乎總是一個輔助選項,旨在提高您的生產力和靈活性,絕不是唯一的資料庫安裝方式。
在單獨的伺服器上安裝 MySQL
另一種自行託管的選項是在單獨的計算機上安裝和管理 MySQL。一些常見的實現包括
- 在專用伺服器上安裝:MySQL 被配置為在專用計算機上執行的唯一服務。它可以訪問機器的所有資源。
- 與相關應用程式一起安裝:MySQL 與需要它的應用程式一起安裝。對於小型部署來說,這是一個受歡迎的選擇,因為所有元件都可以在一臺機器上管理。計算機的資源必須在 MySQL 和其他執行的應用程式之間共享。
在單獨的伺服器上安裝 MySQL 與在開發機器上安裝大相徑庭
| 託管選項 | 單獨的伺服器 |
|---|---|
| 專案階段 | 開發、暫存、生產 |
| 成本 | 可變。需額外購買或租用 伺服器,外加額外管理成本。 |
| 效能 | 潛力巨大 |
| 可伸縮性 | 潛力巨大 |
| 管理複雜性 | 高 |
| 補充說明 | 最靈活的選項。也需要最大的 手動管理量。如果您 內部有硬體或資料庫專業知識 可用於管理。 |
需要進一步強調的一個考慮因素是,當您自行管理 MySQL 時,安全是您的責任。如果您已經負責組織其他部分的基礎設施、軟體和網路安全,這可能不是問題。但是,如果您不太熟悉,保護您的 MySQL 例項及其所持有的資料可能是一個重大挑戰。在決定走這條路之前,請務必將其納入您的規劃中。
成本
在專用或共享機器上執行 MySQL 需要您購買或租用將使用的伺服器空間。實際伺服器可能位於您的組織內部,與資料中心中的其他裝置共同託管,或者作為由雲提供商託管的虛擬機器(也稱為虛擬專用伺服器或 VPS)執行。
伺服器的成本可能差異很大。低功耗的 VPS 可能相當便宜,而多個專用伺服器則會迅速變得昂貴。然而,伺服器成本並非唯一考慮因素。您還必須將額外的管理成本考慮在內。根據您的部署環境,這可能包括管理資料庫層、伺服器軟體和硬體的人員成本。這些成本將取決於您的可用性要求、託管環境和運營規模。
效能
在單獨的伺服器上部署 MySQL 具有實現高效能的潛力。由於執行 MySQL 的機器規格由您控制,因此您可以完全靈活地選擇符合您需求的硬體。如果將來需要擴充套件,您可以升級硬體或購買額外的伺服器來擴充套件您的工作負載。
您還可以微調資料庫配置,以獲得額外的效能優勢。您可以調整與記憶體管理、快取、檔案處理、客戶端連線等相關的設定。雖然這為您提供了很大的能力,但利用這些選項需要時間、專業知識和實驗。與執行自己的伺服器的其他方面一樣,收益受限於您能夠為此專案方面分配的時間和金錢。
可伸縮性
如上所述,在專用伺服器上執行使您能夠響應資料庫系統不斷變化的需求。您可以透過向資料庫伺服器新增額外的資源和硬體來縱向擴充套件,或者透過在 MySQL 伺服器池中平衡請求來橫向擴充套件。這兩種選項都是對不同型別壓力的合理響應。
管理複雜性
一般而言,擴充套件與效能調優具有相同的優點和侷限性:您擁有令人難以置信的靈活性和強大功能,但您需要負責管理成本和配置。任何需要額外硬體的更改(例如需求增加)都必須與主動監控相結合,以便您的組織有時間採購硬體、配置軟體並平衡您的工作負載。
補充說明
總之,自行管理 MySQL 可以非常高效、強大且靈活,但可能需要大量專門的時間和資源。此選項最適合那些擁有內部基礎設施和伺服器專業知識,並希望控制其資料庫執行時環境、配置和架構拓撲的組織。
結合 Docker 使用 MySQL
另一種自行託管的選項是使用 Docker 將 MySQL 作為容器執行。Docker 允許您在本地或遠端機器上的隔離環境中執行 MySQL。
| 託管選項 | Docker 容器 |
|---|---|
| 專案階段 | 開發、暫存、生產 |
| 成本 | 可變。需額外購買或租用 伺服器,外加額外管理成本。 |
| 效能 | 中高 |
| 可伸縮性 | 高 |
| 管理複雜性 | 中高 |
| 補充說明 | 容器化基礎設施的複雜性差異很大 就複雜性而言。雖然容器使得 許多事情變得更容易,尤其是在開發 和暫存階段,但它們也需要經驗和 複雜的編排才能在生產環境中良好執行。 對於生產工作負載,容器很可能 只有在您已經投資於 像 Kubernetes 這樣的容器編排技術時,才是好的選擇。 |
與傳統的本地安裝相比,使用 Docker 的一些優勢包括
- 與安裝 MySQL 相比,使用官方的 MySQL Docker 映象執行 MySQL 需要更少的精力。
- Docker 允許您在多個環境中重現完全相同的資料庫配置,這對於需要相同 MySQL 配置的專案協作團隊非常有用。
- 您可以使用 Docker 控制分配給 MySQL 的 CPU、記憶體和儲存資源。
- Docker 降低了 MySQL 與您機器上執行的其他軟體之間不相容的可能性。
在本地或遠端機器上使用 Docker 安裝 MySQL 類似,但根據您是否將 MySQL 用於生產工作負載,還有一些額外的考慮因素。
雖然 Docker 簡化了執行 MySQL 的某些方面,但也有一些需要注意的權衡
- 根據您的配置,使用 Docker 執行可能會增加您的網路配置的複雜性。
- Docker 增加了一層額外的抽象,這需要額外的安全考慮,並有可能使故障排除變得不那麼直接。
容器和 Kubernetes
使用 Kubernetes,您可以在由多個伺服器組成的叢集上執行 Docker 容器。如果叢集中的一個伺服器需要停機維護,只要底層資料分割槽可訪問,Kubernetes 就會將 MySQL 容器移動到另一個伺服器。您還可以將使用 MySQL 的應用程式執行在 Kubernetes 上,這可以減少應用程式和 MySQL 之間的網路延遲。
託管服務
另一種自行執行 MySQL 的替代方案是從提供商那裡租用或購買 MySQL 資料庫。託管服務允許您輕鬆地將資料庫作為服務或 API 進行操作,而無需擔心 MySQL 軟體或底層伺服器的幕後管理。
存在不同型別的託管服務以滿足不同的需求。本節將涵蓋託管或雲提供商提供的服務、第三方託管資料庫以及應用程式平臺提供的資料庫。
由雲提供商管理的資料庫
也許最熟悉的託管 MySQL 託管型別是雲或託管提供商提供的那種。其中一些例子包括亞馬遜網路服務的 RDS(關係型資料庫服務)、Google Cloud Platform 的 Cloud SQL 和 Azure Database。
| 託管選項 | 雲提供商託管 |
|---|---|
| 專案階段 | 開發、暫存、生產 |
| 成本 | 高度可變,取決於您的選擇 和使用情況。 |
| 效能 | 高度可變 |
| 可伸縮性 | 高 |
| 管理複雜性 | 低 |
| 補充說明 | 一種高度可擴充套件的解決方案,通常由 同一雲提供商提供,該提供商可以執行您的 應用程式。這允許對網路和效能進行額外控制 而無需承擔執行您自己的伺服器的 繁重工作。 |
雲提供商提供了各種 MySQL 資料庫,這些資料庫經過微調,可在其資料中心執行並與他們的其他服務無縫協作。
雲提供商
以下雲提供商提供託管 MySQL 資料庫,您可以根據需要購買、配置和擴充套件
伺服器和大部分 MySQL 將由託管提供商管理,而您將能夠設定資料庫執行的雲平臺、擴充套件選項、調整設定和管理訪問。您可以配置您的資料庫使其可以從網際網路連線,或將它們直接連線到由同一提供商管理的應用程式。
成本
由雲提供商管理的 MySQL 資料庫成本範圍很廣。在低端,一些提供商提供免費套餐,效能和正常執行時間最低。在高階,如果流量意外激增,自動擴充套件以滿足任何需求可能會讓您一夜之間花費數千美元。與雲中的大多數事物一樣,您的實際使用情況將影響您每月的賬單。許多雲提供商提供成本警報,甚至在使用量/成本超過某個點時自動關閉。監控您的使用情況並配置截止點以管理資料庫系統的運營成本非常重要。
可伸縮性
儘管成本有時難以預測,但好訊息是雲中的擴充套件異常容易。分配給您資料庫的資源可以即時配置。這意味著您只需更改賬戶設定,即可增加儲存容量、記憶體和計算能力,或管理資料的副本數量。其中一個強大的功能,如果配置不當,可能會導致高成本,那就是根據當前需求動態擴充套件資料庫資源的能力。這使您始終擁有滿足需求的容量,前提是您能夠承擔成本。
效能
與可伸縮性相關,效能是雲中另一個極其靈活的領域。您可以根據自己的使用模式,經常微調對資料庫效能影響最大的設定。如果當前配置能力不足,您還可以分配額外的資源。將資料庫與使用它們的應用程式 colocating(共置)也有助於在資料庫和應用程式之間提供良好的網路效能。
管理複雜性
就管理複雜性而言,雲託管資料庫相當簡單。您支付給提供商,讓他們為您承擔大部分管理負擔。雖然您仍然需要控制您的賬戶和影響資料庫的設定,但硬體、作業系統和大部分 MySQL 配置將由提供商處理。這可以極大地減少使用資料庫的管理開銷,但在某些特殊情況下,您可能無法訪問所需的調優級別。
補充說明
總的來說,為雲提供商管理的 MySQL 資料庫付費通常是一個有吸引力的選擇。它在擴充套件和效能方面提供了極大的靈活性,且管理工作量較小。選擇雲提供商資料庫服務的缺點是,在某些級別下,您最終支付的費用可能比其他方式更高。此外,如果您的工具開始過度依賴提供商特定的功能,則存在被當前提供商“鎖定”的風險。
第三方託管資料庫
除了直接從雲提供商購買資料庫外,您還可以選擇透過第三方提供商管理您的資料庫。在大多數情況下,此選項會將資料庫部署並管理到您選擇的雲或多個雲上,從而將資料庫管理與底層資源提供商解耦。
| 託管選項 | 第三方託管 |
|---|---|
| 專案階段 | 開發、暫存、生產 |
| 成本 | 高度多樣,取決於您的選擇 和使用情況。 |
| 效能 | 高度可變 |
| 可伸縮性 | 高 |
| 管理複雜性 | 低 |
| 補充說明 | 第三方託管資料庫具有許多與 雲提供商資料庫相同的優勢。 然而,透過第三方管理您的資料庫,您 可以將資料庫 管理與底層雲提供商解耦。 這可以使未來更容易遷移到不同的 主機,並且有時可以提供 更強大的管理選項。 |
由第三方提供商管理的資料庫通常使用與雲提供商本身提供的資料庫相同的基本元件。然而,第三方提供商通常與多個雲合作,在您的賬戶中啟動資源,並且如果您需要,通常會提供更低級別的訪問許可權。該服務將不會使用雲提供商提供的資料庫,而是會在提供商的虛擬伺服器上啟動,並使用這些伺服器安裝和配置 MySQL。他們可以調整作業系統上的設定,併為您提供對託管您例項的伺服器的訪問許可權。第三方 MySQL 提供商的一個例子是 ScaleGrid,它目前可以在四個不同的雲中管理例項。
第三方產品
以下第三方提供商提供託管 MySQL 資料庫,您可以根據需要購買、配置和擴充套件
伺服器和大部分 MySQL 將由提供商管理,而您將能夠設定資料庫執行的雲平臺、擴充套件選項、調整設定和管理訪問。您可以配置您的資料庫使其可以從網際網路連線,或將它們直接連線到由同一提供商管理的應用程式。
成本
就成本而言,第三方解決方案通常也具有高度可變性。作為使用者,您需要支付部署到雲上的計算資源費用,以及您的資料庫管理服務收取的管理費用。由於您向雲提供商支付的是更基礎的資源費用而非託管資料庫費用,因此這方面的成本可能較小。然而,與管理服務相關的成本在某些價格點上可能會使其總成本更高。您需要弄清楚每一方在不同級別上的擴充套件方式,以確定您的總成本。
效能
資料庫的效能特性也可能顯著不同。由於您的管理服務安裝在雲中的計算例項上,因此您的提供商除了 MySQL 設定外,還能夠調整伺服器配置。這意味著他們可能能夠調整一些設定以更合理地匹配您的需求。
另一方面,他們可能無法訪問虛擬化和硬體元件的低級別層,這些層是進行充分調優所必需的。強烈建議您對照雲提供商提供的原生資料庫來測試您的效能。
可伸縮性
第三方託管資料庫的可伸縮性通常非常好。因為這些提供商可以在任何具有足夠資源的計算例項上進行部署,所以它們有時可以為您提供比雲提供商公開的更廣泛的擴充套件選項。如果您的擴充套件原因之一是為了提高可用性,許多第三方服務都能夠跨越多個可用區甚至提供商。
管理複雜性
用於管理資料庫的第三方服務具有不同程度的複雜性。由於此選項需要兩個不同提供商(託管計算例項的雲和資料庫管理服務)之間的協調,因此與使用雲提供商提供的原生資料庫服務相比,其複雜性必然會增加。
一些管理服務將自己定位為簡化的選項,以與共享虛擬主機類似的方式隱藏複雜性。其他解決方案利用作業系統可訪問的優勢,向用戶公開廣泛的配置選項。許多服務提供兩種體驗,以允許使用者找到自己偏好的複雜性級別。
補充說明
將資料庫管理與底層資源提供商解耦既有優點也有缺點。
如果您的資料庫管理服務抽象了底層,您在遷移到不同的雲提供商時可能會有更大的靈活性。這種抽象還讓您可以選擇自己覺得舒適的複雜程度。您可以使用資料庫管理服務提供的完整抽象和介面,但由於您也可以訪問為您預置的資料庫伺服器,您可以登入並根據需要修改資料庫伺服器。資料庫管理服務還可能提供一個簡單的介面來管理這些作業系統級別的調整。
這種設定的缺點在於,您將依賴多個方來確保資料庫的正確執行。這可能會增加服務中斷的可能性。您還可能會錯過雲提供商提供的資料庫服務所具備的任何底層最佳化。您的資料庫管理服務只能訪問雲提供商向其公開的內容,並且無法最佳化底層虛擬化或硬體層。
總之,使用第三方管理服務關乎偏好和測試。您需要測試效能並瞭解定價結構在不同使用級別上可能如何影響您。
總結
以下是此處討論的各種選項之間的比較概述
| 託管選項 | 本地開發機器 | 單獨的伺服器 | 雲提供商託管 | 第三方託管 | 應用程式平臺託管 |
|---|---|---|---|---|---|
| 專案階段 | 開發 | 開發、暫存、生產 | 開發、暫存、生產 | 開發、暫存、生產 | 開發、暫存、生產 |
| 成本 | 無額外成本 | 可變。需額外購買或租用 伺服器,外加額外管理成本。 | 高度可變,取決於您的選擇 和使用情況。 | 高度多樣,取決於您的選擇 和使用情況。 | 高度可變 |
| 效能 | 低 | 潛力巨大 | 高度可變 | 高度可變 | 高度可變 |
| 可伸縮性 | 無 | 潛力巨大 | 高 | 高 | 高 |
| 管理複雜性 | 低 | 高 | 低 | 低 | 低 |
| 補充說明 | 無需網路配置。良好 適用於本地開發。 | 最靈活的選項。也需要最大的 手動管理量。如果您 內部有硬體或資料庫專業知識 可用於管理。 | 一種高度可擴充套件的解決方案,通常由 同一雲提供商提供,該提供商可以執行您的 應用程式。這允許對網路和效能進行額外控制 而無需承擔執行您自己的伺服器的 繁重工作。 | 第三方託管資料庫具有許多與 雲提供商資料庫相同的優勢。 然而,透過第三方管理您的資料庫,您 可以將資料庫 管理與底層雲提供商解耦。 這可以使未來更容易遷移到不同的 主機,並且有時可以提供 更強大的管理選項。 | 應用程式提供的資料庫服務 平臺通常側重於簡單的 管理和訪問,而非大多數其他 因素。成本可能會急劇變化 根據您的使用情況而定,因此很重要 要密切關注擴充套件和使用如何 影響您的支付。 |
託管資料庫的正確選擇在很大程度上取決於您的應用程式要求、開發階段以及您自行管理 MySQL 的能力。不同的選擇在這些因素之間提供了權衡,使其在特定時間或對特定組織更合適。
