Isıracağım.
Bu web sunucusundan ilk yanıtın İngiltere'de 200ms'in altında gelmesi gerekiyor
. Şu anda sitenin ön yüzü yok, stilsiz ve görselsiz.
Varnish ya da FPC'nin (ya da her ikisinin) yardımı olmadan bu rakamları elde edemezsiniz. Umarim ki bu rakam da statik içerik (eklemek istediğinize karar verdiğinizde) - elde etmek neredeyse imkansız (resim / js / css az olması yetersizdir) içermesi gerekmez.
800ms'de geliyoruz
Ayrıca Nginx'te Varnish ile çalıştırılıyor.
Varnish yanlış yapılandırılmış.
Düzgün bir şekilde yapılandırılmış Varnish kurulumu <100ms sayfa yükleme süresi sağlar (<10ms'ye yakın görüyoruz).
Aslında, Magento için böyle bir şey görmeyi beklemelisin.
Bir müşteri giriş yapmadığında ...
Yani. Benzersiz bir oturum oluşturmadı (sepete ekle / dilek listesi, oturum açma vb.)
--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
Uncached Mage default cache Partial FPC cache Total FPC cache Varnish
Bir müşteri giriş yaptığında ...
Yani. Benzersiz bir oturum oluşturduktan sonra (giriş yapmış, alışveriş sepetindeki öğeler vb.). Bu noktada Varnish muhtemelen kapalı olacak. Ve eğer ESI'leri kullanmayı seçtiyseniz - ters çağrılara bağlı olarak, FPC önbelleği ile aynı sayfa yükleme süresini koruyabilir (önyükleme ek yükleri nedeniyle) - veya sayfa önbelleklemenin ötesinde sayfa yükleme süresini artırabilir.
--1.4s--------0.8s-----------------0.6s--------------
Uncached Mage default cache Total FPC cache
Varnish'i ayarlama durumu değil - bu bir durumdur - "aslında hiçbir şey önbelleğe almıyorsunuz" .
İdeal Magento sunucusu yapılandırma dosyaları
Bir tane yok, peki, tam değil.
Tamamı Magento mağazalarında - değişen boyutlarda ve kapasitelerde 400'ün üzerinde sunucu kullanıyoruz. Ve bir tanesine sahip olduğumuz yapılandırma dosyalarının bir başkasınınkiyle aynı olması nadirdir. Çünkü tüm işletmeler aynı değildir.
Darboğazlar birçok farklı nedenden ötürü oluşabilir:
- Aktif oturumlarla birlikte çok sayıda ziyaretçi eşzamanlılığı
- 'Kötü' tarama botlarının kurbanları, gerekli, paha biçilmez yük üretiyor
- Katmanlı navigasyon isabetlerinin yüksek oranı
- Çok sayıda arama sorgusu
- Saat başına yüksek işlem hacmi
- Zayıf yapılı şablon
- Çok fazla / yavaş / hantal 3. parti uzantıları
- 404 hit oranının yüksek olmasına neden olan eski gelen bağlantılar
- Ağ arayüz kapasitesi sınırlıdır
- Büyük / karmaşık katalog (birçok ürün / kategori / özellik)
Böylece tüm bu spektrumdaki mağazalarda, her birinin daha optimum performans için farklı bir yaklaşımı var.
Yukarıda belirtilen sorunları çözmek için; kasıtlı olarak sadece "daha fazla / daha iyi donanım" belirtmekten kaçınacağız
- Vernik'in ötesinde bir FPC kullanın
- Ağ kenarındaki bozuk botları filtreleyin / engelleyin - veya çerez durum / URL ne olursa olsun tüm isteklerinizi Vernik'e yönlendirin
- Stok katmanlı gezinmeyi SOLR olarak değiştirin, katmanlı gezinme filtrelerini bağımlı hale getirin
- Stok aramasını SOLR olarak değiştir
- MySQL yükünü Master / Slave yapılandırmasına dağıtın - yalnızca tarama yükünün Varnish / FPC tarafından emildiğini garanti ettiğinizde yapın
- Şablonu yeniden oluştur
- Onları çıkar
- Erişim günlüklerini sürekli izleyin ve teslimattan önce Nginx / Varnish'te URL'leri yeniden yazın. Nginx düzeyinde yapıyorsanız - Vernik'in 301/302 yönlendirmelerini önbelleğe aldığından emin olun.
- Statik içeriği bir CDN'ye bölme veya bağlantıyı iyileştirme
- Daha fazla donanım ekleyin (bir noktada söylemek zorunda kaldık)
Yani bu akılda tutulacak - muhtemelen aynı olacak olan bir Nginx yapılandırma dosyası, PHP fcgi havuzu yapılandırma dosyası, MySQL yapılandırma dosyası veya Vernik yapılandırma dosyası olmayacağını göreceksiniz. Donanımla kendisini değiştiren çift; kullanılabilir bellek, G / Ç performansı (HDD ve Ağ) ve CPU - ve istediğiniz 400% performans kazancına neden olan ince varyasyonlar olduğunu göreceksiniz - ancak çevrimiçi olarak kolayca bulamayacağınız hızlı bir cevap yok.
Peer 1 sponsorluğundaki Peer 1 sponsorlu Magento tanıtım kağıdını kopyalayıp yapıştırabilirsiniz (tavsiye etmiyoruz); ayarların kullanılabilir hafızanızı, iş parçacığı sınırlarınızı, TCP / IP durumlarını, G / Ç kapasitesini aşmadığını ve vanilya Apache / mod_php yapılandırmasından daha düşük performans göstereceğini umuyoruz.
Öyleyse devam edelim.
İdeal Magento sunucu yığını
Bu sizi gerçeğe yaklaştırmak için daha olasıdır. Bunu göstermek için iyi bir örnek, özel bir Magento OS'nin nasıl yapılandırıldığını göstermektir, MageStack
Ayrı alt bileşenleri alın ve Magento mağazasını çalıştırmak için uygun şekilde yapılandırıldığında en uygun / kritik yazılımların bir listesini elde edin . Özellikle:
Güvenlik Duvarı, DOS filtresi, Yük Dengeleyici, Vernik, Nginx, PHP, Redis, Memcached, MySQL
Peki sorduğun zaman:
En İyi Magento Sunucu Kurulumu nedir?
Hedefin tam olarak nedir?
- Yüksek kullanılabilirlik
- Güvenilirlik
- İdarenin basitliği
- Verim
- Ölçeklenebilirlik
Yeterince ders anlatıyor, nasıl yaparız?
Sunucu arızasında verilen cevabı kısmen benzer bir damarı yansıtmak için . Hizmetinizde olan 3 sunucunuz var - bu yüzden ilk önce onları mümkün olan en iyi şekilde yönlendirin. Bu cevabın kapsamı çok ötesinde olduğu için yüksek düzeyde kullanılabilir bir çözümden kaçınacağız.
Çok sunucu yapılandırması için gerekli alt bileşenler şunlardır:
- Firewall
- Yük dengeleyici
- Web sunucusu
- MySQL Sunucusu
- Ortak depolama
Bu yüzden bazı sistemlerde çok amaçlı olacağız. PCI-DSS uyumluluğu, her sunucu için bir rol belirler. Böylece 5 rol ve 3 sunucu ile derhal ihlal edilirsiniz. MageStack bunu sanallaştırma kullanarak halleder - siz de aynısını yapabilirsiniz.
Sunucu 1: Yük Dengeleyici + Web sunucusu
Sunucu 2: Web sunucusu
Sunucu 3: Veritabanı sunucusu
Düşük gecikmeli ve anlamlı ağ bant genişliği (> 1 Gbps, <125μs) olmadan, ortak depolama sahip ziyade - sen sadece her makinede mağaza kök dizini depolamak ve verileri çoğaltmak, ya gerçek zamanlı olarak kullanmanın için onun daha iyi ionotify
kullanarak veya süresi doldu bir cron
iş. Yine, NFS gibi ağ dosya sistemlerinden veya Gluster veya DRBD gibi çoğaltılmış blok cihazlardan kaçınacağız - engin ayar ve uygun ağ bant genişliği gerekli.
Vernik, mümkün olduğu kadar cepheye yakın oturmalıdır. Ancak Vernik, SSL şifresini çözemez. Yani bir SSL sonlandırıcı ile birleştirin; Nginx, Pound, Stunnel, Stud vs. Varnish'te yerleşik yük dengeleyici mükemmel değil - ancak 2 sunucu kurulumu için yeterli olacaktır.
Nginx + PHP-FPM iyidir, ancak Nginx kool yardımının çok içmeyin. Geleneksel bir Apache / mod_php konfigürasyonunda neredeyse aynı şekilde çalışacaktır, Nginx'i neden kullanmama konusunda iyi bir okuma . Nginx iyidir, çok iyi bir infact, ancak kesinlikle bir Magento mağazasının darboğazı değil - ve karmaşıklığı ve yerli Magento desteğinin olmaması. Acemi sistem yöneticilerinin çoğu Apache / mod_php kullanmaktan başka bir şey yapmaz. Bu, PHP-FPM kullanımına ilişkin eski bir öneri gibi görünebilir - ancak performans testlerimiz Nginx çözümüyle performansın sadece ~% 7 daha hızlı olduğunu göstermiştir - uygun şekilde yapılandırıldığında. Yüksek performanslı, güvenilir bir Nginx / PHP-FPM kurulumu için gerekli ayarlama ve deneyim, Apache / mod_php'den daha iyi performans göstermesi için oldukça geniştir. Hangisini kullanmayı seçerseniz seçin.
Veri tabanı sunucusu basittir, MySQL. Ancak daha önce de belirtildiği gibi, yüksek dönüşüm oranlı bir siteniz varsa, Master / Slave yapılandırması önerilir. Bu yaklaşımı takip edip etmemeniz bu makaleyi okuyarak belirlenebilir .
Sonra periferik arka uç önbellekleriniz Memcached ve Redis. Küçük mağazalarda, oturumları bir Memcache örneğinde ve hızlı arka uç önbelleğini başka bir yerde depolamak iyi performans avantajları sağlar. Önbellek etiketlerini yavaş arka uçta saklamayı savunmuyoruz - çünkü verdiğinden daha fazla soruna neden oluyor. Bu nedenle Memcached kurulumunda önbellek etiketlemekten vazgeçmeniz gerekir . Bunun yerine, böyle bir yapılandırmayı kullanmak bu .
Redis, Magento'ya özgü değildir, ancak Memcache'den daha iyi bir çözüm olan Colin Mollenhour'un uzantısı ile, önbellek etiketlerini, oturum depolamayı ve hatta kalıcı önbellek depolamasını destekler - Memcache kadar uçucu değildir . Ancak sakıncaları var. Biz üzerinde bulduk büyük ölçekli , LRU mekanizması biraz başarısız üretim mağazalarında (> 500 siparişler / saat,> 30 k benzersizler / saat) doygunluk noktası vuruldu kez önbellek (ve etiketleri) çok hızlı bir şekilde doldurmak ve ki ( farklı ortamlara rağmen) ve büyük bir acil tıkanıklığa neden olur. Bu yüzden düzenli olarak eski kayıtları manuel olarak budamak akıllıca olur.
Peki hangi donanım ne için kullanılmalı?
Web sunucuları: En hızlı CPU, en fazla CPU çekirdeği, 2GB RAM / Çekirdek
DB sunucusu oranı : Hızlı CPU, en hızlı disk G / Ç, en çok RAM
Bu nedenle, 3 makinenizi çoklu kullanımda, en iyi düzen şöyle olacaktır:
Sunucu 1: SSL Terminator -> Vernik -> Nginx / Apache> PHP
Sunucu 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Sunucu 3: MySQL
Her uygulamanın özel yapılandırmasına gelince. Bu, sizin donanımınızın özelliklerine, mağaza karmaşıklığınıza, ziyaretçinin türüne ve doğasına ve ziyaretçilerin gerçek hacmine bağlıdır.