Series Chinh phục Vercel | Bài 4: Edge Functions - "Sức mạnh ánh sáng" tại biên mạng
Trước đây, khi bạn viết api/transactions.js, code đó chạy trong một Node.js runtime ở một trung tâm dữ liệu cố định (thường là ở Mỹ hoặc Singapore). Nếu hành khách đang ở trạm Metro tại TP.HCM, request phải "bay" sang server của Vercel, xử lý, rồi "bay" về lại.
Edge Functions thay đổi cuộc chơi: Nó không chạy trên Node.js mà chạy trên V8 Isolate (một môi trường siêu nhẹ). Nó được triển khai trên tất cả các trạm trung chuyển dữ liệu của Vercel trên toàn thế giới. Khi hành khách quét vé, code của bạn chạy ngay tại trạm trung chuyển gần nhất (vài mili-giây).
1. Viết một Edge Function đầu tiên
Để chuyển một API thường sang Edge, bạn chỉ cần thay đổi "runtime" trong file code.
File: /api/verify-ticket.js
// Chỉ cần thêm dòng này, Vercel sẽ tự hiểu dùng Edge Runtime
export const config = {
runtime: 'edge',
};
export default async function handler(request) {
// Edge Functions không dùng res.json() mà trả về Response object
const { ticketId } = await request.json();
// Logic kiểm tra vé cực nhanh tại Edge
return new Response(
JSON.stringify({ ticketId, status: 'valid', timestamp: Date.now() }),
{ status: 200, headers: { 'content-type': 'application/json' } }
);
}
2. Tại sao kỹ sư AFC cần Edge Functions?
- Zero Cold Start: Với Node.js thông thường, lần gọi đầu tiên sau một thời gian dài thường bị "trễ" (cold start). Với Edge Functions, nó gần như khởi động tức thì.
- Kiểm tra thông tin thẻ ngay tại trạm: Bạn có thể đẩy các danh sách thẻ bị khóa (Blacklist) ra Edge. Khi hành khách quẹt thẻ, Edge Function kiểm tra ngay tại đó, không cần gọi về Database trung tâm, giúp cổng cửa mở nhanh hơn 100-200ms.
- Phân quyền/Định tuyến (Middleware): Bạn có thể dùng Edge để chặn các request tấn công DDoS trước khi chúng kịp chạm vào hệ thống chính.
3. "Cái bẫy" cần lưu ý (Rất quan trọng)
Edge Functions là "vũ khí" siêu mạnh nhưng bị hạn chế vì nó không chạy trên môi trường Node.js đầy đủ:
- Không dùng được các thư viện Node.js truyền thống: Ví dụ fs (file system), hoặc các thư viện phụ thuộc vào net/dgram (như thư viện pg mà bạn dùng ở bài trước).
- Giải pháp: Nếu bạn cần truy vấn Database từ Edge, hãy dùng các Database hỗ trợ HTTP API như Neon Postgres, Upstash Redis, hoặc PlanetScale.
4. Thực chiến: Sử dụng Middleware để bảo vệ Dashboard
Đây là cách các kỹ sư hệ thống dùng Edge Functions để bảo mật trang quản trị:
Tạo file middleware.ts ở thư mục gốc:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
// Chỉ kiểm tra quyền admin ở Edge, chặn ngay từ ngoài cửa
const authCookie = request.cookies.get('admin-token');
if (!authCookie && request.nextUrl.pathname.startsWith('/admin')) {
return NextResponse.redirect(new URL('/login', request.url));
}
return NextResponse.next();
}
Điều này có nghĩa là: Hacker chưa kịp load đến file JS của dashboard thì đã bị "đá" ra ngoài bởi Edge Function rồi!
Bài tập cho bạn:
Hãy thử chuyển API /api/transactions ở Bài 2 sang sử dụng runtime: 'edge'. Bạn sẽ thấy tốc độ phản hồi (Response Time) giảm xuống đáng kể khi test bằng các công cụ đo latency!
All rights reserved