Proxy Caching là gì? Giải đáp chi tiết kiến thức mạng
Proxy caching là gì? Đây là cơ chế một proxy lưu lại bản sao của nội dung đã tải một lần, để những lần yêu cầu sau trả về ngay từ bản sao đó thay vì đi tới máy chủ gốc. Nhờ vậy trang tải nhanh hơn, máy chủ gốc nhẹ tải và băng thông tiết kiệm hơn. Bài viết này của ProxyVN giải thích cơ chế, lợi ích và giới hạn của proxy caching.
Proxy caching hay gắn với reverse proxy và CDN. Để nắm bối cảnh, đọc reverse proxy là gì, forward proxy là gì và HAProxy là gì.
Proxy caching là gì và đặt ở đâu
Proxy caching là chức năng lưu tạm nội dung trên một proxy nằm giữa người dùng và máy chủ gốc. Khi một tài nguyên như ảnh, file CSS, đoạn HTML được tải lần đầu, proxy giữ một bản sao trong bộ nhớ hoặc trên ổ đĩa của nó. Yêu cầu tiếp theo cho cùng tài nguyên đó sẽ được phục vụ từ bản sao, gọi là cache hit.
Nếu bản sao chưa có hoặc đã hết hạn, proxy phải đi lấy từ máy chủ gốc, gọi là cache miss, rồi lưu lại bản mới. Tỷ lệ cache hit trên tổng số yêu cầu là thước đo quan trọng nhất cho hiệu quả của proxy caching.
Cache ở reverse proxy
Đây là dạng phổ biến nhất. Reverse proxy đứng trước cụm máy chủ của một website lưu bản sao các tài nguyên tĩnh và cả một số trang động ít thay đổi. Người dùng ở khắp nơi truy cập vào reverse proxy này và phần lớn được phục vụ mà không chạm tới backend.
Cache ở forward proxy
Trong mạng doanh nghiệp hoặc nhà cung cấp Internet, một forward proxy chung có thể cache nội dung mà nhiều người trong mạng cùng truy cập. Khi một người tải một file cập nhật phần mềm, người thứ hai trong cùng mạng lấy file đó từ cache nội bộ, không phải tải lại từ Internet.
Cache ở CDN
CDN là mạng lưới reverse proxy có caching đặt rải khắp thế giới. Nội dung được nhân bản tới các điểm hiện diện gần người dùng, nên người dùng ở Việt Nam lấy nội dung từ một điểm trong nước thay vì đi vòng tới máy chủ gốc ở nước ngoài.
Cache của trình duyệt
Ngay trên máy người dùng, trình duyệt cũng là một lớp cache. Nó lưu ảnh, CSS, JavaScript của các trang vừa xem vào ổ đĩa cục bộ và dùng lại khi anh em quay lại trang đó. Lớp này riêng cho từng người, khác với cache ở proxy dùng chung, nhưng tuân theo cùng bộ header điều khiển. Khi nói tới proxy caching, người ta thường muốn chỉ các lớp dùng chung nằm ngoài máy người dùng, vì đó mới là nơi giảm tải cho máy chủ gốc.
Vì sao vị trí đặt cache quyết định hiệu quả
Cache càng gần người dùng thì độ trễ càng thấp nhưng phạm vi phục vụ càng hẹp: cache trình duyệt chỉ phục vụ một người, cache CDN ở một thành phố phục vụ mọi người trong vùng đó. Cache càng gần máy chủ gốc thì tỷ lệ hit chung càng cao vì gom lưu lượng của tất cả người dùng, nhưng lợi ích về tốc độ cho người ở xa lại ít hơn. Vì vậy hệ thống lớn không chọn một chỗ mà xếp nhiều lớp cache nối tiếp.

Lần đầu tải từ máy chủ gốc, các lần sau lấy bản sao từ proxy cache
Cơ chế hoạt động của proxy caching là gì
Proxy caching tuân theo một bộ quy tắc do giao thức HTTP định nghĩa, chủ yếu qua các header phản hồi từ máy chủ gốc.
Luồng xử lý một yêu cầu
- Người dùng gửi yêu cầu tới proxy có caching.
- Proxy kiểm tra kho cache xem có bản sao còn hạn cho tài nguyên này không.
- Nếu có và còn hạn: trả bản sao ngay, đây là cache hit.
- Nếu không có hoặc hết hạn: proxy hỏi máy chủ gốc, nhận bản mới, lưu lại rồi trả cho người dùng, đây là cache miss.
- Với bản hết hạn, proxy có thể hỏi máy chủ gốc bằng truy vấn xác thực xem bản cũ còn dùng được không, nếu còn thì máy chủ trả mã 304 và proxy tái sử dụng bản cũ.
Các header điều khiển cache
Máy chủ gốc dùng các header sau để nói cho proxy biết được cache hay không và trong bao lâu:
|
Header |
Ý nghĩa |
|---|---|
|
Cache-Control: max-age=3600 |
Cho phép lưu và dùng lại trong 3600 giây |
|
Cache-Control: no-store |
Cấm lưu bản sao dưới mọi hình thức |
|
Cache-Control: private |
Chỉ trình duyệt được lưu, proxy dùng chung thì không |
|
Expires: <mốc thời gian> |
Bản sao hết hạn tại mốc này, kiểu cũ hơn max-age |
|
ETag: <chuỗi> |
Dấu vân của phiên bản, dùng để hỏi lại xem có đổi không |
|
Vary: Accept-Encoding |
Lưu bản riêng theo từng giá trị của header được nêu |
Xác thực lại và làm mới
Khi bản sao hết hạn, proxy không nhất thiết tải lại toàn bộ. Nó gửi kèm ETag hoặc thời điểm sửa đổi lần cuối; nếu máy chủ gốc xác nhận nội dung không đổi, proxy chỉ cần gia hạn bản đang có. Cách này tiết kiệm băng thông rõ rệt với các tài nguyên lớn ít thay đổi.
Nội dung tươi, nội dung cũ và ngưỡng chấp nhận
Một bản sao được coi là tươi khi còn trong thời hạn max-age; hết hạn thì thành cũ. Với bản cũ, proxy có hai lựa chọn: chặn lại để xác thực với máy chủ gốc trước khi trả, hoặc trả ngay bản cũ rồi làm mới ngầm ở phía sau. Cách thứ hai giữ tốc độ phản hồi nhưng chấp nhận người dùng thấy nội dung trễ một nhịp. Chỉ thị stale-while-revalidate trong Cache-Control cho phép cấu hình đúng hành vi này.
Header Vary và bùng nổ biến thể
Khi máy chủ đặt Vary theo một header nào đó, proxy phải lưu một bản riêng cho mỗi giá trị khác nhau của header đó. Vary theo Accept-Encoding chỉ tạo vài biến thể là hợp lý. Nhưng nếu lỡ Vary theo User-Agent hay Cookie, số biến thể tăng gần như vô hạn, kho cache đầy nhanh và tỷ lệ hit tụt vì gần như mọi request đều là miss. Đây là lỗi cấu hình caching hay gặp nhất.

Header điều khiển cache: Cache-Control, ETag, Expires quyết định lưu bao lâu
Lợi ích của proxy caching là gì
Ba nhóm lợi ích chính, đo được bằng số liệu vận hành.
Giảm tải cho máy chủ gốc
Mỗi cache hit là một yêu cầu mà backend không phải xử lý. Với website có nhiều tài nguyên tĩnh, tỷ lệ hit cao đồng nghĩa backend chỉ còn nhận phần nhỏ lưu lượng, dành tài nguyên cho các tác vụ thật sự cần tính toán như xử lý đơn hàng, truy vấn cơ sở dữ liệu.
Giảm băng thông và chi phí
Nội dung phục vụ từ cache gần người dùng không tính vào băng thông đi ra của máy chủ gốc. Với hệ thống lưu lượng lớn, khoản tiết kiệm băng thông này đủ để bù chi phí vận hành lớp cache.
Phản hồi nhanh hơn cho người dùng
Bản sao nằm gần người dùng về mặt mạng, nên thời gian đi và về ngắn hơn nhiều so với chạm tới máy chủ gốc ở xa. Trang hiển thị nhanh hơn, nhất là trên kết nối di động, và điểm tốc độ trang được cải thiện.
Chịu được tải đột biến
Khi một nội dung được chia sẻ lan truyền và lượng truy cập tăng vọt, lớp cache hấp thụ phần lớn yêu cầu. Máy chủ gốc chỉ chịu phần cache miss, nên ít bị sập vì quá tải hơn so với không có caching.
Có một tình huống ngược gọi là bão cache: khi một nội dung nóng cùng lúc hết hạn, hàng loạt request miss dồn về máy chủ gốc trong tích tắc và có thể làm sập backend đúng lúc cần nhất. Các proxy tốt xử lý bằng cách khóa lại, chỉ cho một request đi lấy bản mới còn các request khác chờ và dùng chung kết quả đó. Đây là chi tiết cần kiểm tra khi chọn phần mềm caching.
Đo lợi ích bằng con số
Ba chỉ số nên theo dõi: tỷ lệ cache hit, thời gian phản hồi trung bình và lưu lượng đi ra từ máy chủ gốc. Sau khi bật caching đúng cách, tỷ lệ hit của tài nguyên tĩnh thường lên rất cao, thời gian phản hồi giảm mạnh với người dùng ở xa, và lưu lượng gốc giảm theo đúng phần được phục vụ từ cache. Nếu ba con số này không cải thiện, gần như luôn là do header cache đang bị đặt sai.

Lợi ích: giảm tải máy chủ gốc, giảm băng thông, phản hồi nhanh hơn
Khi nào không nên dùng proxy caching là gì
Caching sai chỗ gây lỗi khó lần, nên cần biết các loại nội dung phải bỏ qua.
Nội dung cá nhân hóa
Trang hiển thị tên người dùng, giỏ hàng, số dư, thông báo riêng không được cache dùng chung. Nếu cache, người dùng B có thể thấy trang đã dựng cho người dùng A. Các trang này cần Cache-Control private hoặc no-store.
Dữ liệu nhạy cảm
Thông tin tài khoản, dữ liệu thanh toán, token phiên đăng nhập không bao giờ được lưu ở proxy dùng chung. Máy chủ phải đánh dấu no-store cho các phản hồi này.
Nội dung thay đổi liên tục
Bảng giá biến động theo giây, tỷ số trận đấu, tồn kho thời gian thực nếu cache quá lâu sẽ hiển thị số cũ. Với loại này, hoặc không cache, hoặc chỉ cache vài giây kèm cơ chế xóa cache khi có cập nhật.
API ghi dữ liệu
Các yêu cầu tạo, sửa, xóa không được cache. Chỉ các yêu cầu đọc và idempotent mới phù hợp để lưu bản sao.
Trang sau đăng nhập nhưng dùng URL công khai
Một cạm bẫy tinh vi: trang giỏ hàng và trang danh mục có thể cùng một đường dẫn, chỉ khác ở chỗ người dùng đã đăng nhập hay chưa. Nếu proxy cache theo đường dẫn mà bỏ qua trạng thái đăng nhập, bản dựng cho người đã đăng nhập bị phát cho khách vãng lai và ngược lại. Cách xử lý là tách đường dẫn riêng cho phần cá nhân hóa, hoặc thêm cookie phiên vào khóa cache một cách có kiểm soát.
Vận hành proxy caching là gì trong thực tế
Một vài việc thường phải làm khi quản lý lớp cache.
Xóa cache khi nội dung đổi
Khi anh em cập nhật một bài viết hoặc thay ảnh, bản cũ trong cache vẫn còn hạn. Cần một thao tác xóa cache theo đường dẫn để proxy lấy lại bản mới ngay. Nhiều hệ thống làm việc này tự động qua webhook khi nội dung được sửa.
Đổi tên file theo phiên bản
Cách phổ biến để tránh phải xóa cache là gắn chuỗi băm vào tên file tài nguyên tĩnh, ví dụ style.a1b2c3.css. Khi nội dung đổi, tên file đổi theo, proxy coi đó là tài nguyên mới và tải lại, còn bản cũ tự hết hạn.
Theo dõi tỷ lệ hit
Tỷ lệ cache hit thấp bất thường cho thấy header cache cấu hình sai, thời hạn quá ngắn, hoặc quá nhiều biến thể do header Vary. Đây là chỉ số cần theo dõi thường xuyên khi vận hành.
Phân tầng cache
Hệ thống lớn thường có nhiều tầng: cache trình duyệt, cache CDN, cache reverse proxy nội bộ. Mỗi tầng đặt thời hạn khác nhau, tầng gần người dùng ngắn hơn để cập nhật nhanh, tầng gần máy chủ dài hơn để giảm tải sâu.

Không nên cache: trang cá nhân hóa, dữ liệu nhạy cảm, nội dung đổi liên tục
Proxy caching là gì trong tương quan với proxy dùng để ẩn danh
Cần phân biệt rõ để anh em không mua nhầm. Proxy caching là chuyện hiệu năng hạ tầng website, thường nằm ở reverse proxy hoặc CDN do đội vận hành quản lý. Proxy mà anh em thuê để cào dữ liệu hay nuôi nick là forward proxy, phục vụ việc ẩn danh và phân tán IP, không liên quan tới caching.
Khi anh em cào dữ liệu, đôi khi lại muốn tránh cache: một số trang trả bản cache cũ cho request lặp lại. Lúc đó cần thêm tham số ngẫu nhiên vào URL hoặc header để buộc lấy bản mới. Đây là mặt còn lại của caching mà người làm scraping hay gặp.
ProxyVN cung cấp forward proxy datacenter, dân cư và 4G cho công việc truy cập quy mô. Phần proxy caching thuộc hạ tầng website và anh em dựng bằng Nginx, Varnish hay dùng CDN.
Nếu anh em vừa vận hành website vừa chạy tool cào dữ liệu cho chính hệ thống của mình, hai lớp này tồn tại song song: reverse proxy có caching ở cổng vào để phục vụ người dùng, và forward proxy ở phía tool để thu thập dữ liệu từ bên ngoài. Hiểu rõ vai của từng lớp giúp anh em đặt ngân sách đúng chỗ và không kỳ vọng nhầm một lớp làm việc của lớp kia. Xem thêm proxy là gì.
Proxy caching tăng tốc nội bộ; còn khi cần IP đi ra cho tài khoản hay công cụ, anh em có thể mua proxy tại ProxyVN.
Giải đáp nhanh về proxy caching là gì
Vài câu hỏi hay gặp khi anh em tìm hiểu proxy caching là gì.
Proxy caching và CDN có phải một không?
CDN là một cách triển khai proxy caching ở quy mô toàn cầu với nhiều điểm hiện diện. Proxy caching là khái niệm chung, có thể chạy trên một reverse proxy đơn lẻ.
Cache lưu trên RAM hay ổ đĩa?
Cả hai. Nội dung nóng, truy cập nhiều thường nằm trên RAM cho nhanh; nội dung lớn hoặc ít gọi hơn được đẩy xuống ổ đĩa SSD.
Vì sao tôi vẫn thấy nội dung cũ sau khi cập nhật?
Vì bản cũ trong cache còn hạn. Cần xóa cache theo đường dẫn hoặc đổi tên file theo phiên bản để proxy lấy bản mới.
Người làm scraping có bị ảnh hưởng bởi proxy caching không?
Có. Một số đích trả bản cache cho request lặp. Thêm tham số ngẫu nhiên vào URL hoặc gửi header yêu cầu bản mới để tránh đọc dữ liệu cũ.
Cache-Control no-cache có nghĩa là không cache?
Không hẳn. no-cache cho phép lưu bản sao nhưng phải xác thực lại với máy chủ gốc trước mỗi lần dùng. Cấm lưu hẳn là no-store.
Tóm lại, proxy caching là gì: cơ chế proxy lưu bản sao nội dung để phục vụ các yêu cầu sau mà không chạm máy chủ gốc, giúp giảm tải, tiết kiệm băng thông và tăng tốc. Nó thuộc hạ tầng website và cần cấu hình header cẩn thận để không lộ nội dung cá nhân hóa. Cần forward proxy sạch cho việc cào dữ liệu và nuôi nick, hãy liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam.