Cấu hình giới hạn độ trễ và tự động suspend cho nhánh
Bạn cần thiết lập thời gian chờ (timeout) để ngăn các kết nối treo quá lâu và kích hoạt chế độ tự động suspend (auto-suspend) khi nhánh không hoạt động, giúp tiết kiệm tài nguyên tính toán.
Truy cập vào Dashboard của Neon, chọn Project và Branch bạn đang muốn tối ưu. Tìm mục Settings rồi chọn tab Serverless để cấu hình hành vi của instance.
Thiết lập thời gian tự động suspend thành 5 phút để giảm chi phí khi không có truy vấn. Điều này đảm bảo instance sẽ chuyển sang trạng thái "suspended" (tạm dừng) sau 300 giây không hoạt động, chỉ tốn phí lưu trữ, không tốn phí tính toán.
Để kiểm soát độ trễ khởi động (cold start), bạn cần đặt tham số idle_timeout trong ứng dụng hoặc cấu hình connection pool. Dưới đây là cách cấu hình file môi trường trên Ubuntu để ứng dụng Python/NodeJS của bạn tôn trọng giới hạn này.
Tạo hoặc chỉnh sửa file .env trong thư mục gốc của ứng dụng tại đường dẫn /var/www/neon-app/.env với nội dung hoàn chỉnh sau:
NEON_TIMEOUT_MS=120000
NEON_IDLE_TIMEOUT_MS=300000
PGIDLE_TIMEOUT=300
MAX_CONCURRENT_QUERIES=20
Khởi động lại ứng dụng để áp dụng các biến môi trường mới. Kết quả mong đợi: Khi ứng dụng không nhận truy vấn trong 5 phút, instance Neon sẽ tự động suspend; khi có truy vấn mới, instance sẽ khởi động lại (cold start) nhưng không bị lỗi timeout do đã cấu hình thời gian chờ phù hợp.
Để verify kết quả, truy cập Dashboard Neon, nhìn vào biểu đồ Compute Usage. Bạn sẽ thấy các đoạn màu xám (suspended) xen kẽ với màu xanh (active) khi không có truy vấn. Chạy lệnh psql sau khoảng 5 phút im lặng, bạn sẽ thấy trạng thái instance chuyển từ Suspended sang Active trong vòng 1-3 giây.
Phân tích và điều chỉnh kích thước instance để phù hợp với workload
Neon cung cấp các loại instance với số lượng vCPU và RAM khác nhau. Bạn cần phân tích workload hiện tại để chọn kích thước phù hợp, tránh lãng phí hoặc thiếu tài nguyên gây chậm.
Trước khi thay đổi, hãy xem xét thông số Compute Time và CPU Utilization trong tab Metrics của nhánh hiện tại. Nếu CPU sử dụng dưới 20% liên tục trong 24h, bạn đang chọn instance quá lớn.
Để điều chỉnh, vào tab Settings của Branch, chọn mục Compute. Tại đây bạn sẽ thấy danh sách các Compute Size (ví dụ: Small, Medium, Large). Chọn kích thước nhỏ hơn nếu workload nhẹ, hoặc lớn hơn nếu có báo lỗi OOM (Out of Memory).
Thực hiện thay đổi cấu hình instance bằng lệnh CLI Neon (nếu bạn đã cài đặt neonctl) hoặc trực tiếp qua Dashboard. Dưới đây là ví dụ sử dụng CLI để giảm instance từ medium xuống small cho nhánh dev-branch:
neonctl branch update --branch dev-branch --compute-size small
Kết quả mong đợi: Dashboard sẽ hiển thị thông báo Update pending và sau khoảng 30-60 giây, instance sẽ được resize. Quá trình này có thể gây gián đoạn kết nối trong vài giây (reconnect).
Để verify kết quả, chạy lệnh kiểm tra tài nguyên ngay trên instance sau khi resize. Kết nối vào database và chạy câu lệnh SQL sau để xem thông số cấu hình hiện tại:
psql -h your-branch-endpoint.neon.tech -U neon_superuser -c "SHOW max_connections; SHOW shared_buffers;"
So sánh giá trị trả về với tài liệu của Neon cho kích thước small. Nếu max_connections và shared_buffers giảm xuống đúng mức quy định của gói small, nghĩa là việc điều chỉnh kích thước đã thành công.
Đặt giới hạn chi phí (Budget Alert) để tránh phát sinh chi phí ngoài ý muốn
Quản lý chi phí là bước quan trọng nhất khi làm việc với mô hình Serverless theo giờ sử dụng. Bạn cần thiết lập Budget Alert để nhận cảnh báo khi chi phí vượt quá ngưỡng an toàn, tránh hóa đơn bất ngờ.
Truy cập vào menu chính của Neon Dashboard, chọn mục Organization (hoặc Account tùy giao diện mới), sau đó chọn tab Billing. Tại đây bạn sẽ thấy biểu đồ chi phí thực tế và nút Budget Alerts.
Cấu hình ngưỡng cảnh báo: Đặt mức Monthly Budget (ngân sách hàng tháng) là 50 USD. Thiết lập Alert Threshold (ngưỡng cảnh báo) ở mức 80% của ngân sách (tương đương 40 USD). Khi chi phí đạt 40 USD, hệ thống sẽ gửi email cảnh báo.
Để tự động hóa việc giám sát này trên server Ubuntu, bạn có thể tạo một script cron job định kỳ để gọi API của Neon và so sánh chi phí thực tế. Dưới đây là nội dung file script Python tại đường dẫn /usr/local/bin/neon-budget-checker.py:
#!/usr/bin/env python3
import requests
import os
from datetime import datetime
API_KEY = os.getenv("NEON_API_KEY")
ORG_ID = os.getenv("NEON_ORG_ID")
BUDGET_LIMIT = 50.0
ALERT_THRESHOLD = 0.8
def check_budget():
headers = {"Authorization": f"Bearer {API_KEY}"}
url = f"https://api.neon.tech/v1/orgs/{ORG_ID}/billing/current"
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
current_cost = float(data.get("amount", 0))
limit_reached = current_cost * (1 - ALERT_THRESHOLD)
if current_cost >= limit_reached:
msg = f"WARNING: Neon Budget reached {current_cost:.2f} USD (Limit: {BUDGET_LIMIT:.2f} USD)"
with open("/var/log/neon-budget.log", "a") as f:
f.write(f"{datetime.now()}: {msg}\n")
print(msg)
else:
print(f"Budget OK: {current_cost:.2f} USD")
else:
print(f"API Error: {response.status_code}")
except Exception as e:
print(f"Script Error: {str(e)}")
if __name__ == "__main__":
check_budget()
Cấp quyền thực thi cho script và thiết lập biến môi trường API Key trong file /etc/neon-env (tạo file mới với nội dung NEON_API_KEY=your_api_key_here và NEON_ORG_ID=your_org_id_here). Sau đó thêm vào crontab để chạy mỗi giờ:
chmod +x /usr/local/bin/neon-budget-checker.py
crontab -e
Thêm dòng sau vào file crontab (giữa các dòng lệnh có sẵn):
0 * * * * /usr/bin/python3 /usr/local/bin/neon-budget-checker.py >> /var/log/neon-budget.log 2>&1
Kết quả mong đợi: Script sẽ chạy mỗi giờ, gọi API Neon để lấy chi phí hiện tại. Nếu chi phí vượt quá 40 USD (80% của 50 USD), một dòng log cảnh báo sẽ được ghi vào /var/log/neon-budget.log.
Để verify kết quả, giả lập việc chi phí tăng cao bằng cách chỉnh sửa giá trị trả về trong code (nếu test) hoặc chờ đến khi có chi phí thực tế. Kiểm tra file log bằng lệnh sau để xác nhận cảnh báo đã được ghi lại đúng thời điểm:
tail -n 20 /var/log/neon-budget.log
Bạn sẽ thấy các dòng log có thời gian cập nhật và nội dung cảnh báo hoặc trạng thái OK, xác nhận hệ thống giám sát chi phí đang hoạt động chính xác.
Điều hướng series:
Mục lục: Series: Triển khai Database Serverless với Neon và Ubuntu 24.04
« Phần 4: Tận dụng tính năng Branching để phát triển và kiểm thử an toàn
Phần 6: Xử lý sự cố, giám sát và các mẹo nâng cao khi triển khai Neon »