Diperlukan modifikasi untuk menggunakan Varnish di Magento CE

14

Saya berjuang untuk menemukan contoh kerja yang baik dari modifikasi apa yang diperlukan untuk memungkinkan Varnish melakukan cache ke situs Magento.

Idealnya saya ingin daftar tugas, seperti hal-hal untuk menonaktifkan / mengaktifkan dan di mana mencarinya. Akan lebih baik untuk memiliki konfigurasi Varnish bahwa perubahan itu dirancang untuk bekerja dengannya.

Panduan kinerja Magento banyak berbicara tentang Varnish, jadi saya tahu ini sudah pernah dilakukan sebelumnya, tetapi itu tidak benar-benar menjelaskan cara membuatnya bekerja.

SimonJGreen
sumber

Jawaban:

2

Mereka memiliki modul resmi di sini . Ini mencakup semua yang Anda butuhkan (pernis config, modul, ...)

Kenny
sumber
19

Apakah Varnish tepat untuk Anda?

Varnish bukanlah kinerja Magento yang serba bisa dan paling akhir. Sangat bagus untuk mengimbangi muatan dari bot & pembeli di jendela - tetapi ini tidak seharusnya menjadi tempat panggilan pertama Anda untuk benar-benar membuat toko Anda lebih cepat.

Bahkan, menerapkan Varnish harus menjadi modifikasi kinerja terakhir ke toko Anda. Hanya masukkan sekali Anda melihat waktu pemuatan halaman yang Magento dapat berikan tanpa itu (mis. <600ms kali pemuatan halaman).

Toko Anda masih harus cepat

Karena Varnish masih membutuhkan setidaknya satu halaman memuat untuk mengunggah cache, itu berarti kinerja Anda yang belum di-cache masih harus sangat baik. Sebagian besar URL unik (klik navigasi berlapis, permintaan pencarian, dll.) Tidak akan pernah benar-benar dilayani dari Varnish kecuali:

a) TTL Anda sangat tinggi, sehingga permintaan pencarian dari 4 hari yang lalu masih berlaku hari ini
b) Footfall di situs ini sangat luas sehingga URL-URL tersebut diisi dalam waktu yang sangat singkat

Anda juga harus mempertimbangkan bahwa tidak setiap toko cocok untuk Varnish . Setiap situs yang mendorong pengguna untuk membuat sesi pribadi (mis. Masuk, tambahkan-ke-gerobak, dll.) Di awal perjalanan pelanggan mereka akan berarti bahwa Varnish pada akhirnya akan berlebihan.

Sebagai contoh, situs belanja pribadi mendorong pengguna untuk masuk dari pengaturan, namun, dalam melakukan ini, itu berarti bahwa Varnish tidak pernah benar-benar memiliki konten non-unik yang mampu cache. Jadi hit rate Anda akan sangat rendah dan tidak ada manfaat sama sekali dari menggunakan Varnish.

Konten segar atau tingkat klik yang lebih tinggi

Varnish Hit Rate
Gambar milik magestack.com

Menggunakan Varnish secara efektif adalah tentang mencapai keseimbangan antara konten basi dan jumlah pengunjung di situs Anda.

Jika Anda memiliki situs yang sibuk - kemungkinan besar Anda bisa lolos dengan TTL yang lebih rendah dan masih memiliki hit rate Varnish yang tinggi - dan juga terus memiliki TTL yang rendah - dengan demikian, konten yang lebih segar. Jadi perubahan stok / harga Anda tercermin dengan cepat dan cache secara terus menerus diprima dari volume langkah kaki.

Jika Anda punya situs rendah lalu lintas - maka Anda akan harus membuat kompromi. Tingkatkan TTL Anda untuk memastikan tingkat klik yang lebih tinggi - atau memiliki konten terbaru. Anda tidak dapat memiliki keduanya. Ya, Anda dapat menjalankan alat crawl / spider secara terus menerus - tetapi sumber daya ini akan mengkonsumsi, dan semata-mata volume atau URL yang dapat dirayapi (biasanya dalam puluhan ribu untuk toko kecil ) berarti itu sama sekali tidak efektif. Jadi biasanya, toko yang lebih kecil akan mendapat manfaat lebih dari ekstensi FPC yang baik dan memiliki konfigurasi server yang sangat optimal.

Tapi tentu saja saya bisa menggunakan Varnish bahkan ketika pengguna masuk, bagaimana dengan cache per pengguna atau ESI?

ESI

ESI adalah utilitas yang sangat baik untuk dapat menyimpan konten dalam cache, dan masih dapat memiliki blok dinamis pada halaman. Tetapi agar dapat digunakan secara efektif, Anda harus meminimalkan jumlah panggilan balik hingga minimum. Ada sedikit modul head-start yang dapat Anda gunakan sebagai dasar untuk proses ini - pastikan Anda mengencangkan lubang keamanan di dalamnya, sangat tidak aman secara default - tidak ada batasan pada tata letak yang Anda bisa / tidak bisa muat

Setiap kali bootstrap Magento dimuat, ia datang dengan penalti kinerja sekitar 200 ms - sebelum bahkan memuat koleksi / merender blok dll. Jadi jika Anda memiliki lebih dari 3x ESI, kemungkinan besar Anda telah berakhir dengan waktu pemuatan laman yang lebih lambat menggunakan Varnish + ESI untuk konten dinamis, dari sekadar mem-bypass Varnish dan meneruskan permintaan langsung ke Magento sendiri.

Jadi untuk benar-benar menggunakan ESI secara efektif, Anda harus dapat menggabungkan beberapa permintaan dalam satu permintaan.

Misalnya, halaman tampilan kategori yang mencantumkan 20 produk perlu menunjukkan tingkat stok yang akurat. Jadi, Anda menggunakan ESI untuk setiap blok di halaman. Itu akan menjadi 20x permintaan saham ESI. Sementara permintaan stok sangat ringan, menjalankan 20x dari mereka secara bersamaan akan menghancurkan kinerja. Jadi sebagai gantinya, Anda bisa melayani seluruh blok / koleksi 20 produk dan hanya mendapatkan permintaan 1x itu. Tapi memuat dan merender koleksi mungkin adalah elemen paling lambat di halaman - jadi Anda belum mendapatkan banyak.

Menggunakan ESI secara efektif membutuhkan perencanaan dan pelaksanaan yang tepat, atau Anda akan memiliki situs yang lebih lambat daripada tidak menggunakan Varnish sama sekali.

Tembolok per pengguna

Lalu ada alternatif menggunakan cache khusus pengguna. Ini adalah ide yang buruk kecuali Anda memiliki situs dengan lalu lintas sangat rendah. Rasio hit Anda akan sangat rendah - karena peluang pengunjung untuk mencapai halaman yang sama dengan yang mereka kunjungi sangat rendah. Dan untuk setiap pelanggan, halaman 6Kb itu akan menempati lebih banyak ruang di tempat penyimpanan Varnish Anda.

Misalnya, jika Anda telah mengalokasikan 1GB ke Varnish. Dengan situs khas tempat pengguna melihat 8 halaman per kunjungan, rata-rata 6 halaman tersebut akan menjadi unik. Jadi itu adalah 28 pengunjung per 1MB penyimpanan. Kemudian faktor dalam gambar Anda, CSS dan JS - ini (untungnya) akan umum, tetapi mungkin masih akan menempati 7-800MB penyimpanan Anda yang tersedia. Ini membuat Anda memiliki sisa penyimpanan 200MB, cukup cache untuk 5.600 pengunjung unik.

Yah, aku tidak peduli, aku hanya ingin Varnish

Oke, maka Anda perlu melakukan hal berikut:

  1. Instal terminator SSL untuk duduk sebelum Varnish (mis. Stud / pound / nginx)
  2. Instal Varnish di server
  3. Pastikan Anda mengonfigurasi X-Forwarded-Fordengan benar
  4. Instal modul Varnish di toko Anda
  5. Siapkan Varnish VCLs Anda untuk mengecualikan ekstensi pihak ketiga

Karena 3 poin pertama berada di luar cakupan jawaban ini, saya akan menyerahkannya sendiri kepada Anda. Poin 4 adalah permainan anak-anak dan dengan poin 5 - terus membaca.

Hal terpenting dari implementasi Varnish adalah memastikan bahwa Anda tidak pernah menembolok konten yang tidak boleh di-cache.

Misalnya.

  • Callback gateway pembayaran
  • Ikhtisar keranjang
  • Pelanggan ikhtisar akun saya
  • Checkout (dan masing-masing panggilan Ajax)

dll.

Untuk URL Magento inti, ada daftar URI yang cukup standar yang bisa Anda hindari di Varnish:

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

Tetapi Anda juga perlu mempertimbangkan ekstensi khusus / pihak ke-3 yang sedang Anda jalankan yang memiliki rute kustom, router, dan ruang nama. Sayangnya, tidak ada cara mudah untuk mengetahui URL apa dari ekstensi ini yang bisa dan tidak bisa di-cache. Jadi, Anda perlu mengevaluasi masing-masing berdasarkan kasus per kasus.

Sebagai aturan, setiap kali kita mengkonfigurasi Varnish, kita akan mulai dengan mengidentifikasi rute, router, dan ruang nama masing-masing yang mungkin mereka tempati dan pergi dari sana. Kami melakukan ini melalui 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 

Ini tidak akan memberi Anda daftar URL yang pasti - tetapi hampir pasti akan memberi Anda starter.

Kami tidak bisa menekankan betapa pentingnya untuk tidak pernah menyimpan konten yang seharusnya tidak di-cache. Hasilnya bisa menjadi bencana besar.

Singkatnya

Seperti halnya optimasi kinerja server Magento lainnya, diimplementasikan dan disetel dengan benar dapat benar-benar menghasilkan manfaat. Tetapi hanya dengan menjatuhkan perangkat lunak tanpa mengonfigurasikannya dengan benar, ini tidak hanya akan membuat toko Anda tidak lebih cepat, tetapi juga berpotensi lebih lambat, lebih tidak aman, dan kurang dapat diandalkan.

Ben Lessani - Sonassi
sumber
@SimonJGreen. Jika Anda senang dengan jawabannya, pastikan untuk menandainya sebagai diterima. Beta membutuhkan lebih banyak jawaban yang diterima untuk lulus.
Ben Lessani - Sonassi
Terima kasih atas jawabannya. Tetapi bagaimana dengan langkah 'Konfigurasi apache dan Varnish'? Hanya 'instal Varnish' saja tidak cukup.
Yaroslav Rogoza
Maksud saya adalah bahwa Anda seharusnya tidak mempertimbangkan Varnish sebagai solusi sejak awal. Varnish membuat situs cepat menggunakan lebih sedikit sumber daya , bukan memperlambat situs dengan cepat . Mayoritas orang menggunakannya karena alasan yang salah. Belum lagi konfigurasi yang tepat tidak 1 ukuran cocok untuk semua. Anda harus mempertimbangkan bagaimana hal itu cocok dengan gambaran infrastruktur yang lebih besar, bagaimana hal itu berinteraksi dengan Anda terminator SSL, bagaimana Anda menangani keseimbangan beban, apa definisi dan pengecualian TTL Anda. Ini BUKAN PERLU untuk situs lalu lintas rendah, mereka tidak memiliki langkah kaki untuk menjaganya tetap prima.
Ben Lessani - Sonassi
Bagi siapa pun di mac yang menggunakan perintah pencarian Ben, perhatikan bahwa versi sed OSX memerlukan flag yang berbeda. Jika Anda menginstal gnu-sed berfungsi seperti yang ditunjukkan di sini.
benz001