blog.dopana

Back

Khi phát triển ứng dụng hiện đại, việc sử dụng CDN để lưu bộ nhớ đệm (cache) cho các tệp tĩnh như hình ảnh, CSS hay HTML đã rất quen thuộc. Nhưng đối với dữ liệu ứng dụng động cần được đọc trên toàn cầu với độ trễ gần như bằng 0 thì sao?

Đó chính là lý do ra đời của Cloudflare Workers KV (Key-Value): giải pháp lưu trữ dữ liệu dạng Khóa-Giá trị phân tán toàn cầu, tối ưu hóa đặc biệt cho các tác vụ đọc tần suất cao ở vùng biên (Edge).

1. Cloudflare KV là gì? (ELI5: Giải thích cực đơn giản)#

Hãy tưởng tượng bạn đang quản lý một chuỗi 330+ quán cà phê trên toàn cầu:

  • Nếu mỗi nhân viên pha chế ở Tokyo, London hay New York đều phải gọi điện về trụ sở ở California để kiểm tra bảng giá khuyến mãi hôm nay, khách hàng sẽ phải chờ đợi rất lâu.
  • Cloudflare KV giống như việc in sẵn một bản danh sách giá ưu đãi và đặt ngay tại quầy thu ngân của từng quán.
  • Khi khách hỏi, thu ngân tra cứu ngay lập tức (đọc cục bộ siêu nhanh, độ trễ < 1ms). Khi quản lý cập nhật giá mới ở California, các bản in mới sẽ được gửi đến tất cả chi nhánh trong vòng chưa đầy một phút (nhất quán cuối cùng - eventual consistency).
flowchart TD
    subgraph GlobalEdge["Mạng Lưới Toàn Cầu Cloudflare (330+ Điểm Edge)"]
        direction LR
        Edge1["🇯🇵 Tokyo Edge<br/>KV Cache Cục Bộ (~1ms)"]
        Edge2["🇬🇧 London Edge<br/>KV Cache Cục Bộ (~1ms)"]
        Edge3["🇻🇳 VN Edge<br/>KV Cache Cục Bộ (~1ms)"]
    end

    subgraph Central["Bộ Lưu Trữ Trung Tâm Core Storage"]
        CoreDB["Lưu Trữ Gốc Toàn Cầu<br/>Tầng Lưu Trữ Bền Vững"]
    end

    ClientTokyo["📱 Khách hàng ở Tokyo"] -->|GET /config| Edge1
    ClientLondon["📱 Khách hàng ở London"] -->|GET /config| Edge2
    ClientVN["📱 Khách hàng ở Việt Nam"] -->|GET /config| Edge3

    Admin["💻 Quản trị viên / Backend"] -->|PUT key=value Ghi| CoreDB
    CoreDB -.->|Đồng bộ dữ liệu bất đồng bộ| Edge1
    CoreDB -.->|Đồng bộ dữ liệu bất đồng bộ| Edge2
    CoreDB -.->|Đồng bộ dữ liệu bất đồng bộ| Edge3

2. Đặc điểm nổi bật của Cloudflare KV#

  • Thông lượng đọc khổng lồ: Tối ưu hóa để phục vụ hàng triệu lượt đọc mỗi giây trên toàn cầu.
  • Mô hình Đọc Cục Bộ - Ghi Trung Tâm: Các thao tác ghi đi về trung tâm lưu trữ, sau đó tự động sao chép phân tán đến 330+ trung tâm dữ liệu.
  • Nhất quán sau cùng (Eventual Consistency): Sau khi ghi, dữ liệu sẽ được cập nhật đồng bộ toàn cầu trong khoảng 60 giây.
  • Mô hình Key-Value: Khóa dạng chuỗi (tối đa 512 bytes), giá trị có thể lên tới 25MB.
  • Hỗ trợ TTL tự động (Time-To-Live): Tự động xóa key sau thời gian định sẵn (expirationTtl hoặc timestamp expiration).
  • Metadata đi kèm: Gắn thêm metadata JSON nhẹ (tối đa 1KB) để kiểm tra nhanh mà không cần tải dữ liệu lớn.

3. Cách sử dụng Cloudflare KV trong thực tế#

Cấu hình Binding trong wrangler.toml#

wrangler.toml
name = "my-edge-app"
main = "src/index.ts"
compatibility_date = "2026-08-01"

[[kv_namespaces]]
binding = "CONFIG_KV"
id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
toml

Triển khai Code TypeScript trên Cloudflare Workers#

4. So sánh: Cloudflare KV vs Cache RAM trên VPS (Redis) vs DynamoDB#

Làm thế nào để lựa chọn giữa Cloudflare KV, một cụm Redis tự quản lý trên VPS, hay cơ sở dữ liệu NoSQL như AWS DynamoDB?

flowchart LR
    subgraph VPS["Máy Chủ VPS / Redis Đơn Lẻ"]
        direction TB
        Server["VPS (RAM Cache)"]
        UserUS["🇺🇸 Người dùng US (Nhanh ~5ms)"] --> Server
        UserVN["🇻🇳 Người dùng VN (Chậm ~250ms latency)"] --> Server
    end

    subgraph CF["Mạng Lưới Phân Tán Cloudflare KV"]
        direction TB
        KV_US["🇺🇸 US Edge KV (~1ms)"]
        KV_VN["🇻🇳 VN Edge KV (~1ms)"]
        UserUS2["🇺🇸 Người dùng US"] --> KV_US
        UserVN2["🇻🇳 Người dùng VN"] --> KV_VN
    end

Bảng so sánh chi tiết#

Tiêu chíCloudflare KVVPS RAM / Redis tự hostAWS DynamoDB / Global Tables
Phân tán toàn cầuTự động trên 330+ PoP biênĐặt tại 1 vị trí (trừ khi tự dựng cụm)Đa vùng (cần cấu hình thủ công)
Độ trễ đọc toàn cầu< 1ms tại Edge gần người dùng nhấtRất nhanh ở gần, 150-300ms khi qua biển5-15ms trong vùng
Tính nhất quán ghiEventual (~60s đồng bộ toàn cầu)Tức thì (Strong consistency)Linh hoạt / Strong consistency
Thông lượng ghi~1 lượt ghi/giây trên mỗi key100.000+ lượt ghi/giâyCao (scale theo RCU/WCU)
Vận hành & Bảo trìBằng 0 (Serverless hoàn toàn)Cao (Cài đặt, update OS, backup, HA)Trung bình (cấu hình IAM, capacity)
Chi phíTrả theo lượng dùng ($0.50/GB, có free tier)Cố định theo tháng (55 - 50+/tháng)Theo số request & tài nguyên provisioned
Kích thước dữ liệuTối đa 25MB mỗi giá trịBị giới hạn bởi dung lượng RAM của VPSTối đa 400KB mỗi item

5. Khi nào nên dùng Cloudflare KV (và Khi nào KHÔNG nên)?#

Trường hợp nên sử dụng (Đọc nhiều, Ghi ít)#

  • Feature Flags & Cấu hình Động: Bật tắt tính năng ứng dụng mà không cần deploy lại code.
  • Xác thực Token & Phiên làm việc (Session): Kiểm tra JWT, API Key ngay tại Edge.
  • Rút gọn Link (URL Shortener) & Chuyển hướng: Tra cứu slug và redirect người dùng tức thì.
  • Thử nghiệm A/B Testing: Phân phối cấu hình thử nghiệm theo vị trí địa lý của khách truy cập.
  • Cache Phản hồi API (Cache-Aside): Lưu tạm dữ liệu từ cơ sở dữ liệu gốc để giảm tải server chính.

Trường hợp KHÔNG nên sử dụng#

  • Bộ đếm thời gian thực (Real-time Counters): KV giới hạn ~1 write/giây/key. Nên dùng Durable Objects hoặc D1.
  • Giao dịch tài chính (Transactions & ACID): Yêu cầu tính nhất quán tức thì (Strong Consistency).
  • Truy vấn quan hệ phức tạp: KV chỉ hỗ trợ tìm kiếm theo tên key hoặc tiền tố (prefix). Với dữ liệu quan hệ, hãy dùng Cloudflare D1 (SQLite).

6. Tổng kết#

Cloudflare KV giúp việc phân phối dữ liệu toàn cầu trở nên đơn giản chỉ bằng một hàm gọi env.KV.get('key'). Đối với các ứng dụng đòi hỏi tốc độ đọc cực nhanh, phân tán khắp thế giới, không cần quản lý máy chủ và chấp nhận độ trễ ghi đồng bộ, Cloudflare KV là giải pháp lưu trữ hàng đầu cho kiến trúc Edge hiện đại.

Tài liệu tham khảo#