Pra-Pemanasan Cache Halaman Penuh Magento Enterprise


19

Manfaat kinerja cache halaman penuh di Magento Enterprise cukup terkenal. Apa yang mungkin tidak begitu terkenal adalah agar manfaat penuh dari hal ini dapat direalisasikan, itu harus diisi penuh dan panas, terutama pada set produk besar di mana Anda tidak hanya memiliki beberapa halaman sehingga memanfaatkan lalu lintas organik untuk Perdana cukup cepat.

Magento mencakup cronjob bawaan untuk merayapi situs dan menghangatkan FPC di pagi hari.

Saya telah melihat dan mendengar masalah yang disebabkan oleh pekerjaan di pagi hari yang terlalu lama untuk dijalankan, menghalangi pekerjaan lain agar tidak berjalan, dan ingin tahu apa yang orang lain gunakan atau sarankan digunakan untuk melakukan hal ini. Beberapa ide yang saya miliki adalah:

  • Kumpulkan skrip shell untuk merayapi setiap halaman dalam file sitemap yang dihasilkan.
  • Gunakan entri crontab terpisah dan skrip PHP pendek untuk mem-bootstrap Magento dan menjalankan proses crawler secara langsung.

Semua pemikiran dan / atau pengalaman tentang ini disambut baik!


1
Sebenarnya Anda dapat memanggil perayap Perusahaan dari file terpisah dan menggunakan server crontab Anda untuk memicunya sehingga tidak akan menghalangi.
Toon Van Dooren

Jawaban:


16

Anda bisa menggunakan pengepungan dalam kombinasi dengan sitemap.xmlfile, seperti yang dilakukan 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

Lalu lari

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

Konten bersumber dari sini .


Anda juga dapat menambahkan penundaan antara permintaan menggunakan–delay
Ben Lessani - Sonassi

Catatan: Perintah sed ini tidak berfungsi pada Darwin, tetapi lakukan pada CentOS.
davidalger

1
Ini tidak menjamin setiap url akan "dihangatkan". pengepungan akan secara acak memilih URL untuk dipukul dari file, tetapi tidak harus mengunjungi setiap URL.
Joe Constant

22

Kami hanya tidak - sama sekali. Pernah. Kami akan mengatakan ini berulang kali tetapi

Caching! = Performa

Situs Anda perlu untuk menjadi cepat tanpa penambahan FPC (atau Varnish untuk fakta bahwa). Akan selalu ada saat ketika konten tidak prima (skenario Anda di atas).

Di toko yang tidak dibongkar, waktu muat halaman dengan FPC seharusnya tidak lebih mengesankan daripada non-FPC; Magento cukup senang mampu < 400msmemuat halaman kali pada cache standar (pada kategori / produk / halaman pencarian). FPC akan membawanya ke < 80ms- tetapi dilengkapi dengan peringatan.

  1. Informasi stok / harga kedaluwarsa hingga tanggal valid atau TTL berakhir
  2. Item baru / pencarian yang lebih relevan sudah kedaluwarsa hingga valid atau TTL berakhir

    dll.

Mengapa mengandalkan FPC (atau Varnish) adalah A Bad Idea

Jika Anda ingin memastikan bahwa cache tersimpan secara manual, kemungkinan ada beberapa alasan

  1. Anda tidak memiliki cukup footfoot alami untuk menjaga cache tetap terjaga (lihat 'Di mana FPC berguna')
  2. Situs Anda terlalu lambat tanpa mereka

Anda tidak dapat menyimpan semuanya

Jika Anda mengambil toko dengan hanya 5 kategori, kedalaman 2 tingkat, bersarang 5 atribut yang dapat disaring, masing-masing 5 opsi atribut dan 1000 produk; itu banyak kemungkinan kombinasi.

25 opsi untuk dipilih, memilih satu hingga 5 kali berturut-turut - Saya bukan ahli statistik , tapi saya sadar itu ... (dengan asumsi jumlah opsi atribut tidak berkurang sepenuhnya)

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, skenario di atas bukan skenario yang mungkin, seperti yang saya bayangkan, dalam 3 klik - jumlah produk yang tersedia akan berkurang cukup bagi pelanggan untuk menemukan produk mereka. Jadi bahkan jika itu ...

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 

Kemudian dikalikan 5 kategori, yaitu 625 URL. Pada tahap ini, kita berbicara tentang katalog kecil, dan sepenuhnya mengabaikan semua URL produk.

Kami juga tidak mempertimbangkan bahwa jika Anda memiliki kategori bersarang dengan is_anchor, itu akan meningkat secara eksponensial.

Jadi untuk merayapi volume halaman itu - Anda harus berharap bahwa waktu buka halaman Anda bagus dan rendah untuk memulai, sehingga ini adalah proses yang ringan cepat (sehingga mengalahkan tujuan perayapan) - atau bahwa Anda memiliki cukup waktu untuk menyelesaikan sebelum TTL berakhir.

Jika halaman Anda memiliki waktu buka halaman 0,4 detik dan Anda memiliki CPU 8 inti - maka ...

625 * 0.4 = 250 / 8 = 31 seconds

0,5 menit, tidak buruk - tetapi mari kita bayangkan Anda memiliki waktu memuat halaman 2s

625 * 2 = 1250 / 8 = 156 seconds

Tetapi jika Anda mengambil skenario semaksimal mungkin

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

Jadi itulah server produksi Anda, di bawah 100% beban CPU selama 15 menit. Anda akan mengurangi kecepatan perayapan secara proporsional ke TTL yang Anda inginkan.

Jadi jika Anda ingin konten memiliki TTL 3600, perayapan bisa 4 kali lebih lambat - yaitu. hanya 25% CPU yang didedikasikan untuk perayapan. Itu banyak sumber daya hanya untuk menjaga konten kategori prima - kami bahkan belum memperhitungkan produk, istilah pencarian atau tampilan toko tambahan pada tahap ini

Faktanya, hanya dengan melihat ukuran kombinasi yang sebenarnya dalam catalog_url_rewritestabel (yang bahkan tidak memfaktorkan parameter dari navigasi berlapis) akan memberikan gambaran tentang berapa banyak URL yang bisa Anda perlu perayapi.

Setiap toko pasti akan berbeda, tetapi yang ingin saya lakukan adalah merayapi situs ke FPC utama tidak praktis. Pastikan toko Anda cepat untuk memulai .

Di mana FPC berguna

Di mana manfaat FPC ikut bermain adalah di toko yang sarat muatan - di mana Anda memiliki tingkat lalu lintas yang benar-benar tinggi dan cache secara alami dan terus-menerus dipupuk oleh kekalahan semata-mata saja.

FPC kemudian ikut bermain dengan mengurangi overhead infrastruktur pada konten yang biasanya diminta - mengurangi panggilan berulang ke backend Magento.

Jadi kami menemukan bahwa FPC bagus untuk digunakan ketika Anda memiliki tingkat lalu lintas yang sangat tinggi - bukan untuk mengurangi waktu buka halaman - tetapi untuk mengurangi penggunaan sumber daya.

Siapa peduli, saya masih mau merangkak

Nah, maka Anda punya dua opsi

  1. Merayapi dari templat (Mis. Sitemap)
  2. Ekstrak halaman demi halaman dan rangkak setiap tautan

Dan ada banyak utilitas untuk melakukan keduanya, ini adalah beberapa yang saya ketahui

  1. mage-perftest
  2. HTTrack
  3. Nutch
  4. Sphider
  5. Crawler4j

Menggunakan Mage-Perftest

Anda dapat menjelajah toko Anda dengan Mage-Perftest dengan cukup mudah, pertama unduh itu

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*

Kemudian tentukan proses perayapan menggunakan peta situs Magento (Anda dapat menyesuaikan ini dengan membuat peta situs URL apa pun, asalkan url dibungkus dengan <loc></loc>tag). Perintah berikut akan membaca semua URL dari file sitemap, kemudian merangkak (hanya PHP) URL selama 1440 menit (1 hari). Jika server melebihi 20% CPU atau rata-rata memuat 2 - perayapan akan berhenti sementara.

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

Jika Anda memiliki 1000 URL, dirayapi lebih dari 1 hari, itu akan menjadi sekitar. 1 permintaan setiap 86 detik ~ target 0,011 RPS


Baris pembuka Anda sangat benar ... cache halaman bukan cara untuk mencapai kinerja. Saya tahu ini. Anda tidak tahu berapa kali saya memberi tahu klien hal yang sama. Saya akan jujur, saya tidak pernah mengatur situs di mana kami memiliki crawler menentukan FPC sebelumnya, dan hanya melihatnya sekali di mana klien mengaktifkannya di admin ... memperlambat hal-hal sejak mereka tag cache berbasis file. Alasan utama saya bertanya adalah karena saya sedang mengeksplorasi ide-ide yang berkaitan dengan ini berdasarkan beberapa penelitian dalam buku putih Nexcess. Untuk situs dengan lalu lintas sangat tinggi, priming cache setelah dibilas pagi-pagi benar-benar penting
davidalger

1
Saya menghormati Nexcess - tetapi buku putih mereka sangat berfokus pada caching untuk mencapai kinerja - daripada memastikan lingkungan sudah berkinerja dan kodenya bersih, cepat dan efisien. Kami menyediakan Varnish untuk pelanggan kami - tetapi jangan menganjurkan penggunaannya sampai diperlukan. Hanya kemudian sebagai sarana untuk mengurangi biaya infrastruktur - yaitu. ketika ~ 94% dari lalu lintas non-konversi / checkout mengkonsumsi siklus CPU. Caching menghasilkan statistik tolok ukur buatan yang bagus - tetapi tidak ada artinya dalam kenyataannya jika TTL terlalu panjang (konten basi) - atau tidak ada lalu lintas yang cukup untuk membuatnya tetap prima.
Ben Lessani - Sonassi

1
Untuk situs dengan lalu lintas sangat tinggi - kami punya beberapa, dan mencoba membuat cache tetap panas melalui perayapan buatan tidak ada gunanya - lalu lintas alami melakukan itu dengan baik. Jika ada, perayapan hanya menghilangkan sumber daya yang seharusnya digunakan oleh pelanggan.
Ben Lessani - Sonassi

Saya mohon berbeda pada kertas putih mereka berfokus pada menggunakan caching untuk kinerja. Mereka menunjukkan berapa banyak throughput yang bisa dicapai oleh kluster 2 + 1. Mereka bahkan tidak menyentuh waktu pemuatan halaman di dalamnya, hanya throughput transaksi. Perangkat keras yang mereka miliki hampir sama optimalnya dengan yang Anda dapatkan ... dan ya, saya menyadari efek TTL pada konten yang di-cache. Hanya untuk mengulang, saya tidak ingin mencapai kinerja di sini, kami sudah memilikinya. Apa yang akan dieksplorasi ini adalah cara untuk mem-bypass kelambatan / penurunan dalam throughput karena pembilasan cache pagi hari, yaitu sebelum lalu lintas normal mengambil.
davidalger

1
Saya bingung saat itu. Jika toko Anda sudah cepat - tetapi jatuh ketika Anda menghapus cache. Baik a) Jangan kosongkan cache di pagi hari, lakukan malam sebelumnya dan biarkan pencarian merangkak bot (google / bing dll) lakukan priming untuk Anda atau b) dapatkan infrastruktur yang tepat . Jika toko Anda bergantung pada FPC / Varnish untuk mencegah lag / perlambatan - maka sepertinya Anda menggunakan pisau ...
Ben Lessani - Sonassi

0

Saya akan menyimpan kata-kata kasar penuh saya untuk posting blog satu hari ini, tetapi sementara itu memiliki puncak di penghangat cache kecil saya wfpc.

Menguji kinerja

Anda dapat menguji kinerja situs Magento Anda

./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

Pemanasan FPC

Dan Anda dapat menghangatkan FPC, yang akan mengenai setiap URL di sitemap.xml.

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

Anda juga dapat menunda antar permintaan jika suka, ini penundaan 1 detik antar permintaan.

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

Mode pengujian hanya mengenai 10 URL secara acak, jadi setelah Anda menghangatkan FPC Anda, Anda dapat menjalankan mode uji untuk mengetahui seberapa besar perbedaan yang dibuat oleh FPC!

Pikiran

Secara pribadi, saya pikir penghangat masuk akal ... Di situs kecil dengan sekitar 40 halaman, waktu pengunduhan kira-kira setengah oleh FPC. Di situs besar dengan hampir 40.000 produk menggunakan Lesti_FPC dengan APCu sebagai backend, saya menggunakan sedikit lebih dari 200MB untuk cache, yang terus terang tidak ada apa-apanya di server produksi 8GB.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.