Performans testi için mimari stratejileri

Bu Azure Well-Architected Framework Performans Verimliliği denetim listesi önerisi için geçerlidir:

PE:06 İş yükünüzün istenen performans hedeflerine ulaştığından ve iş hedeflerinize ulaştığından emin olmak için üretim benzeri bir ortamda düzenli olarak test ederek iş yükünüzün performansını iyileştirin.

Performans testi, bir iş yükünün çeşitli koşullar altında nasıl davrandığını değerlendirmek için kullanılan işlevsiz bir test uygulamasıdır. Performans düşüşlerini erken belirlemenize, sorunları proaktif olarak çözmenize ve hizmet düzeyi sözleşmeleriyle sürekli uyum sağlamanıza yardımcı olur.

Yanıt sürelerini, aktarım hızını, kaynak kullanımını ve kararlılığı ölçerken, iş yükünüzün tanımlı hedefleri tutarlı bir şekilde karşıladığına ve işletmenizin gerektirdiği performans düzeyini sağladığına dair kanıt toplarsınız.

Bu makaledeki temel stratejiler, test için OE:09 Mimari stratejileri bölümünde açıklanan temel test uygulamalarını temel alır. Önce bu makaleyi gözden geçirmenizi öneririz. Bu kılavuzdaki öneriler performans kapsamına alınır ve iş yüklerinizin gelişen iş hedefleriyle uyumlu kalması için performans hedeflerine ulaşmaya odaklanır.

Aşağıdaki tabloda, bu makale boyunca kullanılan temel performans terimleri tanımları verilmiştır.

Süre Definition
Performans hedefleri Yanıt süresi, aktarım hızı veya eşzamanlı kullanıcı sayısı gibi bir iş yükünün karşılaması gereken belirli performans değerleri.
Performans eşikleri Kabul edilebilir performansı belirli bir ölçüm için kabul edilemez performanstan ayıran sınırlar.
Performans bütçesi Bir iş yükünün her katmanına veya bileşenine ayrılan genel performans hedefinin bölümü.
Hata bütçesi SLO'lardan türetilen izin verilen hata veya hata düzeyi.
Kabul ölçütleri Bir test sonucunun, iş yükünün performans gereksinimlerini geçirmesi için karşılaması gereken koşullar.
Hipotez temelli deneme Performans hakkında bir tahmin belirttiğiniz, bir taban çizgisiyle test ettiğiniz ve ölçülen sonuçlarla doğruladığınız bir test yöntemi.
Performans temeli Test tarafından doğrulandığı gibi normal koşullar altında bir iş yükünün davranışını temsil eden bir ölçüm kümesi.
Yapay işlemler Denetimli koşullar altında sistem performansını ölçmek için gerçek kullanıcı etkileşimlerinin simülasyonunu oluşturan betikli istekler.
Performans gerilemesi Kod, yapılandırma veya altyapıda yapılan bir değişiklikle ortaya konan yerleşik taban çizgisiyle karşılaştırıldığında performans düşüşü.
Performans sapması Zaman içinde performansta aşamalı bir düşüş, yerleşik taban çizgilerine karşı düzenli test yapılmadan fark edilmeden devam eder.

Performans testleriniz için ölçülebilir hedefler belirleme

Ölçülebilir performans hedefleri, öznel beklentileri test edip doğrulayabileceğiniz nesnel ölçütlere çevirir.

Performans hedeflerinizi tanımlayın ve bütçeleri atayın. Desteklemeniz gereken eşzamanlı kullanıcı sayısı gibi belirli performans hedeflerini tanımlayın ve belgeleyin. Bu hedeflerin hizmet düzeyi hedeflerinize (SLO) uygun olduğundan emin olun ve bunları ölçülebilir test hedeflerine çevirin.

İş yükünüzün farklı katmanları arasında performans ve hata bütçeleri atayın. Performans testleri başarısız olduğunda bütçeleriniz, hangi katmanın sorumlu olduğunu ve iyileştirme çalışmalarına nerede odaklanabileceğinizi belirlemenize yardımcı olur. Bütçeler olmadan başarısız olan testler yalnızca performans hedeflerinin karşılanmadığını belirtir, ancak sorunun nerede olduğunu göstermez.

Örneğin, API yanıt süresi için 400 ms, veritabanı sorguları için 150 ms ve başarısız isteklerde 1% üst sınır ayarlayabilirsiniz. Bir test başarısız olduğunda, sorunun yavaş API yanıtları mı, yavaş veritabanı sorguları mı yoksa hatalardaki ani artış mı olduğunu belirlemek için her katmanın sonuçlarını bütçesine göre de kontrol edebilirsiniz.

Note

Kullanıcı akışlarınızı ve performans gereksinimlerinizi anlamadan önce SLO'ları tanımlamaktan kaçının. SLO'lar rastgele hedeflere değil gerçek kullanıcı ihtiyaçlarına ve iş hedeflerine dayalı olmalıdır.

Net geçiş ve başarısız eşikleriyle kabul ölçütlerini tanımlayın. Kabul ölçütlerinizi gecikme süresi, yanıt süreleri, aktarım hızı, kaynak kullanımı, hata oranları ve performans hedeflerinize uygun diğer performans göstergeleri gibi performans ölçümlerine dayandırın.

Testlerinizin net geçiş veya başarısız sonuçlar üretmesi için her ölçüm için eşikler tanımlayın. SLO'nuzun 200 ms içinde tamamlanması için 95% istek gerekiyorsa API yanıt süresi eşiğini 95. yüzdebirlik dilimde 200 ms olarak ayarlayın. 95. yüzdebirlik değerin 200 ms'yi aştığı tüm test çalıştırmaları başarısız olur.

Erken başlayın ve sürekli test edin

Erken performans analizi, mimari performans sorunlarını düzeltmeye maliyetli hale gelmeden önce yakalar.

İş yükünüzün yazılım geliştirme yaşam döngüsünde performans testini mümkün olduğunca erken başlatın. Başlamak için eksiksiz bir uygulamaya ihtiyacınız yoktur. Geliştiriciler kodun profilini yerel olarak oluşturabilir, yanıt sürelerini ölçebilir ve yoğun kaynak kullanımlı işlemleri tanımlayabilir. Erken test, tasarım kararlarını bilgilendirerek mimari seçimleri performans hedeflerine karşı doğrular ve iyileştirme fırsatlarını tanımlar.

Yeni gereksinimleri karşılayacak şekilde geliştikçe iş yükünüzü sürekli test edin. Her kod değişikliği performans regresyonlarına neden olabilir. Bu değişiklikleri erken yakalamak için testleri düzenli olarak çalıştırın. Performans testlerini dağıtım işlem hatlarına dahil edin ve üretime ulaşmadan önce performans kaymalarını algılamak için düzenli aralıklarla otomatikleştirilmiş testler çalıştırın.

Tradeoff. Erken performans testi, operasyonel maliyetleri artıran ayrılmış altyapı ve özel uzmanlık gerektirir. Bu yatırımı, geç bulunan performans sorunları ve üretimle ilgili kesintilerin maliyetleriyle karşılaştırarak dengeleyin.

Gerçek dünya koşullarında test edin

Performans testlerinin gerçek dünya koşullarıyla eşleşmesi gerekir, böylece sonuçlarınız anlamlı olur.

Üretim ortamınızı yansıtma

Test ortamınız, üretimi pratik olduğu kadar yakından yansıtmalıdır. İş yükünüzün risk profiline göre ortamınıza yaklaşımınızı uyarlayın.

Görev açısından kritik iş yükleri için üretimi tam olarak aşağıdakiler arasında eşleştirin:

  • Hesaplama SKU'ları ve yapılandırmaları
  • Otomatik ölçeklendirme ayarları
  • Önbelleğe alma yapılandırmaları
  • Ağ koşulları (gecikme süresi, bant genişliği)
  • Dış bağımlılıklar

Kritik olmayan iş yükleri için, üretimi taklit eden ölçeği azaltılmış bir ortamda test edilmesi daha düşük maliyetle yararlı içgörüler sağlayabilir.

Yapılandırma kaymasını önleyin. Yapılandırma kayması yanıltıcı test sonuçlarına yol açabilir. Test ortamınızın üretimle eşleştiğinden emin olmak için otomatik denetimler uygulayın. Testleri çalıştırmadan önce doğru sürümlerin dağıtıldığından emin olun.

Tradeoff. Performans testi için tam üretim çoğaltması altyapı maliyetlerini önemli ölçüde artırır. Üretimdeki performans sorunları riskinin, iş yükünüz için özel performans testi altyapısının maliyetini haklı çıkarıp çıkarmadığını değerlendirin.

Üretim performansını doğrulama

Test ortamları, performansı etkileyen gerçek dünya koşullarını tam olarak çoğaltamaz. Üretim testleri yalnızca gerçek kullanım altında ortaya çıkar ve gelecekteki iyileştirme için doğru temeller sağlayan sorunları ortaya çıkarır. Bazı performans gereksinimleri yalnızca gerçek kullanıcıların, verilerin ve altyapının kesiştiği durumlarda doğrulanabilir.

Denetimli üretim testi çalıştırın. İş yükünüzün kaynak tükenmesi altında nasıl davrandığını ve hatalardan nasıl kurtardığını anlamak için yoğun olmayan saatlerde testleri zamanlayın.

Üretim testi, aşağıdakiler de dahil olmak üzere gerçek koşullar altında performans özelliklerini ortaya koyuyor:

  • Gerçekçi kullanıcı davranışı desenleri ve veri hacimleri
  • Gerçek ağ gecikme süresi ve bant genişliği çeşitlemeleri
  • Coğrafi dağılım etkileri
  • Üçüncü taraf API performansı ve bağımlılıkları
  • Gerçek önbelleğe alma davranışı ve altyapı özellikleri

Aşamalı test tekniklerini kullanın. Küçük trafik yüzdeleriyle başlayın ve yavaş yavaş artırın. Her adımda yanıt sürelerini, aktarım hızını, hata oranlarını ve kaynak kullanımını izleyin. Bu aşamalı yaklaşım, kırılma noktasını belirlerken, performans sorunlarını ortaya çıkararak ve artan talep altında sistem davranışının doğru bir görünümünü sağlarken riski sınırlar.

Sorunları erken bulmak için üretim testlerini sürekli izleyin. Otomatik geri alma mekanizmaları ve gerçek zamanlı uyarı gibi kullanıcıları olumsuz etkiliyorsa testleri durduran otomatik korumalar uygulayın. Bu teknikler hızlı yanıt sağlar ve kesintileri en aza indirir.

Note

Üretimde denetimli performans testleri çalıştırdığınızda, testler tarafından oluşturulan ek yükü işlemek için ek kapasite ayırmanız gerekir.

Risk: Üretim testi, ek yük oluşturabildiği ve trafiği kesintiye uğratabildiği için gerçek müşterileri doğrudan etkiler. Güvenlik önlemlerini her zaman uygulayın, açığa çıkma süresini sınırlayın ve olası iş etkisini en aza indirmek için geri alma planlarını hazır bulundurun. Gerçekçi testlerin avantajlarını, canlı kullanıcıları kesintiye uğratmanın olası iş etkisine karşı dengeleyin.

Hipotez temelli denemelerle değişiklikleri doğrulama

Performans testinizde yol göstermek için hipotez temelli denemeleri kullanın. Anlamlı sonuçlar elde edebilmeleri için bireysel performans denemeleri tasarla.

İş yükünüzün performansı hakkında odaklanmış bir hipotezle başlayın ve eyleme dönüştürülebilir kararlara yol açan ölçülebilir başarı ölçütlerini tanımlayın. Örneğin, hipoteziniz şu olabilir: "Orders tablosuna dizin eklemek, yoğun yük altında sorgu süresini 70% azaltır." Temeliniz geçerli şema, değişken ise yeni dizine sahip şemadır. Her iki sürümde de aynı yük testini çalıştırın. Sorgu gecikme süresini, veritabanı CPU kullanımını ve aktarım hızını yakalayın, ardından hipotezin doğru olup olmadığını belirlemek için sonuçları karşılaştırın.

Tradeoff. Hipotez temelli denemeler, altyapı maliyetlerini ve test yürütme süresini artıran hem temel hem de değişken yapılandırmalarında aynı testleri çalıştırmayı gerektirir. Olası performans artışının ek test çalışmalarını haklı çıkardığı yüksek etkili değişikliklere odaklanın.

Birden çok performans testi türü uygulama

Performans testi, çeşitli koşullar altında hızı, kararlılığı ve ölçeklenebilirliği değerlendiren çeşitli testleri kapsar. Her test türü, iş yükünüzün farklı performans yönlerini hedefler. Benzersiz içgörüler ortaya çıkarır ve işlevsel testin ötesine geçen tam bir değerlendirme sağlar.

İş yükünüzü farklı açılardan doğrulamak için birden çok test türü kullanın. Örneğin, stres testi, yoğun yük altında kırılma noktasını bulur, ancak yalnızca dayanıklılık testi saatler veya günler içinde ortaya çıkan bellek sızıntılarını ortaya çıkarır.

Doğrulamanız gerekenlere göre test türlerini seçin.

Aşağıdaki tabloda her test türünün ne zaman kullanılacağı ve iş yükünüz hakkında nelerin ortaya çıktığı gösterilmektedir. Bu tablo kapsamlı bir liste olmasa da, açıklayıcı bir örnek işlevi görür.

Test tipi Birincil amaç Ne zaman uygulanır? Ortaya çıkardığı şey Environment
Yük testi Sistemin normal ve yoğun kullanım koşullarında beklenen kullanıcı sayısını karşıladığını doğrulayın. Erken başlayın, sık sık çalıştırın Temel performans, kapasite sınırları, ölçeklendirme verimliliği Hazırlama veya üretim benzeri ortam
Stres testi Sistem sınırlarını ve hata noktalarını anlama Sistem üretime hazır olmadan önce Maksimum kapasite, hata modları, kurtarma davranışı Ayrılmış performans testi ortamı
Tepe Noktası Testi Sistemin ani trafik artışlarını işlediğine emin olun Özellikle genel kullanıma yönelik uygulamalar için erken başlayın Otomatik ölçeklendirme yanıt hızı, kuyruk işleme, düzgün performans düşüşü Hazırlama veya üretim ortamı
Dayanıklılık/ısla(t)ma testi Uzun zaman dilimlerinde ortaya çıkan sorunları algılama İlk yük testleri geçtikten sonra Bellek sızıntıları, kaynak tükenmesi, bağlantı havuzu sorunları Tam kaynak ayırma ile üretim benzeri ortam

Tüm test türlerini hemen uygulamayı denemeyin. Temel performansınızı anlamak için temel yük testi ile başlayın. Riskleri belirleyip deneyim kazandıkça stres testi, ani artış testi ve sonunda dayanıklılık testi gibi işlemleri genişletin.

Tradeoff. Tüm test türlerinde performans testi için önemli bir süre ve altyapı yatırımı gerekir. Test yatırımınızı iş riskinizle eşleştirin.

Gerçek dünya kullanım desenlerini ve veri özelliklerini kullanma

Gerçekçi verilerle test etme, kaynak tüketimi, sistem davranışı ve gizli performans sorunları hakkında doğru içgörüler sağlar.

Çeşitli senaryoları, kullanıcı profillerini ve veri birimlerini temsil eden çeşitli test veri kümeleri oluşturun. Gerçek kullanıcı çeşitliliğini taklit etmek için giriş varyasyonlarını ve rastgele seçmeyi kullanın. Büyük yükler, karmaşık sorgular veya yüksek eşzamanlılık gibi performans sorunlarına neden olabilecek uç örnekleri ekleyin.

Test verileriniz gerçek üretim verileri gibi görünmelidir. Üretim verileri özelliklerine sahip yapay veriler kullanın. İşlem tutarlılığı, gecikme süresi ve birim işleme gibi veri yönetimi davranışlarını vurgulamak gibi belirli senaryolar için üretim veri kümelerini (düzgün anonimleştirilmiş) ayırın.

Gerçek kullanıcı iş akışlarını taklit eden yapay işlemlerin simülasyonunu yap. İş yükünüzün gerçekte nasıl kullanıldığını yansıtan bir yük oluşturmak için bu işlemleri betikleyin ve tekrar tekrar çalıştırın.

Test senaryolarınız eşzamanlı kullanıcı erişimi, en yüksek yük dönemleri ve belirli işlem dizileri gibi gerçek kullanım desenlerini yansıtmalıdır. Performans sonuçlarının gerçek kullanıcı değerini yansıtması için senaryoların iş hedefleriyle uyumlu olduğundan emin olun.

Yük altında test yaparken gerçek üçüncü taraf API çağrılarını ekleyin. Sahte dış bağımlılıklar, testlerin daha hızlı ve tahmin edilebilir bir şekilde çalışmasını sağlar, ancak gerçek dünyadaki performans sorunlarını gizler. Uygulamanız bir ödeme işlemcisi API'sine bağımlıysa uçtan uca gecikme süresini anlamak için gerçek çağrılarla test edin.

Tasarım kararlarına yol göstermek için test sonuçlarını kullanma

Test sonuçlarınız, güvenilir temeller oluşturarak ve iyileştirme çalışmalarını yönlendirerek tasarım kararlarını yönlendirir.

Temel ölçümlerinizi oluşturun. Kıstaslar, eğilimleri ve anomalileri belirlemenize ve optimizasyon değişikliklerinin gerçekten iyileştirmeler sağlayıp sağlamadığını değerlendirmenize yardımcı olur. Zaman içindeki performans eğilimlerini izlemek için güvenilir temellere ihtiyacınız vardır.

İlk testler sırasında performans ölçümlerini kaydedin. Bu kayıt, "normal" performansın anlık görüntüsü olan temelinizdir. Sonraki çalıştırmalarda, performans değişikliklerini algılamak için yeni sonuçları bu temelle karşılaştırın. Çeşitli koşullar altında sistem davranışını anlamak için verileri incelediğinizde kullanıcı etkisini, sıklığını, düzeltme maliyetini ve değişiklik ölçütleri riskini göz önünde bulundurun. Performansın nerede düşeceğini gösteren desenleri arayın. İyileştirme çalışmalarına öncelik vermek için bu içgörüleri kullanın.

İyileştirme yinelemeli bir işlemdir ve veriler tarafından yönlendirilmelidir. Performans iyileştirmesi için geliştirme döngünüzde ayrılmış süreyi bir kenara bırakın. Değişikliklerin etkisini ölçmek ve regresyonlara neden olmadan beklenen iyileştirmeleri sağladıklarından emin olmak için taban çizgilerinizi kullanın.

Performansı iş ölçümleriyle ilişkilendirin. Performans iyileştirmeye sürekli yatırımı gerekçelendirmek için gelir, kullanıcı etkileşimi, müşteri memnuniyeti ve dönüşüm oranı gibi iş sonuçlarına performans iyileştirmelerini bağlayın.

Note

İş yükünüzde mimari değişiklikler, yeni özellikler veya ölçeklendirme ayarlamaları gibi önemli değişikliklerden sonra taban çizgilerinizi düzenli olarak gözden geçirin ve güncelleştirin. Bu eylemi gerçekleştirerek performans hedeflerinizin ilgili kaldığından emin olursunuz.

Test varlıklarını geçerli kullanım desenleriyle uyumlu tutun

Performans testi varlıklarınız iş yükünüzün beklenen davranışı, kabul edilebilir performans eşikleri ve gerçekçi trafik desenleri hakkında kritik bilgiler içerir.

Test paketlerini türe göre düzenleyin. Yük testlerini, stres testlerini ve dayanıklılık testlerini ayrı paketlerde tutun. Karıştırmayın. Her türün farklı kurulum gereksinimleri, çalıştırma süreleri ve başarı ölçütleri vardır. Düzenli paketler, hedeflenen testleri çalıştırmayı, çalıştırmalar arasında sonuçları karşılaştırmayı ve her paketi bağımsız olarak korumayı kolaylaştırır.

Test verilerini düzenli olarak yenileyin. Eski test verileri gerçekçi olmayan sonuçlara yol açar. Test verilerini, veri modeliniz her değiştiğinde, veri hacimleri arttıkça veya kullanıcı demografik değerleri değiştiğinde geçerli üretim veri özelliklerini yansıtacak şekilde yeniden üretin.

İş yükünüz geliştikçe test senaryolarını gözden geçirin. Senaryolarınızın gerçek kullanımı yansıtmaya devam etmesini sağlamak için düzenli incelemeler zamanlayın. Senaryolar şu durumlarda eskimiş olur:

  • Kullanıcı davranışı zaman içinde kayıyor
  • Kullanıcı tabanınız büyüdükçe trafik desenleri değişir
  • Yeni özellikler farklı kullanım desenleri sunar
  • Yeni kapasite gereksinimlerini karşılamak için altyapı ölçeklenir.

Azure hizmetlerinin kolaylaştırılması

Azure Pipelines performans testini CI/CD işlem hattınızla tümleştirmenizi sağlar. Uygulamalarınızın performansını ve ölçeklenebilirliğini doğrulamak için işlem hattınıza adım olarak yük testi ekleyebilirsiniz.

Azure Chaos Studio denetimli hata ekleme denemelerini çalıştırabilmeniz için uygulamanıza gerçek dünya hataları eklemenize yardımcı olur. Denemeler, bulut uygulamanızı ve hizmet dayanıklılığınızı ölçmenize, anlamanıza ve geliştirmenize yardımcı olur.

Azure Yük Testi , herhangi bir uygulamada yüksek ölçekli yük oluşturan bir yük testi hizmetidir. Yük Testi, yük testlerini otomatikleştirmeye ve bunları sürekli tümleştirme ve sürekli teslim (CI/CD) iş akışınızla tümleştirmeye yönelik özellikler sağlar. Ortalama yanıt süresi veya hata eşikleri gibi test ölçütleri tanımlayabilir ve belirli hata koşullarına göre yük testlerini otomatik olarak durdurabilirsiniz. Yük Testi, bir yük testi sırasında Azure uygulama bileşenlerinin canlı güncelleştirmelerini ve ayrıntılı kaynak ölçümlerini sağlayan bir pano sunar. Zaman içindeki performans regresyonlarını anlamak için test sonuçlarını analiz edebilir, performans sorunlarını tanımlayabilir ve birden çok test çalıştırmasını karşılaştırabilirsiniz.

Azure İzleyici bulut ve şirket içi ortamlarınızdan telemetri verilerini toplamaya, analiz etmeye ve yanıtlamaya yönelik kapsamlı bir izleme çözümüdür. Application Insights , APM özellikleri sağlayan bir İzleyici uzantısıdır. Geliştirme ve test sırasında ve üretimde uygulamaları izlemek için Application Insights'ı kullanabilirsiniz.

Performans Verimliliği denetim listesi

Öneriler kümesinin tamamına bakın.