web-gelistirme-sc.com

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

Çalıştığım web sitesinin büyük bir isabet oranına sahip olacağı iddia ediliyor lansmandan hemen sonra. Müşteri, bir gün içinde saniyede yaklaşık 2500 vuruş olasılığı hakkında konuşuyor.

Bu isabet oranının muhtemelen vahşi istemci iyimserliği olduğunu ve mümkün olan en büyük sunucuları elde etmenin dışında, Drupal büyük bir isabet oranını destekleyecek şekilde yapılandırılması gereken en iyi yol nedir?.

Ölçeklendirme drupal.org Altyapısı , Drupal performans blog , Drupal Ölçekleme için En İyi Uygulamalar ve diğer birçok sayfayı okudum. m, bunu yapma, neyin işe yarayıp neyin yaramadığını ve ne bekleyeceğini gerçek bir deneyim.

52

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

D6 için Pressflow veya Drupal D7 için, Memcached ve Vernik birlikte güzelce çalıştığınızda, özel kodunuzu girmeniz gerekir - VCL dosya Başlangıç ​​noktaları yapan ücretsiz olanlar var, ancak her zaman onlarla oynamanız gerekiyor.

Varnish'in en iyi şekilde çalışmasını sağlamak için, -s file/path/to/file varsayılan yerine -s malloc xG ile başlattığınızdan emin olun. Ayrıca Vernik ile Varnish önbellek statik öğeleri olabildiğince uzun süre var.

Birden fazla web sunucunuz varsa, ETAG'ı VCL'de Varnish'e gönderilen başlıktan kaldırın. Ayrıca, Expires'ı kaldırıyorum ve başlıklarda Yaş ve maksimum yaş'a güveniyorum, böylece tarayıcıları siteye geri getirin.

Sürüm 1.5 (3 Mart 2011 itibariyle), Drupal.org'dan Memcached modülünün en hızlı sürümüdür. Genellikle büyük ölçekte birden çok bölmeye bağlantılar için tcp trafiğini azaltmak için sunucu başına tek bir bölme kullanarak dağıtırım)

"Performans" daki önbelleği harici olarak yapılandırın ve Vernik gibi bir önbellek proxy'sine doğru başlıkları gönderecek bir maksimum yaş ayarlayın.

Belirli sayfaların Vernik'te düzgün bir şekilde önbelleğe alınmasını sağlayamıyorsanız, web'deki istekleri nasıl inceleyeceğinize dair blog yayınlarına bakın. İşte bir süre önce yazdığım örnek bir yazı: Vernik ve Drupal Anonim kullanıcıların sayfa görüntülemelerini önbelleğe almanın basın akışı) nedir

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

Geniş bir tampon havuzuna sahip olmak temelde önemlidir. Yükleme testi yaparken site yavaş sorgu günlüğünü açın. Muhtemelen ilk olarak 50msn'den uzun süren sorguları yakalamak ve ardından sorguları ayarlamak ve dizinleri kullanarak çalışan ve oldukça hızlı bir şekilde yürüten sorguların çoğunu elde edene kadar yavaş günlük yakalama süresini tekrar tekrar azaltmak istersiniz.

Diğer temeller PHP için APC içeriyor. Mod_php yerine hızlı CGI için giderseniz, iyi bir sarmalayıcı komut dosyası yapılandırarak APC önbelleğinin php örnekleri arasında paylaşılmasını sağlamaya çalışın. Ayrıca, APC önbelleğinin PHP'nin son her bitini sıkıştırmak için bellek eşlemeli bir dosyada olduğundan emin olun.

45

Pressflow (Drupal 6), Memcache , Vernik ve bazı formlarla başlamayı öneririm Akamai gibi İçerik Dağıtım Ağı'nın (CDN) sonucu, sonuç olarak Origin sunucunuza gerçekten mümkün olduğunca az kullanıcı olmalıdır.

Sayfanın anonim olmayan kullanıcılar için önbelleğe alamadığınız bölümleri varsa (bu kullanıcıya özgü şeyler, "Hoşgeldin userX" vb.), Sayfanın bu bölümlerini eşzamansız gibi 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üleyebilmesi gereken daha küçük bir dahili kullanıcı grubunuz (bir grup düzenleyici gibi) varsa, sitenizin önbelleğe alınmamış bir sürümünü farklı bir URL'de (VPN arkasında korunan) göstermenizi öneririm veya mümkünse eşdeğeri).

22
markdorison

Günde saniyede 2500 isabet - "isabet" ile "sayfa teslim edildi" demek, günde 216 milyon sayfa demektir. Size şunu söyleyeyim: günde 216 milyon sayfanız yok. Bu müşterileri seviyorum ...

Bununla birlikte, ham trafik verileri hiçbir şey söylemez. Bu konudaki öneri Varnish/CDN hakkında sesli olsa da, anonim trafik varsa, ancak trafikte oturum açtıysanız, bir meydan okuma ile karşı karşıyasınız. Ancak bir sorunu çözmek için gereksiz miktarda zaman ve çaba harcamadan önce, bir sorun olduğundan emin olun. Saniyede 2500 vuruş, bing bundan daha az oluyor, bunu anlıyorsunuz, değil mi?

15
user49
  • Sunucu tarafı

    • Anonim kullanıcılar için sayfaları önbelleğe almak için Vernik yükleyin.
    • Kalıcı bir önbellek sistemi yükleyin (Memcached, APC, Memcache).
    • Statik dosyalar (JavaScript, CSS, resimler) sunmak için Akamai gibi bir CDN kullanın.
  • Kod Tarafı

    • Pressflow'u kullanın, Varnish'in anonim kullanıcılar için önbelleğe alınmış sayfa sunmasına izin verir.
    • Drupal'ın bekçi masasını temizleyin. Bir bekçi köpeği hatası her kaydedildiğinde, web sunucusundaki ve veritabanı sunucusundaki CPU kaynaklarını tüketir. Ayrıca yükleme süresini önemli ölçüde artırır.
    • Yavaş sorgu günlüğü temizlenene kadar statik ve kalıcı önbellek stratejileri uygulayın.
    • PHP hatalarından kaçının.
    • Kullanılmayan modülleri kaldırın.
    • Drupal temel bloklar ve Görünümler için önbellekleme özelliğini açın.
  • Veritabanı

    • Daha hızlı arama için tabloların uygun şekilde dizine eklendiğinden emin olun.
    • Gereksiz kayıtları saklamayın, 100 düğümlü bir veritabanına her zaman 3 milyon düğümlü veritabanından daha hızlı erişilir.
6
amateur barista

Bu Lullabot podcast'ini bir hafta boyunca trafik patlaması için Grammys.com web sitesini kurma biçimleri hakkında da dinlerdim. Oldukça eğitici bir açıklama oldu.

http://www.lullabot.com/podcasts/podcast-92-grammycom

5
Randy Burgess

Yüksek trafikli web siteleri için birden çok sunucu ve yük dengeleyici kullanmanız veya yalnızca CDN kullanmanız gerekir. Ayrıca, web sunucularındaki yükü en aza indirmek için olabildiğince önbelleklemek çok önemlidir.

İçerik Dağıtım Ağını ( CDN ) kullanmak, kaynakların web sunucusundaki yükü azaltan birkaç etki alanına (etki alanı parçalaması) yayılmasına yardımcı olur.

CDN kullanımı, dağıtılmış önbellekleme ve uzaktan hızlandırmaya yardımcı olur, ayrıca çoklu uç noktaları nedeniyle DDoS saldırıları azaltmaya yardımcı olur. Güvenlik konusunda yardımcı olur, çünkü önbelleğe alınmış içeriğin kullanılması daha zordur.

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

İşte bazı öneriler:

  • CDN ile önbelleğe alınacak statik bileşenler için cookieless domain kullanın ( sstatic.net gibi). Bazı proxy'ler çerezlerle istenen bileşenleri önbelleğe almayı reddedebileceğinden.
  • Önbellekleri temizledikten sonra önbelleklerinizi ısıtın (wget, Cache Warmer , Drush ECL ).
  • Performans izlemeyi kullanın (örneğin Drupal için entegrasyonu olan Yeni Kalıntı veya Yottaa .
  • Web siteniz için izleme aracını kullanın (ör. Nagios).
  • Vernik yükleyin ve Vernik HTTP Hızlandırıcı Entegrasyon modülü , sonra yapılandırın .
  • Vernik + Kimlik Doğrulaması: Bunu kontrol edin Kimlik Doğrulaması için Örnek VCL Vernik yapılandırma dosyası.
  • Vernik önünde Pound veya NGINX düşünün. Bakınız: Pound neden Vernik önünde harika .
  • NGINX, ters proxy ve yük dengeleyici olarak çalışabilir, böylece Pound ve Varnish'in yerini alabilir.
  • "Topluluk" açık kaynak sürümünde bulunmayan özellikleri kullanmak için Varnish veya NGINX'in ticari bir sürümünü düşünün.
  • Vernik ve Pound'u değiştirmek için donanım yük dengeleyicisini/önbelleğe almayı düşünün (örn. BIG-IP F5 ).
  • Web uygulamanızda ab, JMeter gibi TTFB , yük ve stres testi gibi araçlar kullanın.

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

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

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

3
kenorb

Kalıpları tahmin etmek çok zor olsa da, trafik seviyeleri hakkında adil bir fikriniz varsa. Yükünüzü çözeltinizi test edin. Bir dizi farklı seçenek vardır ve canlı trafiğiniz olana kadar çok şey tahmin etmek mümkün olmayacaktır, ancak testi mümkün olduğunca yüklerseniz en azından kurulumunuzun trafiği işleyebileceğine dair oldukça güveniniz olacaktır.

Önce test etmezseniz dünyadaki tüm ayarlamalar yardımcı olmaz.

Bu, DC SF, ekonomistin nasıl yaptığı hakkında bir sunumdu. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online- kullanılarak-öğütücü

3
Jeremy French

Ayrıca, DNS tabanlı veya yazılım/donanım yük dengeleme çözümünün yardımıyla yükün birden çok sunucuya yeniden dağıtılmasını da inceleyebilirsiniz. Bu aynı zamanda hata toleransında da pişer.

0
James Stallings

İki uzantıyı etkinleştir:

  • Zend OPcache
  • winCache

Performansınız daha iyi çalışacaktır.

twig Microsoft Azure'da Zend OPcache ve Wincache'i arıyorsanız, önce 'D:\home\site\' Altında 'ini' klasör adı oluşturun. 2 dosya oluşturun, '.user.ini' ve 'settings.ini'

Her dosyaya aşağıdaki yapılandırmayı 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, tuşu PHP_INI_SCAN_DIR Ve değeri d:\home\site\ini

PHP_INI_SYSTEM değiştirdikten sonra web uygulamanızı yeniden başlatın. Dallanma yapılandırması hakkında daha fazla bilgi edinmek istiyorsanız, lütfen Microsoft belgeleri adresini kontrol edin.

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

0
npcoder