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


113

Bu, web siteleri için kapasite planlaması hakkında kanonik bir sorudur .

İ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 teknikleri ve genel olarak web sunucularına uygulanan en iyi uygulamaları tanımlamaktan çekinmeyin.

Yanıtlar:


127

Kısa cevap: Siz hariç bu soruya kimse cevap veremez.

Uzun cevap, belirli iş yükünüzü kıyaslamanın kendinizin üstlenmeniz gereken bir şey olduğudur, çünkü "Bir ipin uzunluğu ne kadardır?"

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

Bu soruyu cevaplamak için atmanız gereken temel yaklaşım, denemek ve ne olduğunu görmek. Sisteminizi yapay olarak baskı altına sokmak için kullanabileceği çok sayıda araç var.

Buna kısa bir genel bakış:

  • Senaryoyu yerine koy
  • İzleme ekle
  • Trafik ekle
  • Sonuçları değerlendir
  • Sonuçlara göre düzelt
  • Durulayın, oldukça mutlu olana kadar tekrarlayın

Senaryoyu yerine koy

Temel olarak, bazı yükleri test etmek için, test etmek için bir şeye ihtiyacınız var. Test edilecek bir ortam kurun. Bu, eğer mümkünse üretim donanımınıza oldukça yakın bir tahminde bulunmalıdır, aksi takdirde verilerinizi ekstradan bırakacaksı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 sorun yoktur.

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

Ayrıca yük dengeleyicisini test etmek için kullanacağım yük dengeleyicisinin arkasında iki web sunucusu olacak. Bu iki web sunucusu, canlı sistemlerimle aynı şekilde kuruluyor.

İzleme ekle

İzlemek için bazı metriklere ihtiyacınız olacak, bu yüzden kullanıcılar iki saniyenin üzerinde bir yanıtlama süresi almaya başlamadan önce web sunucularına kaç isteğin geldiğini ve saniyede kaç isteği sıkabileceğimi ölçeceğim.

haproxyYük dengeleyicinin bağlantıları yapabildiğinden emin olmak için RAM, CPU ve disk kullanımını da izleyeceğim .

Bunun nasıl yapılacağı platformlarınıza çok bağlıdır ve bu cevabı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 gecikme
  • Ağ kullanımı

Ayrıca, test ettiklerinize bağlı olarak SQL kilitlenmelerine bakmayı, zaman aramayı, vb. Bakmayı da seçebilirsiniz.

Trafik ekle

Burası işlerin eğlenceli geçtiği yer. Şimdi bir test yükünü simüle etmeniz gerekiyor. Orada araçlar bol ayarlanabilir seçenekleriyle, bunu yapabilirsiniz:

Bir numara, herhangi bir numara seçin. Diyelim ki sistemin dakikada 10.000 vuruşla nasıl yanıt verdiğini göreceksiniz. Hangi numarayı seçtiğiniz önemli değil, çünkü bu adımı birçok kez tekrarlayacaksınız, sistemin nasıl tepki verdiğini görmek için bu sayıyı yukarı veya aşağı ayarlayacaksınız.

İdeal olarak, bu 10.000 talebi birden fazla yük testi istemcisine / düğümüne dağıtmanız gerekir, böylece tek bir istemci istekleri tıkamaktadır. Örneğin, JMeter'in Uzaktan Testi , birkaç müşterinin kontrol eden bir Jmeter makinesinden başlatılacağı merkezi bir arayüz sağlar.

Sihirli Git düğmesine basın ve web sunucularınızın erimesini ve çökmesini izleyin.

Sonuçları değerlendir

Öyleyse, şimdi 2. adımda topladığınız ölçümlere geri dönmeniz gerekiyor. 10.000 eşzamanlı bağlantıyla, kutunuzun haproxyçok az ter attığını görüyorsunuz , ancak iki web sunucusuyla yanıt süresinin beş saniyenin üzerinde bir dokunuş olduğunu görüyorsunuz . Bu hiç hoş değil - unutmayın, cevap süreniz iki saniye hedefliyor. Bu yüzden bazı değişiklikler yapmamız gerekiyor.

aga

Şimdi, web sitenizi ikiden fazla hızlandırmanız gerekir. Yani, ölçeklendirmeniz veya ölçeklendirmeniz gerektiğini biliyorsunuz.

Ölçeklendirmek için, daha büyük web sunucuları, daha fazla RAM, daha hızlı diskler edinin.

Ölçeklendirmek için daha fazla sunucu edinin.

Bu kararı vermek için 2. adımdaki metriklerinizi kullanın ve test edin. Örneğin, test sırasında disk gecikmesinin çok büyük olduğunu gördüyseniz, ölçeklendirmeniz ve daha hızlı sabit sürücüler edinmeniz gerektiğini biliyorsunuzdur.

İşlemcinin test sırasında% 100 oturduğunu gördüyseniz, belki de mevcut sunucular üzerindeki baskıyı azaltmak için ek web sunucuları eklemek için ölçeklendirmeniz gerekir.

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

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

Durulayın, tekrarlayın

Adım 3'ten tekrar başlayın. İşlerin beklediğiniz gibi gitmediğini fark ederseniz (örneğin, web sunucularını iki katına çıkardık, ancak yanıt süreleri hala iki saniyeden fazladır), sonra diğer tıkanıklıklara bakın. Örneğin, web sunucularını iki katına çıkardınız, ancak hala berbat bir veritabanı sunucunuz var. Veya daha fazla VM klonladınız, ancak aynı fiziksel ana bilgisayarda olduklarından, yalnızca sunucu kaynakları için daha yüksek bir çekişme elde ettiniz.

Sistemin diğer kısımlarını test etmek için bu prosedürü kullanabilirsiniz. Yük dengeleyicisini vurmak yerine, doğrudan bir web sunucusuna veya bir SQL kıyaslama aracı kullanarak SQL sunucusuna vurmayı deneyin .


1
Bu, yük testi için mükemmel, ancak kapasite planlaması hakkında çok az şey söylüyor. Google’ın daha önce tasarlanan ölçeklenebilir mimarisi veya daha az ve daha pahalı kutular kullanan alternatifler hakkında kim yazabilir.
rleir

10

Kapasite planlaması ölçümle başlar, bu durumda tepki süresi ve yüke karşı tepki süresi. Programların yükle ne kadar yavaşladığını, doğrusal olmayan bir işlev olduğunu öğrendikten sonra, bir yanıt süresi hedefi seçebilir ve daha sonra belirli bir yükleme miktarı için bu hedefi karşılamak için hangi kaynakları alacağını keşfedebilirsiniz.

Performans ölçümü daima zaman birimleri ile yapılır ;

  • kullanıcıların umursadığı şeyler onlar
  • yukarı ve aşağı ölçeklenebilirler

% CPU ve IOPS gibi şeyler sisteme özgüdür, bu nedenle onları yalnızca sistemi planladığınızda ve üretim öncesi ölçtüğünüzde kullanır, zaman umursadığınız şey için bir "vekil" olarak hareket etmek için kullanırsınız.


8

Kapasite planlaması zahmetli bir canavardır. Sanat kadar bilimdir (eğer kesinlikle karanlıksa).

En iyi durum, iyi bilgilendirilmiş kararlar almanız ve servet / şansın gerçeğin varsayımlarınıza uymasını sağlayarak size yardımcı olmasıdır. Eğer kapasitenizin varsayımlara ihtiyacı varsa, gerçeğe uyuyorsa, mistik bir yogi gibisiniz. Ne yazık ki, varsayımlarınız gerçeği aşarsa, fazladan ve fazladan kalmış görüneceksiniz. Ne yazık ki, varsayımlarınız nihai gerçekliğin altındaysa (veya başka türlü yanlışsa), ihtiyaç duyduğunuz kapasiteden yoksun olacaksınız ve inatçı altyapınızın başarısızlığını azaltmak için mücadele etmek zorunda kalacaksınız, bu da yetkinlikten yoksun gibi görünmenizi sağlıyor.

Baskı yok...

Maalesef, kapasite planlama karanlık sanatı, tek bir Sunucu Arıza cevabına makul bir şekilde damıtılabileceğinden fazladır; gerçekten, bu kitaplara yakışır bir konu.

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


5

Mark Henderson'un gönderisini genişletmek için, bu bilgiyi Apache'ye yazıyorum. Söylediklerini yinelemek için, "Kısa cevap: Bu soruyu sizden başka kimse cevaplayamaz." Bu cevabın metni, Drupal web sitesinin performansı ile ilgili benzer bir soruya verdiğim yanıttan ağır bir şekilde ödünç alındı .

Mod_Prefork ile Apache'yi Yapılandırma

Apache tartışılabilir bir şekilde mevcut en popüler web sunucusundan (değilse) biridir. Açık kaynaktır ve hala aktif olarak korunur. Hem Linux hem de Windows işletim sistemlerinde çalıştırabilirsiniz, ancak Linux / Unix dünyasında daha popülerdir.

Sen gerektiğini asla bir out-of-the-box Apaçi yapılandırmayı kullan. Apache'yi her zaman sitenize ayarlamanız gerekir. Ana Apache yapılandırma CentOS dosya bulunmaktadır /etc/httpd/conf/httpd.confve Ubuntu sistemlerde ana Apache yapılandırma dosyası genellikle bulunmaktadır /etc/apache2/apache2.conf. Sanal Konaklar gibi şeyler için ek yapılandırma dosyaları kullanılır .

Birçok yazılım gibi, Apache de esnek ve kişisel bir web sitesinin ihtiyaçlarına göre kişiselleştirilebilecek şekilde üretilmiştir. Apache'nin bir ağ portuna bağlanmak ve istekleri kabul etmek ve işlemek için kullanmak üzere yapılandırılabileceği farklı Çoklu İşleme Modülleri vardır.

CentOS ve Ubuntu sunucuları ile birlikte gelen varsayılan Apache kurulumlarında çoğu zaman, MPM " mod_prefork " kullanılır. Mod_prefork kullandığınızı varsayarak (eğer emin değilseniz, bu daha muhtemeldir, ancak bunu yalnızca siz belirleyebilirsiniz.) İşte, onu nasıl yapılandıracağınızın temelleri:

  • Apache'nin kullanabilmesini istediğiniz maksimum bellek miktarını belirleyin.
  • Web sitenizi yoğun bir şekilde test edin ve her Apache işleminin ne kadar bellek kullandığını belirleyin (üst kullanarak).
  • Apache işlemini en çok kullanılan belleği üste alın, iyi bir ölçüm için biraz ekleyin ve ardından ilk numaranızı (Apache'nin kullanmasını istediğiniz maksimum bellek miktarını) bu yeni numaraya bölün.
  • Alacağınız sayı sizin MaxClientsve ServerLimitdeğişkenleriniz olmalıdır .

Bu kesinlikle son cevap değil. Apache sunucunuzun ayarlanması zaman alır ve tam olarak düzeltilmesi için deneyim gerektirir.


1
sadece üste dayalı bellek kullanımı biraz kusurlu, ek olarak lütfen stackoverflow.com/questions/7880784/… adresinden kontrol edin, ek olarak bellek kullanımı için "ps_mem.py" python betiğini kullanmak veya ekli olarak directy değerlerini kullanmak isteyebilirsiniz. / proc işlemine giriş
Dennis Nolte

1
Yanıtın tamamı, eklediğiniz not nedeniyle değer taşıyor: "Asla kullanıma hazır bir Apache yapılandırması kullanmamalısınız". Bunu asla yeterince vurgulayamayız.
ezra-s

0

Ayrıca, darboğazları, tek başarısızlık noktalarını ve lisanslama sınırlamalarını tanımlamak için uygulamaları tasarlayan / inşa eden Mimarlar ve Mühendislerle konuşmanızı öneririm.

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.