Neon 是基於 PostgreSQL 的 Serverless Database,具備了 Serverless 帶來的高乘載量、划算的費用與 PostgreSQL 強大的效能的一款開源資料庫服務。
撰文當下為 2023/02/17,目前 Neon 仍處於預覽階段。
什麼是 Serverless
Serverless 是雲端服務的一種型態。以往使用雲端服務都是租一台雲端上的 VM 或是如 RDS 資料庫這種預先處理得好的服務,而只要啟用了就會開始計算費用,無論是否有實際的使用者進行連線。
Serverless 提供一種計價與使用更細緻的的架構,如同使用託管資料庫一樣客戶不需要管理實際的部署、細節的參數或管理伺服器叢集與附載平衡,更進一步達到只有使用了才要付費,算的是實際使用的時間而不是只要租用就需要付費,而由於架構上也是針對實際的 Request 才會產生執行個體來處理請求,因此理論上 Serverless 在架構上就具備了水平拓展的能力,十分適合用來開發 SaaS 服務在乘載量與維運成本達到一個平衡
Serverless Database 是如何實現的
Neon 將資料庫拆離成應用程式與儲存空間,可以理解成後端架構常見的無狀態 API 與保存狀態的 Database。
應用程式端用 Compute 來稱呼 Serverless 化的 PostgreSQL 由於沒有了狀態,可以在需要使用時才啟動,也做到沒有使用就不佔算力,而要使用時則可以透過 k8s 調度多組 Compute 來達到即時性的算力提升,這也解決了以前資料庫算力無法水平拓展的問題,有機會讓資料庫內寫 SP 的老專案進行搬移而沒有效能上的瓶頸,或許有機會視為老專案又沒有人力改寫的救星。
儲存空間設計了像是讀寫分離層的 Safekeeper、Pageserver 與 Object storage ,Safekeeper 可以理解成是讀寫分離中的寫入 Main Database,而 Pageserver 理解成同步後擔任讀取的 Slave Database,而 Object storage 可以視為是封存資料庫部分資料用以降低負擔的 Archive 層,而不同的是這些過程都不需要使用者煩惱架構,Neon 都會自動處理確保了資料的安全性與足夠經濟的維護成本。
Neno 架構,來自 https://neon.tech/docs/introduction/architecture-overview
資料庫分支功能
除了 Serverless 的好處外,Neno 還具備 Branching 的功能,我們可以像軟體開發一樣,為每一個資料庫分岔出一個獨立的分支,讓程式碼的分支可以完全等於資料庫的結構,避免了共用資料庫造成欄位讀取錯誤的問題,很大程度加速了開發與簡化資料庫管理的問題。
來自 https://neon.tech/docs/introduction/branching
如何申請使用與重點功能介紹
Neon Dashboard 上可以看到目前該專案擁有的資料庫分支、連線字串、已使用額度與連線紀錄
我們可以產生分支,並且可以選擇要複製的分支與要複製分支內什麼時間範圍後的資料。
優勢與競爭對手
在 Neon 推出之前已有
Amazon Aurora 這樣成熟的 Serverless Database 在市場上,但
Amazon Aurora 是閉源的產品,而 Neon 是開源的專案這意味著有能力的公司可以基於 Neon 進行自託管或是改良其中的邏輯回饋於社群並且獲得更好的體驗。
Neon 在
Docker Hub 上有提供了 Image 可以使用,適用於對資料有高度監管的單位與想要在內部環境搭建的企業。
其獨特的 Branching 機制是目前其他資料庫服務還未看到的,而這樣的機制在我實際公司專案投入下是很大程度了解決了資料庫遷移與版本控制的問題,是一個看上去很普通但實際使用很驚艷的功能,這會帶來很強的競爭力。
目前 Neno 是否可以投入正式環境?
還沒有辦法。
由於目前還在預覽階段,因此不建議投入正式環境,但有提供很佛心的免費的額度可供測試,可以在上面進行開發與測試並且等待正式版本的發佈,這裡是
免費額度的說明頁面。
實際使用經驗
官方宣稱與 PostgreSQL 15 完全兼容,而測試下來也的確沒有遇到問題,效能上十分的驚艷,也嘗試執行了大量的 SP 來做測試而結果令人滿意。
備份還原機制能準確到秒級的還原,備份還原加上分支的機制對 AP 端產生異常資料時是一個很棒的機制,確保了可以先將有問題的資料分支出來並且還原資料到版本更新之前,不會導致無法找尋問題也可以確保服務不會因此中斷。
參考資料