Sửa đổi cần thiết để sử dụng Varnish trên Magento CE


14

Tôi đang vật lộn để tìm bất kỳ ví dụ hoạt động tốt nào về những sửa đổi được yêu cầu để cho phép Varnish lưu trữ trang web Magento.

Lý tưởng nhất là tôi muốn một danh sách các nhiệm vụ, chẳng hạn như những thứ cần tắt / bật và nơi để tìm chúng. Cũng có thể có cấu hình Varnish mà những thay đổi đó được thiết kế để hoạt động.

Hướng dẫn hiệu suất Magento nói rất nhiều về Varnish, vì vậy tôi biết nó đã được thực hiện trước đây, tuy nhiên nó không thực sự giải thích làm thế nào để nó hoạt động.

Câu trả lời:


2

Họ có một mô-đun chính thức ngay tại đây . Nó bao gồm mọi thứ bạn cần (cấu hình véc ni, mô-đun, ...)


19

Varnish có phù hợp với bạn không?

Varnish không phải là tất cả và cuối cùng của màn trình diễn Magento. Thật tuyệt vời để bù đắp tải từ bot & người mua sắm tại cửa sổ - nhưng đó không phải là cổng gọi đầu tiên của bạn để thực sự làm cho cửa hàng của bạn nhanh hơn.

Trong thực tế, việc triển khai Varnish nên là sửa đổi hiệu suất cuối cùng cho cửa hàng của bạn. Chỉ thả nó vào khi bạn thấy thời gian tải trang Magento có khả năng phân phối mà không cần đến nó (Ví dụ: <600ms thời gian tải trang).

Cửa hàng của bạn vẫn cần phải nhanh

Vì Varnish vẫn yêu cầu ít nhất một lần tải trang để xử lý bộ đệm, điều đó có nghĩa là hiệu suất chưa được lưu trong bộ nhớ cache của bạn vẫn cần phải rất tốt. Phần lớn các URL duy nhất (lượt truy cập điều hướng được xếp lớp, truy vấn tìm kiếm, v.v.) sẽ không bao giờ thực sự được phục vụ từ Varnish trừ khi:

a) Chỉ số TTL của bạn rất cao, đến mức truy vấn tìm kiếm từ 4 ngày trước vẫn còn hiệu lực cho đến ngày hôm nay
b) Lượng truy cập trên trang web quá lớn đến nỗi các URL được đặt trong một khoảng thời gian rất ngắn

Bạn cũng phải xem xét rằng không phải mọi cửa hàng đều cho Varnish vay . Bất kỳ trang web nào khuyến khích người dùng tạo phiên cá nhân (ví dụ: đăng nhập, thêm vào giỏ hàng, v.v.) sớm trong hành trình khách hàng của họ sẽ có nghĩa là Varnish cuối cùng sẽ bị dư thừa.

Ví dụ: các trang web mua sắm riêng khuyến khích người dùng đăng nhập từ thiết lập, tuy nhiên, khi thực hiện việc này, điều đó có nghĩa là Varnish không bao giờ thực sự có nội dung không độc đáo có khả năng lưu trữ bộ đệm. Vì vậy, tỷ lệ trúng của bạn sẽ rất thấp và sẽ không có lợi ích gì khi sử dụng Varnish.

Nội dung mới hoặc tỷ lệ trúng cao hơn

Tỷ lệ trúng hoành tráng
Hình ảnh lịch sự của magestack.com

Sử dụng Varnish một cách hiệu quả là tạo ra sự cân bằng giữa nội dung cũ và lượng khách truy cập trên trang web của bạn.

Nếu bạn đã có một trang web bận rộn - tỷ lệ cược là bạn có thể thoát khỏi các TTL thấp hơn và vẫn có tỷ lệ trúng Varnish cao - và cũng tiếp tục có các TTL thấp - do đó, nội dung tươi hơn. Vì vậy, thay đổi cổ phiếu / giá của bạn được phản ánh nhanh chóng và bộ đệm được liên tục mồi từ khối lượng chân.

Nếu bạn có một trang web có lưu lượng truy cập thấp - thì bạn sẽ phải thỏa hiệp. Tăng chỉ số TTL của bạn để đảm bảo tỷ lệ trúng cao hơn - hoặc có nội dung cập nhật. Bạn không thể có cả hai. Có, bạn có thể chạy công cụ thu thập dữ liệu / nhện liên tục - nhưng tài nguyên này sẽ tiêu thụ và khối lượng hoặc URL tuyệt đối có thể được thu thập thông tin (thường là trong hàng chục nghìn cho các cửa hàng nhỏ ) có nghĩa là đơn giản là nó không hiệu quả. Vì vậy, thông thường, các cửa hàng nhỏ hơn sẽ được hưởng lợi nhiều hơn từ một tiện ích mở rộng FPC tốt và có cấu hình máy chủ được tối ưu hóa cao.

Nhưng tất nhiên tôi có thể sử dụng Varnish ngay cả khi người dùng đã đăng nhập, còn bộ nhớ cache cho mỗi người dùng hoặc ESI thì sao?

ESI

ESI là một tiện ích tuyệt vời để có thể giữ nội dung trong bộ nhớ cache và vẫn có thể có các khối động trên trang. Nhưng để được sử dụng hiệu quả, bạn cần giảm thiểu số lượng cuộc gọi lại đến mức tối thiểu. Có một mô-đun khởi động nhỏ mà bạn có thể sử dụng làm cơ sở cho quy trình này - chỉ cần đảm bảo rằng bạn thắt chặt các lỗ hổng bảo mật trong đó, mặc định nó không an toàn - không có giới hạn nào về cách xử lý bố cục mà bạn có thể / không thể tải

Mỗi lần bootstrap Magento được tải, nó sẽ bị phạt hiệu năng khoảng 200ms - trước khi nó tải một bộ sưu tập / kết xuất một khối, v.v. thời gian tải trang chậm hơn bằng cách sử dụng Varnish + ESI cho nội dung động, thay vì bỏ qua Varnish và chuyển yêu cầu trực tiếp đến chính Magento.

Vì vậy, để thực sự sử dụng ESI một cách hiệu quả, bạn phải có khả năng kết hợp nhiều yêu cầu trong một yêu cầu.

Ví dụ: trang xem danh mục liệt kê 20 sản phẩm cần hiển thị mức chứng khoán chính xác. Vì vậy, bạn sử dụng ESI cho mỗi khối trên trang. Đó sẽ là 20 lần yêu cầu cổ phiếu ESI. Trong khi các yêu cầu chứng khoán rất nhẹ, chạy 20 lần trong số chúng sẽ phá vỡ hiệu suất. Vì vậy, thay vào đó, bạn có thể phục vụ toàn bộ khối / bộ sưu tập 20 sản phẩm và chỉ cần nhận được yêu cầu 1x đó. Nhưng dù sao tải và hiển thị bộ sưu tập có lẽ là yếu tố chậm nhất trên trang - vì vậy bạn không thu được nhiều.

Sử dụng ESI thực sự cần lập kế hoạch và thực hiện đúng, hoặc bạn sẽ có một trang web chậm hơn so với việc không sử dụng Varnish.

Bộ nhớ cache cho mỗi người dùng

Sau đó, có sự thay thế của việc sử dụng bộ đệm dành riêng cho người dùng. Đây là một ý tưởng tồi trừ khi bạn có một trang web có lưu lượng truy cập rất thấp. Tỷ lệ trúng của bạn sẽ ở mức thấp khủng khiếp - vì tỷ lệ cược của một khách truy cập vào cùng một trang mà họ đã từng ở rất thấp. Và đối với mỗi khách hàng, trang 6Kb đó sẽ chiếm nhiều không gian hơn trong thùng lưu trữ Varnish của bạn.

Ví dụ: nếu bạn đã phân bổ 1GB cho Varnish. Với một trang web điển hình nơi người dùng xem 8 trang mỗi lần truy cập, trung bình 6 trong số các trang đó sẽ là duy nhất. Vì vậy, đó là 28 khách trên 1 MB dung lượng lưu trữ. Sau đó, yếu tố trong hình ảnh của bạn, CSS và JS - những điều này (rất may) sẽ phổ biến, nhưng có lẽ vẫn sẽ chiếm 7-800 MB dung lượng lưu trữ có sẵn của bạn. Điều này khiến bạn còn lại 200 MB dung lượng lưu trữ, bộ nhớ cache đủ cho 5.600 khách truy cập.

Chà, tôi không quan tâm, tôi chỉ muốn Varnish

Được rồi, sau đó bạn sẽ cần phải làm như sau:

  1. Cài đặt bộ kết thúc SSL để ngồi trước Varnish (ví dụ: stud / pound / nginx)
  2. Cài đặt Varnish trên máy chủ
  3. Đảm bảo bạn định cấu hình X-Forwarded-Forchính xác
  4. Cài đặt mô-đun Varnish trên cửa hàng của bạn
  5. Thiết lập các VCL Varnish của bạn để loại trừ các tiện ích mở rộng của bên thứ 3

Vì 3 điểm đầu tiên nằm ngoài phạm vi của câu trả lời này, tôi sẽ để việc đó tự xử lý. Điểm 4 là trò chơi của trẻ em và với điểm 5 - tiếp tục đọc.

Điều quan trọng nhất về việc triển khai Varnish là đảm bảo rằng bạn không bao giờ lưu trữ nội dung không bao giờ được lưu vào bộ nhớ cache.

Ví dụ.

  • Gọi lại cổng thanh toán
  • Tổng quan về giỏ hàng
  • Tổng quan về khách hàng của tôi
  • Thanh toán (và các cuộc gọi Ajax tương ứng)

Vân vân.

Đối với các URL Magento cốt lõi, có một danh sách URI khá chuẩn mà bạn có thể thoát trong Varnish:

admin|checkout|customer|catalog/product_compare|wishlist|paypal

Nhưng bạn cũng cần xem xét bất kỳ tiện ích mở rộng tùy chỉnh / bên thứ 3 nào bạn cũng đang chạy có các tuyến đường, bộ định tuyến và không gian tên tùy chỉnh. Thật không may, không có cách nào dễ dàng để biết URL nào từ các tiện ích mở rộng này có thể và không thể được lưu trong bộ nhớ cache. Vì vậy, bạn cần đánh giá từng trường hợp cụ thể.

Theo quy định, bất cứ khi nào chúng tôi định cấu hình Varnish, chúng tôi sẽ bắt đầu bằng cách xác định các tuyến đường, bộ định tuyến và không gian tên tương ứng mà chúng có thể chiếm giữ và đi từ đó. Chúng tôi làm điều này thông qua SSH:

grep -Eiroh "<frontName>.*</frontName>" community | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" community | grep "<from>"
grep -A5 -ir "<routers>" community 
grep -Eiroh "<frontName>.*</frontName>" local | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" local | grep "<from>"
grep -A5 -ir "<routers>" local 

Điều này sẽ không cung cấp cho bạn một danh sách URL chính xác - nhưng gần như chắc chắn nó sẽ cung cấp cho bạn một khởi đầu.

Chúng tôi không thể nhấn mạnh tầm quan trọng của việc không bao giờ lưu trữ nội dung không được lưu vào bộ nhớ cache. Kết quả có thể là thảm họa.

Tóm tắt

Như với bất kỳ tối ưu hóa hiệu suất máy chủ Magento khác, được triển khai và điều chỉnh chính xác có thể thực sự mang lại lợi ích. Nhưng chỉ đơn giản là bỏ phần mềm mà không cấu hình đúng cách, nó không chỉ khiến cửa hàng của bạn không nhanh hơn mà còn chậm hơn, không an toàn hơn và kém tin cậy hơn.


@SimonJGreen. Nếu bạn hài lòng với câu trả lời, hãy chắc chắn đánh dấu nó là chấp nhận. Beta cần nhiều câu trả lời được chấp nhận hơn để tốt nghiệp.
Ben Lessani - Sonassi

Cảm ơn câu trả lời. Nhưng còn bước 'Cấu hình apache và Varnish' thì sao? Chỉ cần 'cài đặt Varnish' là không đủ.
Yaroslav Rogoza

Quan điểm của tôi là bạn không nên coi Varnish là một giải pháp ngay từ đầu. Varnish là làm cho các trang web nhanh sử dụng ít tài nguyên hơn , không làm chậm các trang web nhanh . Phần lớn mọi người sử dụng nó vì những lý do sai lầm. Chưa kể rằng cấu hình phù hợp không phải là 1 kích thước phù hợp với tất cả. Bạn đã phải tính đến việc nó phù hợp với bức tranh lớn hơn về cơ sở hạ tầng như thế nào, nó tương tác với bộ kết thúc SSL của bạn như thế nào, cách bạn xử lý cân bằng tải, định nghĩa và loại trừ TTL của bạn là gì. Nó chỉ KHÔNG CẦN THIẾT cho các trang web có lưu lượng truy cập thấp, họ không có cơ hội để giữ cho nó được mồi.
Ben Lessani - Sonassi

Đối với bất kỳ ai trên máy Mac sử dụng các lệnh tìm kiếm của Ben, lưu ý rằng phiên bản OSX của sed yêu cầu các cờ khác nhau. Nếu bạn cài đặt gnu-sed, nó hoạt động như hiển thị ở đây.
benz001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.