Web caching (P2)


Sau khi đọc Web caching (P1), chúng ta đã hiểu đường tác dụng, cơ chế của việc caching và đi chi tiết về Browser caching và CDN caching. Ở phần 2 chúng ta sẽ tìm hiểu về server caching và cách vận dụng linh hoạt caching để giải quyết các bài toàn performance.

Mục lục
  • Reverse proxy caching.
  • Application caching.
  • Áp dụng bài toán thực tế.
  • Lời kết
1.Reverse proxy caching

Reverse Proxy là gì?
- Là một loại proxy server trung gian giữa một server và các clients gửi request.
- Nó kiểm soát yêu cầu của các clients, nếu hợp lệ, sẽ luân chuyển đến các servers thích ứng.
- Ưu điểm lớn nhất của việc sử dụng Reverse proxy là khả năng quản lý tập trung. Nó giúp kiểm soát mọi requests do clients gửi lên servers.

Cơ chế:
- Tương tự như Browser caching và CDN caching. Reverse proxy cache lại tất cả các request resources(image, css, js, ...) và trả lại client ở tầng Proxy.

Ưu điểm:
- Giảm lượng request lên server.
- Có thể quản lý được cache.

Nhược điểm:
- Cần có cơ chế xóa cache mỗi lần update resource.
- Tốc độ load resources sẽ chậm hơn Browser cache và CDN cache vì phụ thuộc vào vị trí đặt Reverse proxy server (nếu ở VN mà Reverse proxy đặt ở Mỹ thì load time phụ thuộc vào đường truyền)
- Tốn tài nguyên cho việc lưu trữ cache.

Áp dụng:
- Tham khảo:
+ https://www.nginx.com/blog/nginx-caching-guide/
+ https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/
+ https://whitehat.vn/threads/nginx-caching.6525/

2. Application caching.

Cơ chế:
- Loại dữ liệu được cache: String (text, html, json)
- Thay vì phải tính toán, query database để ra kết quả thì sẽ đọc kết quả từ cache ra.
- Cache được lưu trên disk hoặc RAM của server.
- Sau khi đi qua Reverse proxy thì request sẽ đi vào server theo điều hướng của Reverse proxy. Tại đây thực hiện việc check caching.

Ưu điểm:
- Giảm thời gian đợi tính toán, query database để lấy kết quả.
- Có thể quản lý được cache (thêm mới, sửa, xóa).
- Có khả năng cache function hay gọi mà ít thay đổi.

Nhược điểm:
- Cần có cơ chế xóa cache mỗi lần update resource.
- Tốc độ load resources sẽ chậm hơn Browser cache và CDN cache và Reverse proxy cache.
- Phải có cơ chế đồng bộ nếu sử dụng nhiều servers cùng 1 app để phân tải.
- Tốn tài nguyên cho việc lưu trữ cache.

Áp dụng:
- Tham khảo:
+ https://redislabs.com/ebook/part-1-getting-started/chapter-2-anatomy-of-a-redis-web-application/2-4-database-row-caching/
+ https://www.codementor.io/brainyfarm/introduction-to-caching-and-redis-h6o16p4

3. Áp dụng bài toán thực tế

Khi nào sử dụng Browser caching?
- Đối với những resources ít thay đổi nội dung trên 1 url. Ví dụ logo trang web, html, css các trang ít thay đổi nội dung.

Làm thế nào để hạn chế nhược điểm của Browser caching.
- Fingerprinting hoặc đổi tên các file image, css, js có thay đổi. Ví dụ: image A có url là http://img.com/a_image thì sau mỗi lần thay đổi ta có thể đổi tên thành http://img.com/a_image_v1 hoặc Fingerprinting (cơ chế Fingerprinting đọc tại đây)
- Đặt expired time cho resource tùy theo tốc độ thay đổi của 1 resource.

Khi nào sử dụng CDN caching?
- Đối với những resource thay đổi khá thường xuyên, ko cố định tần suất thay đổi. Ví dụ 1 banner image ở trang chủ: có thể 1 ngày thay 3–5 lần, có thể có ngày ko thay lần nào.

Khi nào sử dụng Reverse proxy caching?
- Đối với những resource khi thay đổi cần thực hiện ngay lập tức sự thay đổi ở tất cả clients. Ví dụ thông tin giá của 1 sản phẩm.

Khi nào sử dụng Application caching?
- Khi bạn muốn giảm số lượng tính toán và query trên database của 1 số function trên code.

4. Lời kết

Để thực hiện việc performance 1 ứng dụng website có rất nhiều cách. Bạn có thể tham khảo một số cách tại các bài viết sau:

Database Index
P1: https://medium.com/edumall/refactor-performance-920ab6ce4fb6
P2: https://medium.com/edumall/database-index-p2-5d3e86d34b6a

Bài viết tham khảo:

Nhận xét

Bài đăng phổ biến từ blog này

Cài đặt SSL cho website sử dụng certbot

Xây dựng một hệ thống comment real-time hoặc chat đơn giản sử dụng Pusher

CÁC BÀI TẬP SQL CƠ BẢN - PART 1

Xây dựng một hệ thống tracking hành vi người dùng (phần 1)

Xây dựng một hệ thống tracking hành vi người dùng (phần 2)

Enterprise architecture trên 1 tờ A4

Bàn về async/await trong vòng lặp javascript

Web caching (P1)

Cài đặt môi trường để code website Rails