Ölçeklendirme ve ayarlama performansında gerçek dünya deneyimi


54

Çalıştığım web sitesinin lansmandan hemen sonra büyük bir isabet oranı olacağı iddia ediliyor . Müşteri, bir gün boyunca saniyede yaklaşık 2500 vuruş ihtimalinden bahsediyor.

Bu isabet oranının muhtemelen vahşi bir müşteri iyimserliği olduğu ve mümkün olan en büyük sunucuları elde etmenin yanı sıra, Drupal'ın büyük bir isabet oranını destekleyecek şekilde yapılandırılması gereken en iyi yol ne olabilir.

Drupal.org Altyapısını , Drupal performans blogunu , Drupal'ı ve diğer birçok sayfayı Ölçeklendirmek için En İyi Uygulamalar'ı ölçeklendirmeyi okudum , ancak aradığım şey bunun gerçek deneyim, neyin işe yarayıp neyin yaramadığını bekliyoruz.

Yanıtlar:


47

Markdorison'un cevabı temelde bu soruna saldırmanın kabul edilen yöntemidir. Bunu biraz daha ileri götüreceğim.

Eğer varsa Pressflow D7, Memcached ve için D6 veya Drupal için Varnish tüm güzel çalışma birlikte özel koduyla gerekir VCL dosyasını. Başlangıç ​​noktaları belirten ücretsiz olanlar var ama her zaman onlarla oynamak zorundasın.

Varnish'in en iyi şekilde çalışmasını sağlamak için -s dosyasının / yolunun / dosyalarının varsayılanı yerine -s malloc xG ile başladığınızdan emin olun. Ayrıca Varnish ile mümkün olduğunca uzun süre Varnish önbellek statik öğeleri var.

Birden fazla web sunucunuz varsa, ETag'yi VCL'deki Vernik'e gönderilen başlıktan çıkarın. Ayrıca Expires'ı kaldırdım ve basitçe başlıklara yaslanıp yaşlanmaya güveniyorum, böylece tarayıcıları siteye geri getiriyorum.

Versiyon 1.5 (3 Mart 2011 itibariyle) hala Drupal.org'daki Memcached modülünün en hızlı versiyonudur. Genellikle tcp trafiğini daha büyük ölçekte birden fazla kutuya bağlamak üzere azaltmak için her sunucu için tek bir kutu kullanarak dağıtırım)

"Performance" içindeki önbelleği dışa yapılandırın ve doğru başlıkları Varnish gibi bir önbellek proxy'sine gönderecek bir maksimum yaş ayarlayın.

Varnish'te bazı sayfaların düzgün önbelleğe alınmasını sağlayamazsanız, isteklerin nasıl denetleneceğini ayrıntılarıyla anlatan web'deki blog gönderilerini inceleyin. İşte size bir süre önce yazdığım örnek bir yazı: Varnish ve Drupal Pressflow'un adsız kullanıcıları sayfa görünümlerini önbelleğe almasını engelleyen şey nedir?

MySQL için InnoDB (veya XtraDB gibi diğer sağlayıcılardan gelen diğer isimlerden birini) seçmeli ve tüm tabloları bu yere taşımalısınız. Ardından, temel ayar önerileri için bu blog gönderisine bakın: http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

Büyük bir tampon havuzuna sahip olmak temel olarak önemlidir. Siteyi yük test ederken yavaş sorgu günlüğünü açın. Muhtemelen ilk önce 50msn'den daha uzun süren sorguları yakalamak, ardından sorguları ayarlamak ve dizinleri kullanarak çalışan ve oldukça hızlı bir şekilde yürüten çoğu sorgulayana kadar yavaş günlük yakalama süresini kısaltın.

Diğer temel bilgiler PHP için APC'ye sahip olmaktır . Mod_php yerine hızlı CGI kullanmaya başlarsanız, APC önbelleğini php örnekleri arasında iyi bir sarmalayıcı komut dosyası kullanarak paylaşılan hale getirmek için biraz zaman harcarsınız. Ayrıca, APC önbelleğinin PHP'nin her bir bitini sıkmak için hafızaya eşlenmiş bir dosyada olduğundan emin olun.


"Mod_php yerine hızlı CGI'ya giderseniz, APC önbelleğini php örnekleri arasında iyi bir sarmalayıcı komut dosyasıyla paylaşarak paylaşmaya çalışırken biraz zaman harcarsınız. Ayrıca APC önbelleğinin her bitini sıkıştırmak için bellek eşlemeli bir dosyada olduğundan emin olun. PHP dışı. " : Tamam, nasıl yapılır? Teşekkürler
john


23

Pressflow (Drupal 6 kullanıyorsanız), Memcache , Varnish ve Akamai gibi bir tür İçerik Dağıtım Ağı (CDN) ile başlamanızı öneririm . Sonuç, orijinalleki sunucunuza ulaşan mümkün olduğunca az sayıda kullanıcı olmalıdır.

Sayfanın anonim olmayan kullanıcılar için önbelleğe alamayacağınız bölümleri (bu kullanıcıya özel olan şeyler, "Hoş Geldiniz userX" vb.) Varsa, sayfanın asenkron gibi bu sayfalarını doldurma seçeneklerini keşfedebilirsiniz. geri aramalar veya kenar tarafı içerir.

Sitenin önbelleğe alınmamış bir sürümünü görüntüleyebilecek küçük bir iç kullanıcı grubuna (örneğin bir düzenleyici grubu) sahipseniz, sitenizin önbelleğe alınmamış bir sürümünü farklı bir URL’de (VPN’in arkasında korunan) gösterilmesini tavsiye ederim. veya mümkünse eşdeğeri).


Richard: Benim için zevkti. Takip eden herhangi bir sorunuz varsa bana bildirin.
markdorison

16

Bir günde saniyede 2500 hit - "vurmak" derken "sayfanın teslim edilmesini" istiyorsan, bu günde 216 milyon sayfa olur. Size şunu söyleyeyim: Günde 216 milyon sayfa yok. Bu müşterileri seviyorum.

Bununla birlikte, ham trafik verileri hiçbir şey söylemez. Bu konudaki tavsiyeler Varnish / CDN hakkında sağlam olsa da, tüm anonim trafiğiniz varsa, ancak trafiğe giriş yaptıysanız, bir zorlukla karşı karşıya kalırsınız. Ama zaman ve bir sorunu çözmek için çaba dinsiz miktarda harcama önce, emin olun var bir sorun. Saniyede 2500 vuruş, Bing bundan daha az alır, bunu anlıyorsun, değil mi?


2
2500 / sn, hepimizin çılgınca bir tahmin olduğunu düşündüğümüzü temel alan müşterinin sayılarıydı; Tüm devam etmem gereken buydu. Görünen o ki lansman, beklenenden çok başarılı olmadı, umdukları kadar garip bir şekilde gerçekleşti ve gerçek oran, günlük ortalama olarak, ortalama olarak 10 dakika süreyle saniyede 20 (sayfa) hızında zirve yaptı. 7,32 sayfa / sn .....
Richard Harrison

7
  • Sunucu tarafı

    • Adsız kullanıcılar için sayfaları önbelleğe almak için Varnish uygulamasını yükleyin.
    • Kalıcı bir önbellek sistemi kurun (Memcached, APC, Memcache).
    • Statik dosyalar (JavaScript, CSS, görüntüler) sunmak için Akamai gibi bir CDN kullanın.
  • Kod tarafı

    • Pressflow'u kullanın, Varnish'in adsız kullanıcılar için önbelleklenmiş sayfa sunmasını sağlar.
    • Drupal'ın bekçi köpeği masasını temizle. Bir bekçi uygulaması hatası her kaydedildiğinde, web sunucusu ve veritabanı sunucusundaki CPU kaynaklarını tüketir. Ayrıca yükleme süresini önemli ölçüde arttırır.
    • Uygulamak statik ve kalıcı önbellek yavaş sorgu günlük temiz doğana kadar stratejiler.
    • Her ne pahasına olursa olsun iç içe foreach döngülerinde meydana gelen PHP hatalarından kaçının.
    • Kullanılmayan modülleri kaldırın.
    • Drupal çekirdek blokları ve Görünümleri için önbelleklemeyi açın.
  • Veritabanı

    • Tabloların daha hızlı arama için doğru şekilde dizine alındığından emin olun.
    • Gereksiz kayıtları saklamayın, 100 düğüm veritabanına her zaman 3 milyon düğüm veritabanından daha hızlı erişilir.


4

Trafik seviyeleri hakkında adil bir fikriniz varsa, kalıpları tahmin etmek çok zor olsa da. Çözümünüzü test edin. Çok sayıda farklı seçenek var ve canlı trafiğiniz olana kadar tahmin etmek pek mümkün olmayacak, ancak mümkün olduğu kadar test yüklerseniz en azından kurulumunuzun trafiği kaldırabileceğine dair makul bir güveniniz olacak.

Dünyadaki tüm ayarlar, ilk önce test etmezseniz yardımcı olmaz.

Bu, DC SF'de ekonomistin nasıl yaptığıyla ilgili bir sunumdu. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder


Sunuma bağlantı gerçekten çok yararlıdır. Teşekkürler
Richard Harrison

4

Yüksek trafikli web siteleri için birden çok sunucu kullanmalı ve dengeleyici yüklemeli ya da sadece CDN kullanmalısınız. Ayrıca, web sunucularındaki yükü en aza indirmek için mümkün olduğunca önbelleklemek çok önemlidir.

İçerik Dağıtım Ağı'nı ( CDN ) kullanmak , kaynakları web sunucusundaki yükü azaltan çeşitli alanlara (etki alanı paylaşma) yaymaya yardımcı olur.

CDN kullanımı, dağıtılmış önbellekleme ve uzaktan ivmelenmeye yardımcı olur, ayrıca birden fazla son nokta nedeniyle DDoS saldırılarını azaltmaya yardımcı olur . Güvenliğe yardımcı olur, çünkü önbelleğe alınmış içeriğin kullanılması daha zordur.

Örnek sağlayıcılar: Hızla , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon.

İşte size birkaç öneri:

Böylece web mimariniz kullanıcı bakış açısından şöyle görünebilir:

  1. Kullanıcı (yerel tarayıcı önbelleğe alma).
  2. NGINX veya Pound + Varnish (yük dengeleyici, HTTP hızlandırıcısı olarak ters vekil).
  3. Apache (web sunucusu).
  4. PHP-FPM (PHP FastCGI İşlem Yöneticisi).
  5. MariaDB (veritabanı).

Drupal optimizasyonu önerisi için, şunları kontrol edin: Drupal performansını nasıl geliştirirsiniz?


1

İki uzantıyı etkinleştir:

  • Zend OPcache
  • WinCache

Performansınız daha iyi çalışacak.

Microsoft Azure'da Zend OPcache ve Wincache'i dalmak istiyorsanız, ilk önce ' ini' altında ' D:\home\site\' bir klasör adı oluşturun . Ayrıca, ' .user.ini' ve ' settings.ini' olmak üzere 2 dosya oluşturun

Her dosyaya aşağıdaki konfigürasyonu ekleyin:

.user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

Ayrıca, Web Uygulamanıza anahtar PHP_INI_SCAN_DIR ve değer içeren bir Uygulama Ayarı ekleyin d:\home\site\ini

PHP_INI_SYSTEM değiştirdikten sonra web uygulamanızı yeniden başlatın. Twigging yapılandırması hakkında daha fazla bilgi edinmek için, lütfen Microsoft belgelerine bakın .

Yukarıdaki ayardan sonra, Drupal (Drupal 8.3) sitem 3 saniye içinde yüklendi.


0

Ayrıca, DNS tabanlı veya yazılım / donanım yükü dengeleme çözümü yardımıyla yükün birden fazla sunucu üzerinden yeniden dağıtılmasını da inceleyebilirsiniz. Bu aynı zamanda hata toleransı içinde olacaktır.


Bu, bunun nasıl başarılacağına yönelik olmadığı için iyi bir cevap değildir. OQ'da belirtildiği gibi, peşimde olduğum ölçeklemenin gerçek dünya deneyimi.
Richard Harrison

Karar verebilecek güçler işte drupal olarak çalışabilirsek, o zaman donanım ve konfigürasyonumuzu anlatan 5+ sayfalık blog yazısını sağlamaktan memnuniyet duyarım.
James Stallings

Mükemmel. Yararlı bir referans olabilir. Yine de yayınla ...
Richard Harrison

Anahatınızı yeniden yayınlamak için izin aldınız mı?
Richard Harrison
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.