Caching trong hệ thống website Thương mại điện tử

516
Trong vòng khoảng 10 năm trở lại đây, ngành TMĐT Việt Nam đã có những bước phát triển vượt bậc, kéo theo đó là nhu cầu tìm kiếm, tra cứu, so sánh và mua sắm hàng hoá online tăng đột biến. Trong khi lượng người dùng tăng theo cấp số cộng, dữ liệu tăng theo cấp số nhân, tính năng nghiệp vụ của các ứng dụng lại ngày càng phức tạp khiến bài toán tối ưu hiệu năng, giảm thời gian phản hồi trở nên ngày càng bức thiết, một trong nhưng giải pháp được hầu hết website TMĐT lớn đều phải sử dụng đó là kỹ thuật Caching.
Caching là những kỹ thuật hoặc công nghệ chuẩn bị sẵn dữ liệu cho người dùng nhằm giảm thời gian phản hồi (response time) và tối ưu hiệu năng hệ thống. Ví dụ như để hiển thị đầy đủ thông tin một sản phẩm cần bán trên website TMĐT, hệ thống phải truy vấn n câu lệnh vào cơ sở dữ liệu và thực hiện m phép toán, nếu có 1 triệu lượt xem hệ thống sẽ phải thực hiện 1.000.000*n lượt truy vấn  và 1.000.000*m phép toán. Khi áp dụng kỹ thuật caching vào trường hợp này, hệ thống chỉ phải xử lý duy nhất n câu truy vấn và m phép tính toán, dữ liệu sau khi xử lý sẽ được Cached lại tái sử dụng cho những lần truy vấn tiếp theo.
Có rất nhiều công nghệ khác nhau phục vụ cho Caching như Cache Nginx, MemCache, Redis, APC, Database Cache… tuy nhiên bài viết này sẽ không đi sâu vào từng công nghệ mà sẽ chủ yếu phân tích các kỹ thuật caching nhằm giúp các lập trình viên tuỳ biến và sử dụng công nghệ caching phù hợp với từng hoàn cảnh và mục đích sử dụng. 
Kỹ thuật Expired Time Cache
Đây là kỹ thuật caching khá phổ biến trong các hệ thống vừa và nhỏ. Ưu điểm của kỹ thuật này là đơn giản, dễ dàng triển khai ở cấp độ mô đun, ứng dụng hay toàn trang. Ngoài ra yếu tố có thời hạn (Expired Time) giúp hệ thống tự động dọn dẹp rác, kiểm soát tốt hơn dung lượng cache trên hệ thống.
Tuy vậy, nhược điểm của kỹ thuật này là khi chưa có cache hoặc cache bị hết hạn, thời gian response time vẫn sẽ cao và hệ thống có khả năng sụp đổ khi một số lượng các khóa cache bị hết hạn cùng lúc. Một lỗi phổ biến khi sử dụng phương pháp này là quá lạm dụng cũng như tin tưởng vào cache mà quên mất rằng sẽ phải mất X thời gian để thực hiện khối công việc mầu xanh (xem hình trên) trong khoảng X thời gian đó có N request vào hệ thống và …. BOOOOOM!!! hệ thống lúc này sẽ phải xử lý ít nhất N*X thời gian mới thực hiện xong toàn bộ các yêu cầu vào hệ thống.
Kỹ thuật Pre-Loading Cache
Ở kỹ thuật này, hệ thống backend sẽ sử dụng các tác vụ chạy định kỳ làm nhiệm vụ giả lập các yêu cầu truy cập, lấy/xử lý dữ liệu rồi đẩy vào hệ thống Cache, khi đó các truy cập luôn tương tác vào hệ thống Cache để lấy ra dữ liệu đã được xử lý sẵn mà không phải đợi thời gian truy vấn. Kỹ thuật này thường được sử dụng khi muốn cache toàn bộ trang html tĩnh.
Yếu điểm của kỹ thuật này là không thể triển khai với khối lượng dữ liệu lớn bởi lượng dữ liệu pre-cache sẽ vô cùng lớn, thời gian chạy các tác vụ Backend sẽ tỷ lệ thuận với tốc độ tăng dữ liệu. Ngoài ra, dữ liệu sẽ không được cập nhật trong khoảng thời gian trễ khi chạy các tác vụ Backend. 
Kỹ thuật Event Triggered Cache
Đây là kỹ thuật caching đang được sử dụng nhiều nhất tại Sendo.vn bởi tính chủ động và linh hoạt của nó. Ở kỹ thuật này, dữ liệu cache sẽ được phát sinh/cập nhật dựa trên hành vi thay đổi dữ liệu của người dùng.
Trở ngại duy nhất của kỹ thuật này là lập trình viên phải triển khai được kỹ thuật xử lý Bất đồng bộ (Asynchronous) khi cập nhật dữ liệu, tránh để luồng cache được ghi mới ảnh hưởng đến luồng dữ liệu chính.
Lời kết
Việc lựa chọn công nghệ hay kỹ thuật caching rất quan trọng trong các hệ thống website nói chung và website TMĐT nói riêng. Với bất cứ công nghệ hay kỹ thuật nào, lập trình luôn cần ghi nhớ điểm khó nhất khi làm caching đó là quản lý sự thay đổi dữ liệu. nói chung và website TMĐT nói riêng. Với bất cứ công nghệ hay kỹ thuật nào, lập trình viên luôn cần ghi nhớ điểm khó nhất khi làm caching đó là quản lý sự thay đổi dữ liệu.
Bùi Minh Long – Sendo
Tin liên quan: