Apa Pengaturan Server Magento Terbaik?


121

Kami saat ini bekerja dengan persyaratan bahwa tanggapan pertama dari server web harus berada di bawah 200 ms di Inggris. Saat ini di bawah 2 server web khusus di bawah load balancer dan 1 db server, kami hadir dengan kecepatan 800 ms.

Situs saat ini memiliki kurang dari 5 pelanggan, 2 produk, 4 kategori, tidak ada frontend ke situs saat ini, itu adalah gaya bebas dan gambar gratis.

Itu juga dijalankan di nginx dengan Varnish.

Adakah yang bisa memberi saya saran tentang pengaturan server web? Mengapa kami datang perlahan? Apa yang bisa Anda rekomendasikan untuk mengoptimalkan ini? Perlu mendapatkan 400% lebih cepat!


2
jika situs tersebut berasal dari tembolok pernis itu harus ada di <100ms
Fabian Blechschmidt

Apa yang sebenarnya ingin Anda penuhi? Berapa banyak pengunjung unik per jam? Berapa halaman / pengunjung? Berapa banyak pesanan per jam? Apa spesifikasi servernya? Versi Magento?
Ben Lessani - Sonassi

Bagaimana Anda menangani replikasi antar server? Konektivitas jaringan apa yang Anda miliki di antara mesin? Apa versi PHP yang Anda gunakan? Apa versi MySQL yang Anda gunakan? OS server apa yang Anda gunakan?
Ben Lessani - Sonassi

Telah melihat situs dengan ttfb peringkat lebih tinggi halaman pertama Google selain Amazon, eBay dan lain-lain, hanya salah satu dari banyak faktor teknis - tidak memperhitungkan banyak faktor bisnis. Anda mendekatinya dari bawah ke atas, baik untuk smes tetapi untuk peringkat dengan situs teratas itu bekerja secara berbeda. Anda membutuhkan Anda memuat halaman dinamis 1-2s, kami memiliki situs dengan 10.000 produk pada perangkat keras 5-10x lebih kecil dan tidak ada fpc (konten dinamis) ttfb lebih rendah dan penyelesaian rata-rata situs <1s. Pada penyedia tier 1/2 juga - peringkat yang lebih baik tetapi lebih lambat dari penyedia tier 3/4 & 5/6 - fpc menyembunyikan masalahnya jadi hapus sekarang.

Jawaban:


146

Saya akan gigit.

Respons pertama dari server web harus berada di bawah 200 ms di Inggris.
Tidak ada frontend ke situs saat ini, itu adalah gaya bebas dan gambar bebas.

Anda tidak akan mencapai angka-angka itu tanpa bantuan Varnish atau FPC (atau keduanya). Saya tentu berharap angka itu juga tidak harus menyertakan konten statis (setiap kali Anda memutuskan untuk menambahkannya) - karena hampir mustahil untuk dicapai (singkat memiliki sedikit atau tidak ada gambar / js / css).

Kami datang pada 800ms.
Ini juga dijalankan pada Nginx dengan Varnish

Anda mengonfigurasi Varnish salah.

Instalasi Varnish yang dikonfigurasikan dengan benar akan memberikan waktu pemuatan halaman <100ms (kita lihat lebih dekat dengan <10ms).

Bahkan, untuk Magento, Anda harus berharap untuk melihat sesuatu seperti ini,

Ketika seorang pelanggan tidak masuk ...
Yaitu. Tidak membuat sesi unik (add-to-cart / wishlist, login, dll.)

--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
  Uncached    Mage default cache   Partial FPC cache   Total FPC cache   Varnish

Ketika seorang pelanggan masuk ...
Yaitu. Setelah membuat sesi unik (masuk, item dalam kereta, dll.). Pada titik ini Varnish kemungkinan besar akan mati. Dan jika Anda memilih untuk menggunakan ESI - tergantung pada panggilan balik, ini dapat mempertahankan waktu pemuatan halaman yang serupa dengan cache FPC (karena overhead bootstrap) - atau benar-benar meningkatkan waktu pemuatan halaman di luar ketidakterbatasan.

--1.4s--------0.8s-----------------0.6s--------------
  Uncached    Mage default cache   Total FPC cache   

Ini bukan kasus tuning Varnish - ini kasus - "Anda tidak benar-benar caching sama sekali" .


File konfigurasi server Magento yang ideal

Tidak ada satu, well, tidak cukup.

Kami mengoperasikan lebih dari 400 server, semuanya murni toko Magento - dengan berbagai ukuran dan kapasitas. Dan jarang file konfigurasi yang kita miliki di satu - akan cocok dengan yang lain. Itu karena tidak semua bisnis sama.

Kemacetan dapat terbentuk karena berbagai alasan:

  1. Banyaknya konkurensi pengunjung, dengan sesi aktif
  2. Korban bot perayapan 'buruk', menghasilkan muatan yang diperlukan dan tidak berharga
  3. Proporsi tinggi dari klik navigasi berlapis
  4. Jumlah kueri penelusuran yang tinggi
  5. Volume transaksi yang tinggi per jam
  6. Templat yang dibangun dengan buruk
  7. Terlalu banyak / lambat / ekstensi pihak ke-3 yang besar
  8. Tautan masuk yang kedaluwarsa mengarah ke proporsi tinggi dari 404 hit
  9. Kapasitas antarmuka jaringan pada batas
  10. Katalog besar / kompleks (banyak produk / kategori / atribut)

Jadi dengan toko-toko di seluruh spektrum ini, masing-masing memiliki pendekatan yang berbeda untuk kinerja yang lebih optimal.

Untuk memecahkan masalah yang diuraikan di atas; kami akan dengan sengaja menghindari hanya menyatakan "perangkat keras yang lebih baik"

  1. Gunakan FPC di luar Varnish
  2. Memfilter / memblokir bot buruk di tepi jaringan - atau mengalihkan semua permintaan ke Varnish terlepas dari keadaan cookie / URL
  3. Ubah navigasi persediaan berlapis menjadi SOLR, buat filter navigasi berlapis bergantung
  4. Ubah pencarian stok ke SOLR
  5. Mendistribusikan beban MySQL di konfigurasi Master / Slave - hanya lakukan ini ketika Anda telah memastikan bahwa beban penelusuran diserap oleh Varnish / FPC
  6. Bangun kembali templat
  7. Lepaskan mereka
  8. Pantau log akses secara terus menerus dan tulis ulang URL di Nginx / Varnish sebelum pengiriman. Jika melakukannya di level Nginx - pastikan Varnish melakukan caching pengalihan 301/302.
  9. Pisahkan konten statis ke CDN, atau tingkatkan konektivitas
  10. Tambahkan lebih banyak perangkat keras (well, kami harus mengatakannya di beberapa titik)

Jadi dengan ini dalam pikiran - Anda akan melihat mungkin tidak akan ada file konfigurasi Nginx, file konfigurasi PHP fcgi pool, file konfigurasi MySQL atau file konfigurasi Varnish yang akan sama. Berpasangan dengan perubahan perangkat keras itu sendiri; memori yang tersedia, kinerja I / O (HDD dan Jaringan) dan CPU - dan Anda akan menemukan ada variasi halus yang mengarah pada peningkatan kinerja 400% yang Anda inginkan - tetapi tidak ada satu jawaban cepat yang siap Anda temukan secara online.

Anda dapat menyalin + menempelkan kertas putih Magento yang disponsori Peer 1 pada kinerja (kami tidak akan merekomendasikannya); berharap pengaturan tidak melebihi memori yang tersedia, batas utas, status TCP / IP, kapasitas I / O dan mengarah pada kinerja yang lebih rendah daripada konfigurasi vanilla Apache / mod_php.

Jadi mari kita lanjutkan.

Tumpukan server Magento yang ideal

Ini lebih cenderung membuat Anda lebih dekat dengan kenyataan. Contoh yang baik untuk menunjukkan ini adalah untuk menunjukkan bagaimana Magento OS khusus dikonfigurasi, MageStack

MageStack - Sistem Operasi Magento

Ambil sub-komponen yang terpisah dan Anda punya daftar perangkat lunak yang paling optimal / kritis, jika dikonfigurasi dengan benar , untuk menjalankan toko Magento. Terutama, khususnya, lebih-lebih:

Firewall, filter DOS, Load Balancer, Varnish, Nginx, PHP, Redis, Memcached, MySQL

Jadi ketika Anda bertanya:

Apa Pengaturan Server Magento Terbaik?

Apa tujuan Anda sebenarnya?

  1. Ketersediaan tinggi
  2. Keandalan
  3. Kesederhanaan administrasi
  4. Performa
  5. Skalabilitas

Cukup ceramah, bagaimana kita melakukannya

Untuk sebagian mencerminkan jawaban yang diberikan pada kesalahan server ke nada yang sama. Anda memiliki 3 server yang Anda inginkan - jadi pertama orientasikan mereka seoptimal mungkin. Kami akan menghindari solusi yang sangat tersedia karena jauh di luar cakupan jawaban ini.

Sub-komponen yang diperlukan untuk konfigurasi multi-server adalah:

  • Firewall
  • Load Balancer
  • Server Web
  • Server MySQL
  • Penyimpanan umum

Jadi kita akan multi-guna beberapa sistem. Kepatuhan PCI-DSS menentukan peran, untuk setiap server. Jadi dengan 5 peran dan 3 server - Anda akan segera ditembus. MageStack mengatasinya dengan menggunakan virtualisasi - Anda bisa melakukan hal yang sama.

Server 1: Load Balancer + Server web
Server 2: Server web
Server 3: Server database

Tanpa latensi rendah dan bandwidth jaringan yang signifikan (> 1Gbps, <125μs), daripada memiliki penyimpanan umum - lebih baik bagi Anda untuk hanya menyimpan direktori root store pada setiap mesin dan mereplikasi data, baik secara real-time menggunakan ionotifyatau murtad menggunakan sebuah cronpekerjaan. Sekali lagi, kami akan menghindari sistem file jaringan seperti NFS, atau perangkat blok yang direplikasi seperti Gluster atau DRBD - karena penyetelan luas dan bandwidth jaringan yang layak diperlukan.

Pernis harus duduk sedekat mungkin dengan bagian depan. Tetapi Varnish tidak dapat mendekripsi SSL. Jadi gabungkan dengan terminator SSL; Nginx, Pound, Stunnel, Stud, dll. Penyeimbang beban bawaan di Varnish tidak bagus - tetapi cukup untuk pengaturan 2 server.

Nginx + PHP-FPM baik-baik saja, tetapi jangan minum terlalu banyak bantuan kool Nginx. Ini akan melakukan hampir identik dengan konfigurasi Apache / mod_php tradisional, inilah beberapa bacaan yang baik tentang mengapa tidak menggunakan Nginx . Nginx bagus, memang sangat bagus, tetapi tentu saja itu bukan hambatan dari toko Magento - dan mengingat kompleksitasnya dan kurangnya dukungan Magento asli. Kebanyakan administrator sistem pemula akan mendapat manfaat dari menggunakan Apache / mod_php atas hal lain. Ini mungkin tampak seperti rekomendasi kuno menggunakan PHP-FPM - tetapi tes kinerja kami telah menunjukkan kinerja hanya ~ 7% lebih cepat dengan solusi Nginx - ketika dikonfigurasi dengan benar. Penyetelan dan pengalaman yang diperlukan untuk pengaturan Nginx / PHP-FPM yang berkinerja tinggi dan andal cukup luas untuk membuatnya mengungguli Apache / mod_php. Apa pun yang Anda pilih untuk digunakan, adalah panggilan Anda.

Server database sederhana, MySQL. Tetapi seperti yang disebutkan sebelumnya, jika Anda memiliki situs konversi tinggi, konfigurasi Master / Slave disarankan. Apakah Anda harus mengikuti pendekatan ini dapat ditentukan dengan membaca artikel ini .

Kemudian cache back-end perangkat Anda, Memcached dan Redis. Pada toko yang lebih kecil, menyimpan sesi dalam satu instance Memcache dan cache backend cepat di yang lain akan menghasilkan manfaat kinerja yang baik. Kami tidak menganjurkan menyimpan tag cache di backend lambat - karena menyebabkan lebih banyak masalah daripada yang diberikannya. Jadi dengan pengaturan Memcached, Anda harus kehilangan penandaan cache . Sebagai gantinya, kami menggunakan konfigurasi seperti ini .

Redis bukan asli dari Magento, tetapi dengan ekstensi dari Colin Mollenhour - ini adalah solusi yang lebih baik daripada Memcache, mendukung tag cache, penyimpanan sesi, dan bahkan penyimpanan cache persisten - ini tidak cukup volatile seperti Memcache . Tetapi memang ada kekurangannya. Kami telah menemukan di toko produksi skala besar (> 500 pesanan / jam,> 30rb uniques / jam) bahwa cache (dan tag) dapat terisi dengan sangat cepat dan begitu titik saturasi tercapai, mekanisme LRU agak gagal ( meskipun pengaturan berbeda) dan menyebabkan kemacetan langsung besar-besaran. Jadi bijaksana untuk memangkas secara teratur catatan lama secara manual.

Jadi perangkat keras apa yang harus digunakan untuk apa?

Server web: CPU Tercepat, sebagian besar inti CPU, rasio 2GB RAM / Core
DB server: CPU Cepat, I / O disk tercepat, sebagian besar RAM

Jadi ketika multi-purpose 3 mesin Anda, tata letak terbaik adalah:

Server 1: Terminator SSL -> Varnish -> Nginx / Apache> PHP
Server 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Server 3: MySQL

Mengenai konfigurasi spesifik dari setiap aplikasi. Nah, itu tergantung pada spesifikasi perangkat keras Anda, kompleksitas toko Anda, jenis dan sifat pengunjung Anda, dan banyaknya pengunjung.


Jawaban yang sangat menarik. FYI ada tautan yang terputus di: "Sebaliknya, kami menggunakan konfigurasi seperti ini."
JW.

1
@JW. - Darn link busuk. Saya telah memperbarui tautannya.
Ben Lessani - Sonassi

30

Anda berada di jalur yang bagus dengan konfigurasi kluster itu. Saya sarankan menambahkan host cache khusus untuk Redis; pilih satu dengan daya CPU tinggi dan banyak RAM (~ 64 GB).

Berikut daftar lengkap konfigurasi yang saya gunakan untuk kluster LEMP yang sangat tersedia, toleran terhadap kesalahan, didistribusikan, dan memuat. Ini termasuk app/etc/local.xml, core_config_datatabel, dan konfigurasi untuk MySQL, php-fpm, nginx, dan Redis. Semua menjalankan Ubuntu 12,04 LTS 64-bit. Konfigurasi mencakup banyak optimasi tanpa kelemahan.

Highlight

  • Pengguna admin: 46
  • Kategori: 2,450 (yang terbesar memiliki 2.400 produk)
  • Entitas produk: 101.000
  • Produk kombo: 484
  • Hubungan produk: 54.000
  • Tersedia dan mengaktifkan produk yang dapat dikonfigurasi: 10.100
  • Blok CMS: 3.100
  • Halaman CMS: 1.400

Lalu lintas Agustus 2013:

  • 40 juta tampilan halaman bulanan
  • 2,3 juta pengunjung unik
  • 46.000 checkout setiap bulan
  • 89% pengunjung dari AS

Host web

Ada 10 host di belakang redundan, firewall perangkat keras yang sangat tersedia, dan penyeimbang beban perangkat keras. Sebagian besar aset statis diturunkan ke CDN.

  • waktu respons rata-rata di seluruh situs: 282 ms
  • Rata-rata respons FPC: 48 ms
  • rata-rata beban: 0,6 hingga 1,0 (dalam pengujian, kinerja menurun 35% saat rata-rata beban mencapai ~ 5.0)
  • Dual Intel Xeon CPU E3-1230 V2 @ 3.30GHz (masing-masing 4 core)
  • 32 GB DDR3 1333 MHz RAM

Modul


Host cache

Ada dua host yang menjalankan Redis dalam konfigurasi master-slave dengan failover otomatis. Tiga contoh Redis (sesi, backend, dan FPC) digunakan untuk meningkatkan throughput dan memberikan penyesuaian perilaku persistensi.

  • 3.000 perintah per detik
  • 0,7 ms waktu respons rata-rata
  • rata-rata memuat 1,0 hingga 1,5
  • Quad Intel Xeon CPU E5-2620 0 @ 2.00GHz (masing-masing 6 core)
  • 128 GB DDR3 1333 MHz RAM yang disangga
  • Disk mekanis, RAID 1, pengontrol perangkat keras

Host basis data

Ada dua host yang menjalankan MySQL 5.6.11 dalam konfigurasi master-slave dengan failover hangat.

  • 1.500 perintah per detik
  • 1,1 ms waktu respons rata-rata
  • rata-rata beban 0,1 (master) dan 0,4 (budak)
  • Quad Intel Xeon CPU E7- 2860 @ 2.27GHz (masing-masing 10 core)
  • 128 GB DDR3 1333 MHz RAM yang disangga
  • SSD, RAID 1 + 0, pengontrol perangkat keras
  • MySQL 5.6.11 dengan tcmalloc

Menjadi Redis adalah single-threaded bukankah host cache Anda sedikit lebih bertenaga dengan CPU quad hexa-core? Juga, mengapa rata-rata beban budak Anda lebih tinggi dari rata-rata beban master?
ColinM

@ColinM: Saya tidak membeli server; ya, sudah lebih bertenaga! Budak digunakan untuk koneksi baca Magento, sehingga tidak hanya mengikuti penulisan master, tetapi juga melayani banyak utas baca.
parhamr


0

Saya ingin menambahkan tip penting lainnya yang meningkatkan kecepatan halaman Magento ketika tidak di-cache oleh pernis dan tidak diaktifkan secara default (waktu pemuatan halaman keranjang berubah dari 6sc menjadi 1.5sc).

Aktifkan cache kueri mysql di /etc/mysql/my.conf

query_cache_size = 268435456
query_cache_type= 1
query_cache_limit=1048576

cache_type mengaktifkannya, ukuran cache adalah nilai yang digunakan oleh cache di memori dan batas cache adalah ukuran maksimum hasil kueri ke cache


-2

Dengan konfigurasi kami saat ini, kami menerima respons awal dalam 400 ms dan dokumen lengkap dalam 2 detik (menggunakan koneksi standar 5mbps). Ukuran beranda kami adalah 1mb.

Setup kami didasarkan pada AWS sebagai berikut: Kami memiliki instance EC2 dengan penyeimbang beban yang terhubung ke database RDS (dengan failover). Kami juga telah menerapkan cache halaman penuh dengan backend cache redis untuk penyimpanan cache dan penyimpanan sesi.

Rata-rata kami memiliki 300 - 400 pengunjung sehari tetapi dengan redis caching diaktifkan, kami memiliki penggunaan sumber daya EC2 minimal sambil mempertahankan kecepatan dan menurunkan biaya.

Alasan kami memiliki penyeimbang beban adalah karena EC2 disetel untuk secara otomatis mem-boot instance baru jika pada kesempatan langka kami memiliki lonjakan lalu lintas yang tidak dapat ditangani oleh pengaturan saat ini.


Hanya untuk menambah manfaat menggunakan Elastic Load Balancer di AWS - Anda dapat membongkar koneksi SSL Anda dengan itu dan tidak perlu khawatir tentang kebanyakan patch kerentanan OpenSSL yang harus terus Anda terapkan pada instance EC2 Anda jika Anda mengelola sendiri
Robbie Averill
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.