Tổng quan

Dynamic Data Caching được áp dụng ở 2 vị trí:

         Dynamic Data Caching

               │
     ┌─────────┴─────────┐
     │                   │
     ▼                   ▼
Web Application       Services
(Session Cache)    (Object Cache)
  • Web Application: cache User Profile, Shopping Cart, Dashboard…
  • Services: cache Product, Category, Currency, Permission…

Dữ liệu dynamic không thay đổi liên tục như static file (JS, CSS, Image), nhưng vẫn có thể thay đổi bất kỳ lúc nào — ví dụ: User thêm địa chỉ, sửa thông tin liên lạc.

2 cách cache dynamic data:

Dynamic Data Caching
        │
        ├──────────► Exclusive Cache
        │
        └──────────► Shared Cache

1. Exclusive Cache

Cache nằm bên trong từng node, không dùng chung.

                  Load Balancer
                       │
         ┌─────────────┼─────────────┐
         ▼             ▼             ▼
      Node 1         Node 2        Node 3
   [Cache A]      [Cache B]     [Cache C]
         │             │             │
         └─────────────┴─────────────┘
                       │
                    Database

Mỗi instance tự cache dữ liệu cần thiết trong memory của chính nó.


Cách hoạt động (không có routing)

Request 1 → Node 1 → Database → Cache A (user profile)
Request 2 → Node 2 → Database → Cache B (user profile)  ← duplicate!
Request 3 → Node 1 → Cache A  → Return  ← hit
Request 4 → Node 3 → Database → Cache C (user profile)  ← duplicate!

Nhược điểm: Dữ liệu bị duplicate trên nhiều node.

Ưu điểm: Không cần intelligent routing, đơn giản.

Phù hợp với: Dataset nhỏ, ít thay đổi — ví dụ: currency conversion table, config, country list.


Cách hoạt động (có intelligent routing)

Dùng cookie lưu node mà user đã kết nối trước đó → route về cùng node:

User A → Request 1 → Node 1 → Cache user profile
         Set cookie: node=1

User A → Request 2 → Cookie: node=1 → Node 1 → Cache Hit → Return
                  Load Balancer
                  (routing by cookie)
                       │
         ┌─────────────┼─────────────┐
         ▼             ▼             ▼
      Node 1         Node 2        Node 3
   User A cache   User B cache  User C cache

Ưu điểm: Không duplicate data.

Nhược điểm: Cần routing logic, ảnh hưởng scalability (sẽ bàn ở phần Scalability).

Phù hợp với: Session Cache — dataset lớn (nhiều user), cần tránh duplicate.


Tốc độ

Vì cache nằm trong memory của node, không qua network:

Request → Node → Memory Cache → Response

Rất nhanh — không có extra network hop.


2. Shared Cache

Cache nằm bên ngoài, dùng chung giữa tất cả các node.

                  Load Balancer
                       │
         ┌─────────────┼─────────────┐
         ▼             ▼             ▼
      Node 1         Node 2        Node 3
         │             │             │
         └─────────────┴─────────────┘
                       │
                  Shared Cache
               (Redis / Memcached)
                       │
                    Database

Ví dụ: Redis, Memcached.


Cách hoạt động

Request 1 → Node 1 → Cache Miss → Database → Save Shared Cache
Request 2 → Node 2 → Cache Hit (Shared Cache) → Return
Request 3 → Node 3 → Cache Hit (Shared Cache) → Return

Chỉ 1 lần miss, tất cả node sau đều hit.


Ưu điểm

Shared Cache

     ├──► Không duplicate data
     │
     ├──► Không cần intelligent routing
     │
     └──► Dễ scale out (Redis Cluster)
  • Không duplicate: chỉ có 1 cache dùng chung.
  • Không cần routing: mọi node đều truy cập cùng 1 cache.
  • Scale dễ: Redis/Memcached có thể cluster, xử lý dataset rất lớn.

Nhược điểm

Extra network hop khi truy cập cache:

Request → Node → Network → Shared Cache → Network → Node → Response

Thêm vài millisecond so với Exclusive Cache. Nếu chấp nhận được chi phí này → Shared Cache rất đáng dùng.


So sánh Exclusive vs Shared Cache

Tiêu chí Exclusive Cache Shared Cache
Vị trí cache Trong memory của node External (Redis/Memcached)
Tốc độ Nhanh hơn (no network) Chậm hơn (extra hop)
Duplicate data Có (nếu không routing) Không
Intelligent routing Cần (nếu dataset lớn) Không cần
Scale Khó (gắn với node) Dễ (cluster riêng)
Dataset size Nhỏ → vừa Lớn
Ví dụ use case Currency table, Config User Profile, Session

Khi nào dùng cái nào?

Dataset nhỏ, không thay đổi nhiều
(Currency, Config, Country List)
          │
          ▼
  Exclusive Cache (no routing)
  → Simple, fast, acceptable duplication

──────────────────────────────────────────

Dataset lớn, per-user data
(User Profile, Shopping Cart)
          │
          ▼
  Exclusive Cache + intelligent routing
  hoặc
  Shared Cache (Redis)
  → No duplication, no routing needed

Tổng kết

             Dynamic Data Caching

                      │
          ┌───────────┴───────────┐
          ▼                       ▼
  Exclusive Cache           Shared Cache
  (In-process)              (External)
          │                       │
   Fast, no network          Extra network hop
   Duplication risk          No duplication
   Needs routing             No routing needed
   (for large datasets)      Easy to scale
          │                       │
   Config / Currency         Redis / Memcached
   Small datasets            Large datasets
  • Exclusive Cache phù hợp với dataset nhỏ hoặc khi dùng intelligent routing cho session.
  • Shared Cache (Redis, Memcached) phù hợp với hệ thống nhiều node, dataset lớn, cần tránh duplicate và không muốn phức tạp hóa routing logic.
  • Chi phí extra network hop của Shared Cache thường chấp nhận được so với lợi ích về tính nhất quán và khả năng scale.