Soru Web siteleri için yükleme testi ve kapasite planlamasını nasıl yapıyorsunuz?


Bu bir kurallı soru web siteleri için kapasite planlaması hakkında.

İlgili:

Web siteleri ve web uygulamaları için önerilen bazı araçlar ve kapasite planlama yöntemleri nelerdir?

Lütfen farklı web sunucuları, çerçeveler vb. İçin farklı araç ve tekniklerin yanı sıra genel olarak web sunucularına uygulanan en iyi uygulamaları açıklamaktan çekinmeyin.


111
2018-01-16 22:49


Menşei




Cevaplar:


Kısa cevap: Kimse sizin dışında bu soruya cevap veremez.

Uzun cevap, özel iş yükünüzün kıyaslanması, kendinizi üstlenmeniz gereken bir şeydir, çünkü "Bir parça dizinin uzunluğu ne kadardır?" Diye sormak gibi bir şey.

Pentium Pro 150'de basit bir tek sayfalık statik web sitesi barındırılabilir ve yine de her gün binlerce gösterim sunabiliyor.

Bu soruyu cevaplamak için almanız gereken temel yaklaşım; Deneyin ve ne olduğunu görün. Sisteminizin baskı altında olduğu yerde takılıp çıkarılması için yapay olarak kullanmak için kullanabileceğiniz birçok araç vardır.

Buna kısa bir genel bakış:

  • Senaryonuzu yerine koy
  • İzleme ekle
  • Trafik ekle
  • Sonuçları değerlendirin
  • Sonuçlara göre düzeltin
  • Durulayın, makul mutlu kadar tekrarlayın

Senaryonuzu yerine koy

Temel olarak, bazı yükleri test etmek için, test etmek için bir şeye ihtiyacınız vardır. Test etmek için bir ortam kurun. Bu, eğer mümkünse, üretim donanımınıza oldukça yakın bir tahmin olmalı, aksi takdirde verilerinizi hesaplamaktan kurtulacaksınız.

Sunucularınızı, hesaplarınızı, web sitelerinizi, bant genişliğinizi, vb. Ayarlayın. Bunu VM'lerde yapsanız bile, sonuçlarınızı ölçeklendirmeye hazır olduğunuz sürece Tamam.

Bu yüzden, orta güçte bir sanal makine (iki çekirdek, 512 MB RAM, 4 GB HDD) kuracağım ve en sevdiğim yük dengeleyicimi kuracağım haproxy içeride Red Hat Linux VM'de.

Yük dengeleyiciyi test etmek için kullanacağım yük dengeleyicinin arkasında iki web sunucusuna da sahip olacağım. Bu iki web sunucusu, canlı sistemlerime aynı şekilde kuruldu.

İzleme ekle

İzlemek için bazı metriklere ihtiyacınız olacak. Bu nedenle, web sunucularına kaç tane istek gönderdiğimi ve kullanıcıların iki saniyenin üzerinde bir yanıt süresi almaya başlamadan önce saniyede ne kadar sıkma yapabileceğimi ölçeceğim.

Ayrıca RAM, CPU ve disk kullanımını da izleyeceğim. haproxy yük dengeleyicinin bağlantıları işleyebildiğinden emin olmak için.

Bunu nasıl yapacağınız, platformlarınızda çok fazla ve bu yanıtın kapsamı dışındadır. Web sunucusu günlük dosyalarını gözden geçirmeniz, performans sayaçlarını başlatmanız veya stres testi aracınızın raporlama yeteneğine güvenmeniz gerekebilir.

Her zaman izlemek istediğiniz birkaç şey:

  • CPU kullanımı
  • RAM kullanımı
  • Disk kullanımı
  • Disk gecikmesi
  • Ağ kullanımı

Ayrıca, özel olarak sınandığınız şeye bağlı olarak, SQL kilitlenme noktalarına bakmayı, zaman aramayı vb. Seçmeyi de tercih edebilirsiniz.

Trafik ekle

Bu, işlerin eğlenceli olduğu yer. Şimdi bir test yükünü simüle etmeniz gerekiyor. Var bolca alet Bunu, yapılandırılabilir seçeneklerle yapabilirsiniz:

Bir sayı, herhangi bir sayı seçin. Sistemin dakikada 10.000 isabetle nasıl tepki verdiğini göreceksiniz. Hangi sayıyı seçtiğiniz önemli değildir, çünkü bu adımı tekrar tekrar uygulayacaksınız, sistemin nasıl tepki verdiğini görmek için bu sayıyı yukarı veya aşağı ayarlıyorsunuz.

İdeal olarak, bu 10,000 isteği birden fazla yük testi istemcisi / düğüm üzerinden dağıtmanız gerekir, böylece tek bir istemci isteklerin darboğazına dönüşmez. Örneğin, JMeter Uzaktan test kontrol eden bir Jmeter makinesinden birkaç müşteriyi başlatmak için merkezi bir arayüz sağlar.

Büyüye basın Gitmek düğmesine basın ve web sunucularınızın erimesi ve çökmesini izleyin.

Sonuçları değerlendirin

Şimdi, 2. adımda topladığınız metriklerine geri dönmeniz gerekiyor. Bunu 10.000 eşzamanlı bağlantı ile görüyorsunuz. haproxy Kutu zorlukla bir ter kırıyor, ancak iki web sunucuları ile tepki süresi beş saniyenin üzerinde bir dokunuş. Bu hiç hoş değil - unutmayın, yanıt süreniz iki saniyeyi hedefliyor. Yani, bazı değişiklikler yapmalıyız.

aga

Şimdi, web sitenizi iki kattan fazla hızlandırmanız gerekiyor. Yani, ya ölçeklendirilmeniz ya da ölçeklendirmeniz gerektiğini biliyorsunuz.

Büyütmek, daha büyük web sunucuları, daha fazla RAM, daha hızlı diskler almak.

Ölçeklendirmek için daha fazla sunucu alın.

Bu kararı vermek için 2. adımdaki metrikleri kullanın ve test edin. Örneğin, test sırasında disk gecikmesinin büyük olduğunu gördüyseniz, daha hızlı sabit diskleri büyütmeniz ve almanız gerektiğini bilirsiniz.

İşlem sırasında işlemcinin% 100 oranında oturduğunu gördüyseniz, mevcut sunuculardaki basıncı azaltmak için ek web sunucuları eklemek için ölçeklendirmeniz gerekebilir.

Genel bir doğru ya da yanlış cevap yok, sadece sizin için doğru olan var. Ölçeklendirmeyi deneyin, eğer işe yaramazsa, bunun yerine ölçeklendirin. Ya da hayır, size kalmış ve kutunun dışında bir şeyler düşünmek.

Diyelim ki ölçekleneceğiz. Bu yüzden iki web sunucumu klonlamaya karar verdim (VM'ler) ve şimdi dört web sunucum var.

Durulama, tekrar

Adım 3'ten tekrar başlayın. Eğer bir şeyin beklediğiniz gibi gitmediğini fark ederseniz (örneğin, web sunucularını iki katına çıkardık, ancak yanıtlama süreleri iki saniyeden fazladır), ardından diğer darboğazlara bakın. Örneğin, web sunucularını ikiye katladınız, ancak yine de bir berbat veritabanı sunucunuz var. Veya, daha fazla VM'yi klonladınız, ancak aynı fiziksel ana bilgisayarda oldukları için, yalnızca sunucu kaynakları için daha yüksek bir çekişme elde ettiniz.

Sistemin diğer bölümlerini test etmek için bu prosedürü kullanabilirsiniz. Yük dengeleyicisine vurmak yerine, web sunucusuna doğrudan vurmayı deneyin, ya da bir SQL kıyaslama aracı kullanan SQL sunucusu.


119
2018-04-29 14:05



Bu, yük testi için mükemmel, ancak kapasite planlaması hakkında çok az şey söylüyor. Google'ın erken tasarlanan, ölçeklenebilir mimarisini veya daha az ve daha pahalı kutuları kullanan alternatifleri kim yazabilir? - rleir


Kapasite planlaması ölçümle başlar, bu durumda yüke karşı tepki süresi. Programların yük ile yavaşlama derecesini öğrendikten sonra doğrusal bir fonksiyon DEĞİL, bir yanıt süresi hedefi seçebilir ve daha sonra belirli bir miktardaki yük için bu hedefe ulaşmak için hangi kaynakları alacağını keşfedebilirsiniz.

Performans ölçümü her zaman yapılır zaman birimleri, olarak

  • Kullanıcılar neyle ilgilendiler?
  • yukarı ve aşağı ölçeklenebilir

% CPU ve IOPS gibi şeyler sisteme özeldir, bu yüzden onları yalnızca sistemi planladığınızda ve ön prodüksiyonda ölçtüğünüzde, sizin için önem verdiğiniz şey için bir "vekil" olarak hareket ettiğinizde kullanırsınız.


9
2018-04-21 22:32





Kapasite planlaması zahmetli bir yaratıktır. Sanat kadar bilim (kesinlikle karanlık olan).

En iyi durum, iyi bilgilendirilmiş kararlar vermenizdir. ve servet / şans, gerçeğin varsayımlarınızı karşılamanızdan yanadır. Kapasitenizin varsayımları gerçeğe uygunsa, mistik bir yogi gibi görünüyorsun. Ne yazık ki, varsayımlarınız gerçeği aşarsa, aşırı ve aşırı görünecek gibi görüneceksiniz. Daha da önemlisi, eğer varsayımlarınız nihai gerçekliğin altındaysa (ya da başka bir şekilde yanlışsa), ihtiyacınız olan kapasiteden yoksun olacaksınız ve inandırıcı altyapınızın başarısızlıklarını hafifletmek için karışmak zorunda kalacaksınız;

Baskı yok...

Ne yazık ki, kapasite planlamasının karanlık sanatı, tek bir Sunucu Arızası cevabına makul bir şekilde damıtılabilmesinden daha fazlasıdır; gerçekten, kitaplara layık bir konu.

Neyse ki, böyle bir kitap var: "Kapasite Planlama Sanatı"


8





Mark Henderson'ın gönderisini genişletmek için, bunu spesifik olarak Apache'ye yazıyorum. Söylediklerini tekrarlamak için, "Kısa cevap: Kimse senin dışında bu soruya cevap veremez." Bu cevabın metnini, cevapla ilgili benzer bir soruya verdiğim cevaptan aldım. Drupal web sitesinin performansı.

Mod_Prefork ile Apache Yapılandırma

Apaçi tartışmasız en popüler web sunucusundan biridir. Açık kaynak ve hala aktif olarak devam ediyor. Linux ve Windows işletim sistemlerinde çalıştırabilirsiniz, ancak Linux / Unix dünyasında daha popülerdir.

Malısın asla Kutudan çıkmış bir Apache yapılandırması kullanın. Apache'yi sitenize her zaman ayarlamanız gerekir. Ana Apache yapılandırması CentOS dosyasında yer almaktadır /etc/httpd/conf/httpd.confve Ubuntu sistemlerinde ana Apache yapılandırma dosyası genellikle /etc/apache2/apache2.conf. Ek yapılandırma dosyaları gibi şeyler için kullanılır Sanal Barındırıcılar.

Pek çok yazılım gibi, Apache de belirli bir web sitesinin ihtiyaçlarına göre esnek ve özelleştirilmiş olarak üretilmiştir. Farklı Çoklu İşleme Modülleri var Apache'nin bir ağ bağlantı noktasına bağlanmak ve istekleri kabul etmek ve işlemek için kullanılacak şekilde yapılandırılabileceği.

Çoğu zaman, CentOS ve Ubuntu sunucularıyla birlikte gelen Apache kurulumları, MPMmod_prefork"kullanılır. Mod_prefork kullandığınızı varsayarak (emin değilseniz, o zaman bu daha olasıdır, ancak bunu yalnızca siz belirleyebilirsiniz) İşte nasıl yapılandırılacağının temelleri:

  • Apache'nin kullanabileceği maksimum bellek miktarını belirleyin.
  • Web sitenizi yoğun bir şekilde test edin ve her bir Apache işleminin ne kadar bellek kullandığını belirleyin (üstte kullanarak).
  • Apache sürecini en fazla bellek kullanan, iyi bir ölçü için biraz ekleyin ve sonra bu numarayla ilk numaranızı (Apache'nin kullanmak istediğiniz maksimum bellek miktarını) bölün.
  • Aldığınız numara sizin olmalı MaxClients & ServerLimit değişkenler.

Bu kesinlikle son cevap değil. Apache sunucunuzu ayarlama zaman alır ve doğru olması için deneyim gerektirir.


5



Sadece üstüne dayalı bellek kullanımı biraz bozuk, lütfen kontrol edin. stackoverflow.com/questions/7880784/... ek olarak, bellek kullanımı için "ps_mem.py" yerine python komut dosyasını kullanmak isteyebilir veya hatta / proc altındaki sürece eklenen değerleri kullanır - Dennis Nolte
Eklediğin nottan dolayı bütün cevabın değeri: "Asla kutudan çıkmış bir Apache yapılandırması kullanmamalısın". Bunu asla yeterince stresleyemeyiz. - ezra-s


Ayrıca, darboğazları, tek başarısızlık noktalarını ve lisans sınırlamalarını belirlemeye çalışmak için uygulamaları tasarlayan / inşa eden Mimarlar ve Mühendisler ile konuşmanızı öneririm.


0