Kiến trúc Branching Database của Neon
Khác với PostgreSQL truyền thống nơi mỗi instance là một database độc lập, Neon sử dụng kiến trúc tách biệt giữa Compute (máy tính) và Storage (lưu trữ). Điều này cho phép tính năng Branching.
Nguyên lý hoạt động: Storage của Neon được chia nhỏ thành các "Branch" (nhánh). Mỗi Branch là một snapshot độc lập của dữ liệu tại một thời điểm cụ thể. Khi bạn tạo Branch mới, Neon không sao chép toàn bộ dữ liệu (copy-on-write) mà chỉ trỏ đến điểm dữ liệu đó, giúp việc tạo nhánh diễn ra tức thì.
Lợi ích: Bạn có thể tạo một nhánh mới để phát triển tính năng (Feature Branch) hoặc kiểm thử (Staging Branch) mà không ảnh hưởng đến dữ liệu của Production. Nếu cần, bạn có thể hợp nhất (merge) hoặc xóa nhánh này bất cứ lúc nào.
Để minh họa, chúng ta sẽ tạo một Branch mới từ Database mặc định (Branch 'main') ngay trên Dashboard Neon.
Truy cập Neon Dashboard, chọn Project đã tạo ở Phần 1. Click vào tab Branches.
Click nút New branch.
Đặt tên nhánh là development và chọn Branch nguồn là main.
Click Create branch.
Kết quả mong đợi: Dashboard hiển thị hai nhánh song song: main và development. Nhánh development có trạng thái Active và chứa toàn bộ dữ liệu hiện tại của main.
Verify kết quả: Click vào nhánh development, vào tab Tables. Bạn sẽ thấy các bảng dữ liệu y hệt như nhánh main tại thời điểm tạo nhánh.
Chiết xuất Connection String từ Dashboard
Để kết nối ứng dụng hoặc công cụ quản trị đến Database Serverless, bạn cần một Connection String (chuỗi kết nối). Neon cung cấp 2 loại Endpoint chính: Compute Endpoint (kết nối trực tiếp, tối ưu cho server) và Serverless Endpoint (kết nối qua load balancer, tự động scale).
Trong phần này, chúng ta sẽ lấy Connection String cho nhánh development vừa tạo để thử nghiệm kết nối.
Vào nhánh development trên Dashboard.
Click vào tab Connect.
Chọn giao thức psql (PostgreSQL CLI).
Sao chép toàn bộ chuỗi kết nối hiển thị. Chuỗi này có dạng: postgresql://user:password@ep-xxx.us-east-2.aws.neon.tech/dev?options=--search_path=dev.
Thay thế phần user và password bằng thông tin thực tế của bạn nếu Dashboard yêu cầu nhập lại.
Chú ý: Phần ep-xxx... là Endpoint ID riêng biệt cho nhánh development, khác với nhánh main. Đây là điểm mấu chốt của Branching.
Kết quả mong đợi: Bạn có một chuỗi kết nối hoàn chỉnh, sẵn sàng để paste vào terminal.
Kết nối trực tiếp (Direct Connect) từ Ubuntu 24.04
Phương pháp này kết nối trực tiếp từ Ubuntu đến Endpoint của Neon qua cổng 5432. Đây là cách nhanh nhất để kiểm tra tính khả dụng của Branch mới.
Đảm bảo máy Ubuntu 24.04 của bạn đã cài đặt PostgreSQL client.
sudo apt update && sudo apt install -y postgresql-client
Kết quả mong đợi: Hệ thống thông báo đã cài đặt gói postgresql-client thành công.
Sử dụng lệnh psql với Connection String đã sao chép ở bước trước.
psql "postgresql://neondb_owner:YOUR_PASSWORD@ep-development-xxx.us-east-2.aws.neon.tech/dev?options=--search_path=dev"
Kết quả mong đợi: Terminal chuyển sang giao diện dev=# (hoặc development=# tùy cấu hình schema), báo hiệu kết nối thành công.
Thực thi lệnh SQL đơn giản để verify kết nối và kiểm tra Branch.
SELECT current_database();
Kết quả mong đợi: Trả về tên database (thường là dev hoặc neondb). Nếu bạn thấy prompt dev=#, nghĩa là bạn đang ở trong nhánh development.
Tạo một bảng thử nghiệm để xác nhận Branch này độc lập với main.
CREATE TABLE test_branching (id INT, status TEXT); INSERT INTO test_branching VALUES (1, 'development_branch'); SELECT * FROM test_branching;
Kết quả mong đợi: Bảng được tạo và hiển thị dòng dữ liệu 1 | development_branch.
Ra khỏi shell PostgreSQL.
\q
Kết nối qua SSH Tunnel (Secure Tunnel)
Trong môi trường Production, bạn có thể muốn ẩn Database sau một bastion host hoặc yêu cầu kết nối qua SSH Tunnel để tăng tính bảo mật. Neon hỗ trợ điều này bằng cách định tuyến lưu lượng qua SSH.
Chúng ta sẽ thiết lập một SSH Tunnel từ Ubuntu sang Endpoint của Neon, sau đó kết nối local.
Đầu tiên, đảm bảo bạn đã cài đặt OpenSSH client.
sudo apt install -y openssh-client
Kết quả mong đợi: Công cụ ssh sẵn sàng sử dụng.
Tạo một SSH Tunnel. Lệnh này sẽ lắng nghe cổng local 5433 và chuyển tiếp lưu lượng đến Endpoint của Neon (cổng 5432).
Cú lệnh: ssh -N -L [Cổng Local]:[Host Endpoint]:[Cổng Remote] [User]@[Host Endpoint].
Thay thế thông tin thực tế của bạn (đặc biệt là User và Host Endpoint).
ssh -N -L 5433:ep-development-xxx.us-east-2.aws.neon.tech:5432 neondb_owner@ep-development-xxx.us-east-2.aws.neon.tech
Kết quả mong đợi: Terminal bị giữ lại (hang) với thông báo Warning: Permanently added 'ep-development-xxx...' to the list of known hosts.. Điều này là bình thường, nghĩa là tunnel đã mở. Nhấn Ctrl+C để thoát khi không dùng nữa.
Mở một terminal mới (giữ terminal cũ chạy tunnel). Kết nối đến localhost qua cổng 5433.
psql -h localhost -p 5433 -U neondb_owner -d dev -W
Điền password khi được yêu cầu.
Kết quả mong đợi: Kết nối thành công, prompt hiện ra dev=#.
Verify tính độc lập: Kiểm tra bảng test_branching đã tạo ở phần Direct Connect.
SELECT * FROM test_branching;
Kết quả mong đợi: Dữ liệu vẫn hiện diện, xác nhận SSH Tunnel hoạt động chính xác và dẫn đến đúng Branch.
Ra khỏi shell và đóng tunnel (ở terminal cũ).
\q
Ctrl+C
Verify kết quả cuối cùng: Quay lại Dashboard Neon, vào nhánh development, tab Tables. Bạn sẽ thấy bảng test_branching đã được thêm vào, xác nhận dữ liệu đã được ghi vào nhánh này thành công.
Khác biệt: Nếu bạn chuyển sang nhánh main và check lại bảng này, nó sẽ không tồn tại, chứng tỏ tính năng Branching hoạt động hoàn hảo.
Điều hướng series:
Mục lục: Series: Triển khai Database Serverless với Neon và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và đăng ký tài khoản Neon
Phần 3: Cấu hình ứng dụng Python/NodeJS trên Ubuntu để tương tác với Neon »