Làm ấm trước bộ đệm toàn bộ doanh nghiệp Magento


19

Các lợi ích về hiệu suất của bộ đệm toàn trang trong Magento Enterprise khá nổi tiếng. Điều có thể không được nhiều người biết đến là để nhận ra lợi ích đầy đủ của điều này, nó phải được phổ biến đầy đủ và hấp dẫn, đặc biệt là trên các bộ sản phẩm lớn mà bạn không chỉ có một vài trang để sử dụng lưu lượng truy cập không phải trả tiền nguyên tố nó đủ nhanh.

Magento bao gồm một cronjob tích hợp để thu thập dữ liệu trang web và làm ấm FPC vào sáng sớm.

Tôi đã thấy và nghe về các vấn đề gây ra bởi các công việc sáng sớm mất quá nhiều thời gian để chạy, ngăn chặn các công việc khác chạy và muốn biết những gì người khác sử dụng hoặc sẽ đề nghị được sử dụng để làm điều này. Một vài ý tưởng tôi có là:

  • Đặt một tập lệnh shell để thu thập dữ liệu mỗi trang trong tệp sơ đồ trang web được tạo.
  • Sử dụng một mục crontab riêng và một đoạn mã PHP ngắn để khởi động Magento và thực hiện trực tiếp quá trình thu thập thông tin.

Bất kỳ suy nghĩ và / hoặc kinh nghiệm về điều này đều được chào đón!


1
Trên thực tế, bạn có thể gọi trình thu thập thông tin doanh nghiệp từ một tệp riêng biệt và sử dụng crontab máy chủ của bạn để kích hoạt nó để nó không bị cản trở.
Toon Van Dooren

Câu trả lời:


16

Bạn có thể sử dụng bao vây kết hợp với sitemap.xmltệp, giống như MageSpeedTest .

#categories
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 0.5 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' > urls.txt
#products
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 1.0 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' >> urls.txt

Sau đó chạy

siege -i -c 1 -t 7200s -f urls.txt

Nội dung có nguồn gốc từ đây .


Bạn cũng có thể thêm độ trễ giữa các yêu cầu bằng cách sử dụng–delay
Ben Lessani - Sonassi

Lưu ý: Các lệnh sed này không hoạt động trên Darwin, nhưng thực hiện trên CentOS.
davidalger

1
Điều này không đảm bảo mọi url sẽ được "làm ấm". bao vây sẽ chọn ngẫu nhiên các URL để truy cập từ tệp, nhưng sẽ không nhất thiết phải truy cập mọi URL.
Joe Constant

22

Chúng tôi chỉ không - tất cả. Không bao giờ. Chúng tôi sẽ nói điều này nhiều lần nhưng

Bộ nhớ đệm! = Hiệu suất

Trang web của bạn cần phải nhanh chóng mà không cần thêm FPC (hoặc Varnish cho thực tế đó). Luôn luôn có một thời gian khi nội dung không được mồi (kịch bản của bạn ở trên).

Trên một cửa hàng không tải, thời gian tải trang với FPC không nên ấn tượng hơn nhiều so với không phải FPC; Magento khá hạnh phúc có khả năng < 400mstải thời gian tải trang trên bộ đệm tiêu chuẩn (trên danh mục / sản phẩm / trang tìm kiếm). FPC sẽ đưa nó xuống < 80ms- nhưng đi kèm với hãy cẩn thận.

  1. Thông tin về cổ phiếu / giá đã hết hạn cho đến khi hết hiệu lực hoặc hết hạn
  2. Các mục mới / tìm kiếm phù hợp hơn đã hết hạn cho đến khi hết hiệu lực hoặc hết hạn

    v.v.

Tại sao sự phụ thuộc vào FPC (hoặc Varnish) là một ý tưởng tồi

Nếu bạn đang tìm cách liên tục đảm bảo bộ nhớ cache được mồi theo cách thủ công, có thể có một vài lý do

  1. Bạn không có đủ lượng chân tự nhiên để giữ bộ nhớ đệm (xem 'Trường hợp FPC hữu ích')
  2. Trang web của bạn quá chậm mà không có họ

Bạn không thể lưu trữ mọi thứ

Nếu bạn có một cửa hàng chỉ với 5 danh mục, sâu 2 cấp độ lồng nhau, 5 thuộc tính có thể lọc, 5 tùy chọn thuộc tính mỗi loại và 1000 sản phẩm; đó là rất nhiều sự kết hợp có thể

25 tùy chọn để chọn, chọn tối đa 5 lần liên tiếp - Tôi không phải là người thống kê , nhưng tôi biết đó là ... (giả sử số lượng tùy chọn thuộc tính không giảm hoàn toàn)

25 possible URLs on the first selection
20 possible URLs on the second selection
15 possible URLs on the third selection
10 possible URLs on the fourth selection
5  possible URLs on the fifth selection

5^5 = 3,125 possible combinations (for top level categories)
5^4 = 625 possible combinations (for 2nd level categories)

Ok, như trên không phải là một kịch bản có thể xảy ra, như tôi tưởng tượng, trong vòng 3 lần nhấp - số lượng sản phẩm có sẵn sẽ giảm đủ để khách hàng tìm thấy sản phẩm của họ. Vì vậy, ngay cả khi đó là ...

25 possible URLs on the first selection
10 possible URLs on the second selection
3 possible URLs on the third selection

5^3 = 125 possible URL combinations 

Sau đó nhân với 5 loại, đó là 625 URL. Ở giai đoạn này, chúng ta đang nói về một danh mục nhỏ và hoàn toàn bỏ qua tất cả các URL của sản phẩm.

Chúng tôi cũng không bao gồm trong trường hợp nếu bạn có các danh mục lồng nhau is_anchor, nó sẽ tăng theo cấp số nhân.

Vì vậy, để thu thập số lượng trang đó - bạn phải hy vọng rằng thời gian tải trang của mình tốt và thấp, để đó là một quá trình nhẹ nhanh chóng (do đó đánh bại mục đích thu thập dữ liệu) - hoặc bạn có đủ thời gian để nó hoàn thành trước khi hết hạn.

Nếu các trang của bạn có thời gian tải trang là 0,4 giây và bạn có CPU 8 lõi - thì ...

625 * 0.4 = 250 / 8 = 31 seconds

0,5 phút, không tệ - nhưng hãy tưởng tượng bạn có thời gian tải trang 2 giây

625 * 2 = 1250 / 8 = 156 seconds

Nhưng nếu bạn lấy kịch bản tối đa có thể

3,750 * 2 = 7,500 / 8 = 937 seconds ~ 15 minutes

Vì vậy, đó là máy chủ sản xuất của bạn, tải CPU dưới 100% trong 15 phút. Bạn sẽ giảm tốc độ thu thập dữ liệu theo tỷ lệ tương ứng với TTL mà bạn muốn.

Vì vậy, nếu bạn muốn nội dung có 3600 giây, thu thập thông tin có thể chậm hơn 4 lần - tức là. Chỉ 25% CPU dành riêng cho thu thập thông tin. Đó là rất nhiều tài nguyên chỉ để giữ nguyên nội dung danh mục - chúng tôi thậm chí chưa bao gồm các sản phẩm, cụm từ tìm kiếm hoặc lượt xem cửa hàng bổ sung trong giai đoạn này

Trên thực tế, chỉ cần nhìn vào kích thước tuyệt đối của các kết hợp trong catalog_url_rewritesbảng (thậm chí không bao gồm các tham số từ điều hướng được xếp lớp) sẽ cho bạn biết có bao nhiêu URL bạn có thể cần phải thu thập dữ liệu.

Mỗi cửa hàng chắc chắn sẽ khác nhau, nhưng điều tôi đang cố gắng tấn công là việc thu thập dữ liệu trang web đến FPC chính là không thực tế. Chỉ cần đảm bảo cửa hàng của bạn nhanh chóng để bắt đầu .

Trường hợp FPC hữu ích

Khi các lợi ích của FPC phát huy tác dụng là ở một cửa hàng được tải rất nhiều - nơi bạn có lưu lượng truy cập thực sự cao và các bộ nhớ cache được tự nhiên và liên tục được mồi bởi một mình.

FPC sau đó đi vào hoạt động bằng cách giảm chi phí cơ sở hạ tầng đối với nội dung thường được yêu cầu - cắt giảm các cuộc gọi lặp đi lặp lại đến phụ trợ Magento.

Vì vậy, chúng tôi thấy rằng FPC rất tốt để triển khai khi bạn có mức lưu lượng truy cập rất cao - không phải để giảm thời gian tải trang - mà là để giảm việc sử dụng tài nguyên.

Ai quan tâm, tôi vẫn muốn bò

Chà, sau đó bạn có hai lựa chọn

  1. Thu thập dữ liệu từ một mẫu (Ví dụ: sơ đồ trang web)
  2. Trích xuất liên kết từng trang và thu thập dữ liệu từng trang

Và có nhiều tiện ích để làm cả hai điều này, đây là một số tiện ích tôi biết

  1. pháp sư
  2. HTTrack
  3. Nạng
  4. Người hướng dẫn
  5. Trình thu thập thông tin4j

Sử dụng Mage-Perftest

Bạn có thể thu thập dữ liệu cửa hàng của mình với Mage-Perftest khá dễ dàng, trước tiên hãy tải xuống

wget http://sys.sonassi.com/mage-perftest          (64bit) OR
wget http://sys.sonassi.com/mage-perftest-i386     (32bit)
chmod +x http://sys.sonassi.com/mage-perftest*

Sau đó, xác định quy trình thu thập thông tin bằng sơ đồ trang web Magento (bạn có thể tùy chỉnh điều này bằng cách tạo sơ đồ trang web của bất kỳ URL nào, miễn là các url được gói trong <loc></loc>thẻ). Lệnh sau sẽ đọc tất cả các URL từ tệp sơ đồ trang web, sau đó thu thập dữ liệu (chỉ PHP) các URL trong vòng 1440 phút (1 ngày). Nếu máy chủ vượt quá 20% CPU hoặc trung bình tải là 2 - thì việc thu thập thông tin sẽ tạm thời dừng lại.

./mage-perftest -u www.example.com -s www.example.com/sitemap.xml -r auto -b -d 1440 -z -a 20 -l 2  

Nếu bạn có 1000 URL, được thu thập thông tin trong hơn 1 ngày, đó sẽ là khoảng. 1 yêu cầu cứ sau 86 giây (s) ~ mục tiêu 0,011 RPS


Dòng mở của bạn là bộ nhớ đệm trang rất đúng không phải là cách để đạt được hiệu suất. Tôi biết cái này. Bạn không biết bao nhiêu lần tôi đã nói với khách hàng điều tương tự. Tôi sẽ thành thật, tôi chưa bao giờ thiết lập một trang web nơi chúng tôi có trình thu thập thông tin FPC trước đó và chỉ thấy nó được sử dụng một lần khi khách hàng kích hoạt nó trong quản trị viên làm chậm mọi thứ kể từ khi họ gắn thẻ bộ nhớ cache dựa trên tệp. Lý do chính tôi đang hỏi là vì tôi đang khám phá những ý tưởng liên quan đến vấn đề này dựa trên một số nghiên cứu trên sách trắng của Nexcess. Đối với các trang web có lưu lượng truy cập cực kỳ cao, việc mồi bộ đệm sau khi xóa nó vào sáng sớm có thể rất quan trọng
davidalger

1
Tôi tôn trọng Nexcess - nhưng sách trắng của họ tập trung rất nhiều vào bộ nhớ đệm để đạt được hiệu suất - thay vì đảm bảo môi trường đã hoạt động tốt và mã sạch, nhanh và hiệu quả. Chúng tôi cung cấp Varnish cho khách hàng của mình - nhưng không ủng hộ việc sử dụng nó cho đến khi được yêu cầu. Chỉ sau đó như một phương tiện để giảm chi phí cơ sở hạ tầng - tức là. khi ~ 94% lưu lượng truy cập không chuyển đổi / thanh toán đang tiêu tốn chu kỳ CPU. Bộ nhớ đệm tạo ra các số liệu thống kê điểm chuẩn nhân tạo đẹp - nhưng có nghĩa là không có gì trong thực tế nếu các TTL quá dài (nội dung cũ) - hoặc không có đủ lưu lượng truy cập để giữ nguyên.
Ben Lessani - Sonassi

1
Đối với các trang web có lưu lượng truy cập cực kỳ cao - chúng tôi đã có một vài trang và cố gắng giữ cho bộ đệm nóng thông qua thu thập dữ liệu nhân tạo là vô nghĩa - lưu lượng truy cập tự nhiên làm điều đó rất tốt. Nếu có bất cứ điều gì, thu thập thông tin chỉ cần loại bỏ các tài nguyên mà khách hàng sẽ sử dụng.
Ben Lessani - Sonassi

Tôi cầu xin khác nhau trên giấy trắng của họ tập trung vào việc sử dụng bộ nhớ đệm cho hiệu suất. Họ đã cho thấy mức độ thông lượng của cụm 2 + 1 có thể đạt được. Họ thậm chí không chạm vào thời gian tải trang trong đó, chỉ thông lượng giao dịch. Phần cứng họ có được tối ưu hóa gần như bạn có thể nhận được và có, tôi nhận ra những ảnh hưởng của TTL đối với nội dung được lưu trong bộ nhớ cache. Chỉ cần lặp lại, tôi không muốn đạt được hiệu suất ở đây, chúng tôi đã có điều đó. Điều này sẽ được khám phá là cách để vượt qua độ trễ / giảm thông lượng do xả bộ nhớ cache vào sáng sớm, tức là trước khi lưu lượng truy cập bình thường tăng.
davidalger

1
Tôi bối rối rồi. Nếu cửa hàng của bạn đã nhanh - nhưng sẽ bị đổ khi bạn xóa bộ đệm. Hoặc là a) Đừng xóa bộ nhớ cache vào buổi sáng, làm điều đó vào tối hôm trước và để cho các công cụ tìm kiếm thu thập thông tin (google / bing, v.v.) làm mồi cho bạn hoặc b) có được cơ sở hạ tầng phù hợp . Nếu cửa hàng của bạn có bản lề trên FPC / Varnish để ngăn chặn sự chậm trễ / chậm lại - thì có vẻ như bạn đang chạy trên một lưỡi dao ...
Ben Lessani - Sonassi

0

Tôi sẽ lưu lại toàn bộ bài viết của mình cho một bài đăng trên blog vào những ngày này, nhưng trong thời gian đó, có một đỉnh cao tại bộ đệm ấm nhỏ của tôi wfpc.

Kiểm tra hiệu suất

Bạn có thể kiểm tra hiệu suất của trang Magento của bạn

./wfpc -t http://mymagentosite.com/sitemap.xml

Finished testing your Magento site performance
Total download time (in seconds)   : 5.0269110202789
Total download time (formatted)    : 0:0:5.026
Average page time (in milliseconds): 502.69110202789

Hâm nóng FPC

Và bạn có thể làm ấm FPC, nó sẽ đạt được mọi URL trong sitemap.xml.

./wfpc -w http://mymagentosite.com/sitemap.xml

Bạn cũng có thể đặt độ trễ giữa các yêu cầu nếu bạn muốn, đây là độ trễ 1 giây giữa các yêu cầu.

./wfpc -w -d=1 http://mymagentosite.com/sitemap.xml

Chế độ kiểm tra chỉ đạt ngẫu nhiên 10 URL, do đó, khi bạn đã làm ấm FPC của mình, bạn có thể chạy chế độ kiểm tra để tìm hiểu mức độ khác biệt mà FPC tạo ra!

Suy nghĩ

Cá nhân, tôi nghĩ rằng một ấm hơn có ý nghĩa ... Trên một trang web nhỏ với khoảng 40 trang, thời gian tải xuống bị cắt giảm một nửa bởi FPC. Trên một trang web lớn với gần 40.000 sản phẩm sử dụng Lesti_FPC với APCu là phần phụ trợ, tôi đang sử dụng hơn 200 MB cho bộ đệm, thực sự không có gì trên máy chủ sản xuất 8GB.

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.