Cloudflare Workers là gì?
Hãy tưởng tượng bạn đang xây dựng một trang web phục vụ khán giả toàn cầu. Nếu máy chủ của bạn đặt tại Việt Nam, người dùng ở Châu Âu hoặc Mỹ có thể gặp phải độ trễ đáng kể do các yêu cầu phải di chuyển xuyên lục địa. Với Cloudflare Workers, mã của bạn được sao chép và thực thi tại trung tâm dữ liệu gần người dùng nhất. Nó giống như việc có một "trợ lý ảo" ở mọi quốc gia, sẵn sàng phục vụ người dùng mà không cần chờ tín hiệu từ máy chủ chính.
Cloudflare Workers chạy trên V8, công cụ JavaScript mạnh mẽ được sử dụng trong Google Chrome. Điều này cho phép các nhà phát triển viết JavaScript hoặc TypeScript hiện đại mà không phải lo lắng về khả năng tương thích, đồng thời hỗ trợ WebAssembly cho các tác vụ hiệu suất cao.
Các Ưu Điểm Chính:
- Khởi động Lạnh (Cold Starts) Tức Thì: Thời gian khởi động dưới 1ms (so với 300-500ms đối với serverless truyền thống).
- Triển Khai Toàn Cầu: Tự động phân phối trên toàn bộ mạng lưới điện toán biên (edge network) của Cloudflare.
- Hiệu Suất Cao: Logic chạy gần người dùng để giảm thiểu độ trễ (latency).
- Quản lý Máy Chủ Bằng Không: Tập trung hoàn toàn vào mã của bạn.
Tổng quan về Gói Miễn Phí (Free Tier)
Cloudflare cung cấp Gói Miễn Phí rất hào phóng, biến nó thành một sân chơi hoàn hảo cho sinh viên và các nhà phát triển startup:
- 100.000 yêu cầu mỗi ngày (~3 triệu mỗi tháng).
- 10ms thời gian CPU cho mỗi yêu cầu.
- Không giới hạn số lượng Worker scripts.
- Không giới hạn Tên miền Tùy chỉnh (Custom Domains).
- Cloudflare KV: 1GB dung lượng lưu trữ, 100k lượt đọc/ngày, 1k lượt ghi/ngày.
Hướng dẫn Thiết lập Từng Bước
1. Khởi tạo môi trường của bạn
Đầu tiên, hãy tạo một tài khoản Cloudflare miễn phí và cài đặt công cụ CLI Wrangler.
# Cài đặt Wrangler toàn cục
npm install -g wrangler
# Đăng nhập vào tài khoản Cloudflare của bạn
wrangler login
# Khởi tạo một dự án mới
wrangler init my-first-worker
2. Triển khai code
Một Worker cơ bản sử dụng trình xử lý fetch chuẩn. Tạo một tệp có tên index.js:
export default {
async fetch(request, env, ctx) {
try {
return new Response('Hello World from the Edge!', {
headers: { 'Content-Type': 'text/plain' }
});
} catch (error) {
return new Response(`Error: ${error.message}`, { status: 500 });
}
}
};
3. Triển khai ra Vùng Biên (Edge)
Thực thi lệnh triển khai sẽ gửi mã của bạn đến tất cả hơn 300 trung tâm dữ liệu ngay lập tức.
wrangler deploy
Các Trường Hợp Sử Dụng Thực Tế
1. Cổng API/Proxy
Bảo vệ hoặc định tuyến các lệnh gọi API đồng thời thêm tiêu đề tùy chỉnh hoặc xác thực.
export default {
async fetch(request, env) {
try {
const url = new URL(request.url);
// Nhân bản yêu cầu và thêm Khóa API
const modifiedRequest = new Request(request);
modifiedRequest.headers.set('X-Custom-Auth', env.API_SECRET);
// Chuyển tiếp đến máy chủ gốc
return await fetch('https://api.your-backend.com' + url.pathname, modifiedRequest);
} catch (err) {
return new Response('Gateway Error', { status: 502 });
}
}
};
2. Rút gọn URL bằng KV
Tạo một trình chuyển hướng URL cực nhanh bằng cách sử dụng kho lưu trữ Key-Value (KV) của Cloudflare.
export default {
async fetch(request, env) {
const url = new URL(request.url);
const slug = url.pathname.substring(1);
if (!slug) return new Response('Welcome to the Edge Redirection service.');
try {
const destination = await env.URLS_KV.get(slug);
if (destination) {
return Response.redirect(destination, 301);
}
return new Response('URL Path Not Found', { status: 404 });
} catch (e) {
return new Response('Storage Error', { status: 500 });
}
}
};
Các Lỗi Thường Gặp & Giải Pháp
| Lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
CPU Limit Exceeded |
Mã của bạn vượt quá giới hạn 10ms trong Gói Miễn Phí. | Tối ưu hóa các vòng lặp lồng nhau hoặc chuyển logic nặng sang phía client. |
ReferenceError: [API] is not defined |
Cố gắng sử dụng các API của Node.js (ví dụ: fs, path) không có trong môi trường runtime V8. |
Sử dụng các API chuẩn Web hoặc Fetch. |
Binding Error |
Yêu cầu một KV namespace hoặc Secret không được định nghĩa trong wrangler.toml. |
Đảm bảo rằng tất cả các kv_namespaces và vars được ánh xạ chính xác trong tệp cấu hình của bạn. |
Các Thực Hành Tốt Nhất
- Bảo mật là trên hết: Không bao giờ mã hóa cứng (hardcode) các thông tin bí mật. Hãy sử dụng
wrangler secret put <KEY>để mã hóa dữ liệu nhạy cảm. - Giữ mã gọn nhẹ: Giới hạn CPU 10ms là hào phóng nhưng nghiêm ngặt. Tránh các tính toán nặng trong trình xử lý fetch.
- Tận dụng Bộ nhớ đệm Edge: Sử dụng Cache API để lưu trữ phản hồi tại vùng biên và tiết kiệm chu kỳ CPU.