0

Series Cloud Database Neon #1: Kiến trúc Serverless và "Sức mạnh Git" cho Database

1. Neon là gì và tại sao Backend cần nó?

Trong các hệ thống truyền thống, bạn có 1 database duy nhất. Mọi thay đổi cấu trúc bảng (schema) hay thử nghiệm tính năng mới đều phải làm trực tiếp trên database đó. Rủi ro là quá lớn.

Neon tách biệt hoàn toàn Compute (CPU/RAM chạy SQL) và Storage (ổ đĩa lưu trữ). Nhờ đó, nó có thể tạo ra một "bản sao" của ổ đĩa chỉ trong vài mili-giây mà không hề tốn thêm dung lượng lưu trữ (nhờ cơ chế Copy-on-Write).

Lợi ích cho dự án AFC Metro:

  • Bạn cần test tính năng đồng bộ vé mới mà không muốn ảnh hưởng dữ liệu thật? Tạo một nhánh (Branch) Database trong 1 giây.
  • CI/CD pipeline của bạn cần một Database mới tinh để chạy Test tự động? Tạo nhánh, chạy test, xóa nhánh – tất cả tự động qua API.

2. Thiết lập nhánh (Branching) – "Git cho Database"

Khi bạn tạo một Project trên Neon, bạn có một main branch. Để bắt đầu một tính năng mới (ví dụ: fix-sync-bug), hãy làm việc trên một nhánh mới.

Cách tạo nhánh qua Neon CLI:

# Cài đặt CLI
npm install -g neon-cli

# Tạo nhánh từ main
neon branches create --name fix-sync-bug --parent main

Giờ đây, bạn có một URL kết nối Database riêng cho nhánh fix-sync-bug. Bạn có thể thoải mái chạy migration, thêm cột, drop bảng mà không hề làm ảnh hưởng đến nhánh main đang chạy ở môi trường Production.

3. Tối ưu Serverless: "Scale to Zero"

Với các hệ thống chỉ chạy mạnh vào giờ cao điểm như trạm Metro, việc giữ một Server luôn bật (Running 24/7) rất lãng phí tiền.

Neon có tính năng Scale to Zero. Khi không có kết nối nào đến Database (ví dụ: vào 3 giờ sáng), Neon sẽ tự động "tắt" các tiến trình Compute. Bạn không tốn một xu tiền compute nào. Khi có một request API đầu tiên bắn tới, Neon sẽ "đánh thức" (wake up) Database trong khoảng 1-2 giây để phục vụ.

Cấu hình trong Laravel (.env): Vì Neon là PostgreSQL thuần túy, bạn chỉ cần thay đổi connection string:

DB_CONNECTION=pgsql
DB_HOST=ep-damp-wind-123456.us-east-2.aws.neon.tech
DB_PORT=5432
DB_DATABASE=neondb
# Neon yêu cầu SSL
DB_SSLMODE=require

4. Bẫy hiệu năng của "Cold Start"

Mặc dù Scale to Zero rất tiết kiệm, nhưng với hệ thống thời gian thực như AFC Metro, việc chờ 2 giây để Database "thức giấc" là không thể chấp nhận được.

Lời khuyên Senior:

  • Với các nhánh Production: Hãy tắt tính năng Auto-suspend (Luôn giữ chạy 24/7)
  • Với các nhánh Staging/Dev: Hãy bật Auto-suspend để tiết kiệm chi phí tối đa.

Tổng kết Bài 1

Chúng ta đã định hình được triết lý của Neon: Database không còn là một khối cứng nhắc. Nó linh hoạt như Git, có thể tách nhánh, và thông minh đến mức biết tự ngủ để tiết kiệm tiền cho công ty.

Ở bài tiếp theo, bạn muốn chúng ta đi sâu vào "Cách sử dụng Neon Branching trong CI/CD Pipeline" (để mỗi khi bạn mở một Pull Request, hệ thống sẽ tự động tạo một Database nhánh cho code đó chạy test), hay muốn tìm hiểu về "Driver chuyên dụng cho serverless" (vốn giúp tránh lỗi 'too many connections' khi ứng dụng Laravel của bạn scale lên hàng trăm worker)?


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí