12/08/2018, 15:36

Tìm Hiểu Về Varnish Cache

Varnish là một ứng dụng mã nguồn mở (Open source) có tác dụng lưu lại bộ nhớ đệm của website bằng phương thức làm proxy trung gian giữa nội dung website gốc và trình duyệt, và Varnish sẽ tạo một bản cache ngoài frontend. Hãy hiểu đơn giản hơn là, mặc định các webserver sẽ sử dụng cổng 80 để gửi dữ ...

Varnish là một ứng dụng mã nguồn mở (Open source) có tác dụng lưu lại bộ nhớ đệm của website bằng phương thức làm proxy trung gian giữa nội dung website gốc và trình duyệt, và Varnish sẽ tạo một bản cache ngoài frontend. Hãy hiểu đơn giản hơn là, mặc định các webserver sẽ sử dụng cổng 80 để gửi dữ liệu tới trình duyệt để người dùng đọc nó, nhưng khi sử dụng Varnish thì chúng ta sẽ muốn cho người dùng nhận các dữ liệu trong cache nên sẽ sử dụng Varnish làm cổng 80, còn dữ liệu website gốc sẽ được trả về một cổng nào đó mà Varnish sẽ nhận dữ liệu trực tiếp từ đó rồi lưu lại và gửi cho người dùng. Nhìn chung Varnish sẽ làm việc tương tự như việc sử dụng NGINX làm proxy cho Apache vậy nhưng Varnish là một ứng dụng cache nên sẽ làm việc đó tốt hơn và có tốc độ truy xuất tốt hơn.

Varnish là một ứng dụng độc lập nên việc sử dụng Varnish để lưu và truy xuất cache trên website sẽ có những lợi thế như bạn có thể thoải mái tùy chỉnh để nó ghi và truy xuất như mong muốn, mặc dù sẽ hơi nâng cao và khó một chút nhưng nếu bạn hiểu các quy tắt trong VCL (Varnish Configuration Language) thì sẽ rất linh hoạt trong sử dụng, có thể cấu hình cache cho bất cứ loại website nào. Việc Varnish trực tiếp làm proxy để gửi dữ liệu cache cũng sẽ có tốc độ tốt hơn so với hình thức lưu cache thông thường.

Hơn nữa theo mình đánh giá, quy trình ghi và lưu cache trong Varnish hao tốn rất ít tài nguyên, thậm chí là tốn ít hơn quy trình một website thông thường ghi cache ra một file HTML tĩnh (HTML Cache) nên Varnish đang là lựa chọn đáng quan tâm cho các website lớn và có nhiều trang trên website.

Như mình đã nói là Varnish ban đầu sẽ hơi khó cấu hình cho những người dùng phổ thông nên nếu bạn có các website chứa nhiều dữ liệu như blog có nhiều bài viết, tạp chí, tin tức,…với lượng truy cập cao thì sẽ là cơ hội rất tốt để sử dụng Varnish.

Hiện nay những website đang sử dụng Varnish mà bạn có thể kiểm chứng như The New York Times, Facebook, Twitter, Wikipedia,….và hầu hết hiện nay các website lớn với nhiều nội dung như vậy đang sử dụng Varnish để tối ưu hơn về tốc độ website cũng như tiết kiệm tài nguyên.

Dĩ nhiên Varnish phải có một số lợi thế thì các website lớn kia mới đang sử dụng như vậy. Theo sự hiểu biết và kinh nghiệm của mình, Varnish sẽ có các lợi thế như:

Ghi dữ liệu đệm của nội dung truy xuất ra webserver mà không cần thêm bất cứ đoạn code nào vào mã nguồn website. Dĩ nhiên, bạn có thể sử dụng với bất kỳ website nào, ngôn ngữ nào, miễn là nó sử dụng webserver thì đều có thể sử dụng Varnish được. Varnish hoạt động như một kỹ thuật đa luồng (heavily threaded) nên các kết nối vào website không cần phải chờ đợi webserver xử lý, giúp tiết kiệm thời gian truy xuất và hạn chế việc quá tải webserver. Việc cấu hình bằng VCL sẽ giúp bạn linh hoạt hơn để cấu hình, Varnish sẽ trở nên có ích hơn nếu bạn có thể ứng dụng các quy tắt của VCL. Varnish có thể hoạt động được với các kỹ thuật Load Balancing.

a. Lệnh khởi động Varnish.

Để khởi động (start) và khởi động lại Varnish (restart), chúng ta có một số lệnh cơ bản như sau:

Lệnh Giải thích
service varnish start Lệnh này sẽ khởi động Varnish để bắt đầu chạy, được sử dụng khi Varnish đang được tắt.
service varnish restart Lệnh này là khởi động lại Varnish, khi khởi động lại thì các thay đổi trong cấu hình VCL sẽ được áp dụng, đồng thời Varnish sẽ xóa toàn bộ cache đang có.
service varnish reload Lệnh này chỉ khởi động và nạp lại các cấu hình VCL mà không xóa cache Varnish đang có.

b. Lệnh quản trị Varnish.

Varnish là một server software nên nó cũng cung cấp cho bạn một khu vực riêng để quản trị thông qua các dòng lệnh, khu vực này ta gọi nó là Varnish Admin. Để truy cập vàoVarnish Admin, hãy thử gõ varnishadm, bạn sẽ thấy thế này:

varnishadm

Để thoát ra bạn có thể gõ quit và Enter. Để xem danh sách các lệnh quản trị có trong Varnish Admin, gõ help.

help

c. Lệnh varnishlog

Bạn đừng bao giờ cố gắng tìm kiếm một file log nào của Varnish trong server bởi vì nó không lưu log vào ổ đĩa mà sẽ tiến hành hiển thị log theo thời gian thực nếu bạn gõ lệnh varnishlog.

varnishlog

Nếu bạn muốn ghi log ra một file nào đó, bạn có thể thêm tham số -w như sau:

varnishlog -w /var/log/varnish.log

d. Lệnh varnishstat.

Đây cũng là một lệnh mà Varnish sẽ hiển thị ra theo thời gian thực khi bạn sử dụng nó. Lệnh varnishstat sẽ hiển thị các con số thống kê chi tiết trong quá trình xử lý cache của Varnish như có bao nhiêu trang đang được cache, tỷ lệ HIT và MISS của cache, số lần kết nối lỗi giữa frontend (Varnish) và backend server (Apache/NGINX/….).

varnishstat

e. Lệnh varnishhist

varnishhist cũng là một lệnh khá hay để bạn xem và đối chiếu giữa các lượt request đến cache (HIT) so với các lượt request trực tiếp vào backend server (MISS – khi chưa có cache), varnishhist sẽ thống kê theo dạng biểu đồ như thế này:

varnishhist

What the hell is it? Như thế này, bạn thấy chữ n = 909 trong ảnh không? Nghĩa là mình đã theo dõi được 909 requests đến Varnish bao gồm HIT và MISS. Ký tự hình ống (|) biểu diễn các request được cache (HIT) và ký tự dấu thăng (#) là các requests gửi đến thẳng backend server (MISS). Cái trúc bên dưới có số 1e-6, 1e-5,….là một trục đối số biểu thị thời gian hoàn thành request của cả hai loại HIT và MISS.

Bạn nên nhớ rằng cái trục bên dưới là đối số nên nếu request của bạn càng lùi về bên trái thì nghĩa là thời gian hoàn thành request càng nhanh, ta có bảng tính như sau:

1e1 = 10 giây
1e0 = 1 giây
1e-1 = 0.1 giây hay 100 ms (milliseconds)
1e-2 =  0.01 giây hay 10 ms
1e-3 = 0.001 giây hay 1 ms hay 1000 µs (microseconds)
1e-4 = 0.0001 giây hay 0.1 ms hay 100 µs
1e-5 = 0.00001 giây hay 0.01 ms hay 10 µs
1e-6 = 0.000001 giây hay 0.001 ms hay 1 µs or 1000 ns (nanoseconds)

Như vậy ở hình trên, nghĩa là các request được HIT trên website mình có tốc độ khoảng 10 phần tỷ giây (10 nano giây).

f. Lệnh varnishtop

Lệnh này cũng dùng để xem thống kê dữ liệu request đến Varnish server và thường chúng ta sẽ sử dụng nó để làm các công việc như xem các request vào Varnish hoặc các trang được request vào backend server.

Một số cách sử dụng lệnh này như: Hiển thị các trang được request vào backend server nhiều nhất (MISS).

varnishtop -i txurl

Hiển thị các trang được request vào cache nhiều nhất (HIT)

varnishtop -i rxurl

Hiển thị các user agent truy cập vào cache nhiều nhất

varnishtop -i RxHeader -C -I ^User-Agent

Xem các cookie được gửi từ trình duyệt nhiều nhất

varnishtop -i RxHeader -I Cookie

Xem địa chỉ host truy cập (bạn có thể hiểu là tên miền của website có cache)

varnishtop -i RxHeader -I '^Host:'

Kết thúc phần này bạn đã biết sơ qua một số lệnh cơ bản trong Varnish để theo dõi tiến trình làm việc của nó tốt hơn. Ở bài kế tiếp, minh sẽ nói qua về các quy tắt trong ngôn ngữ VCL (Varnish Configuration Language) để bạn có thể tự cấu hình cho Varnish ghi và xuất cache như ý muốn.

https://www.varnish-cache.org/docs/3.0/reference/index.html https://www.varnish-cache.org/docs/trunk/reference/varnish-cli.html#help-command

0