Azure Load Testing uygulamalarımız için yüksek ölçekli yük oluşturarak uygulama trafiğini simüle etmemize olanak tanımaktadır.

Azure Load Testing yük testleri için iki seçenek sunmaktadır. Bunlardan birincisi direkt olarak url girerek yük testi gerçekleştirmektir. Url bazlı yük testi gerçekleştirildiğinde Azure Load Testing otomatik olarak JMeter komut dosyası oluşturmaktadır. Daha gelişmiş olan diğer seçenek ise Apache JMeter test dosyasını konfigüre ederek oluşturulan JMeter test dosyası kullanarak yük testi oluşturmaktır.

Senaryomda ilk olarak JMeter test dosyası kullanarak yük testi uygulayacağım. Sonrasında ise url belirterek yük testi işlemi gerçekleştireceğim.

Azure yük testi sırasında istemci tarafı ve sunucu tarafı verileri toplanmaktadır.

İstemci tarafı ölçümlerinde sanal kullanıcı sayısı, istek yanıt süreleri, saniyedeki istek sayısı gibi değerler bulunmaktadır.

Sunucu tarafı ölçümleri uygulama bileşenleri hakkında bilgi sağlamaktadır. Örnek olarak veritabanı okuma sayısı, http yanıtlarının türü, kaynak tüketimi gibi değerler içermektedir.

Azure Load Testing kaynağında depolanan veriler, Microsoft tarafından yönetilen anahtarlarla otomatik olarak şifrelenir. Depolanan verilere örnek olarak Apache JMeter komut dosyası gösterilebilir..

Şimdi bir web uygulaması yayınlayarak performans durumunu analiz edeceğiz.

Azure Portal üzerinde bulunan Cloud Shell butonu veya https://portal.azure.com/#cloudshell/ aracılığıyla Cloud Shell açılır.
Aşağıda bulunan komutu kendi abonelik ortamımıza uygun bir şekilde düzenledikten sonra çalıştırılır.

az account set –subscription “Azure abonelik Id”

Azure Subcription Id bilgisine Portal üzerinde Subscriptions bölümünden veya Powershell üzerinde aşağıdaki komut yardımıyla ulaşılabilir.

Get-AzSubscription

Örnek web uygulamamız için kullanacağımız kaynağı aşağıdaki komutla beraber klonlayabiliriz.

git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git

Örnek uygulama, bir Azure App Service web bileşeninden ve bir Azure Cosmos DB veritabanından oluşan Node.js uygulamasıdır.

Uygulama dizinine erişim sağladıktan sonra deploymentscript isimli powershell script çalıştırılarak uygulama dağıtımı başlatılmış olur.

cd nodejs-appsvc-cosmosdb-bottleneck
.\deploymentscript.ps1

Powershell script çalıştırıldığında aşağıdaki bilgilerin girilmesi istenilmektedir;
Enter subscription Id: Azure abonelik kimliği
Enter webapp name: Yayınlanacak olan uygulama için benzersiz bir isim
Enter location: Uygulamanın bulunacağı konum. Varsayılan olarak East US konumu seçilidir.

Uygulama dağıtımı başarılı bir şekilde gerçekleştirilmiştir. Tarayıcının adres çubuğuna https://<yourappname>.azurewebsites.net yazarak yayınlanmış olan örnek uygulamaya erişim sağlanabilir.

Oluşturulmuş olan resource group içinde de kaynaklar görüntülenmektedir.

Web uygulamasını yayınladıktan sonra sırada yük testi işlemlerini gerçekleştirmek var. Azure Portal üzerinde bulunan arama kısmından veya All services kısmından Azure Load Testing bulunarak seçilir.

Açılan Azure Load Testing sayfasında Create ile yeni bir yük testi kaynağı oluşturma işlemi başlatılır.

Create a load testing resource penceresinde bulunan;
Subscription: Abonelik seçiminin yapılacağı kısımdır.
Resource group: Kaynağın bulunacağı resource group seçiminin yapılacağı kısımdır.
Name: Oluşturulacak olan load testing resource için tanımlayıcı isim verilir.
Location: Kaynağın bulunacağı lokasyon seçiminin yapıldığı kısımdır.

Encrytion penceresinde iki seçenek bulunmaktadır.
Microsoft-managed keys (MMK): Microsoft tarafından sağlanan anahtarlar ile yük testi kaynağında depolanan veriler otomatik olarak şifrelenmektedir.
Customer-managed keys (CMK): Özel olarak oluşturulan anahtarlar ile şifreleme yapılmaktadır.
Test işlemleri için Microsoft-managed keys (MMK) seçeneğini seçtikten sonra Review + create ile load testing resource kaynağı gözden geçirilerek kaynak oluşturma işlemi başlatılır.

reference: https://docs.microsoft.com/en-us/azure/load-testing/how-to-configure-customer-managed-keys?tabs=portal

Kaynağı oluşturmak için herhangi bir engel bulunmamaktadır. Create ile kaynak oluşturma işlemi başlatılır.

Kaynak oluşturma işlemi başarılı bir şekilde gerçekleştirilmiştir. Go to resource seçeneği ile oluşturulmuş olan kaynağa erişim sağlanır.

Öncelikli olarak JMeter test dosyası kullanarak test işlemi gerçekleştireceğimiz için Upload a JMeter script seçeneği seçilerek devam edilir.

Basics kısmında bulunan;
Test name: Gerçekleştirilecek olan teste verilecek olan tanımlayıcı isimdir.
Test description: Yapılacak yük testi için açıklama yapılmak isteniyorsa gerekli açıklamanın yapılacağı kısımdır.
Run test after creation seçeneği işaretli bir şekilde devam edilirse test yapılandırması bittikten sonra test işlemi otomatik olarak başlayacaktır.

Test plan kısmında yük testinde kullanılacak olan .jmx uzantılı test dosyası sisteme yüklenir.

Parameters adımında;
Name kısmında webapp yazılır.
Value: Yayınlanmış olan web sitesinin adresi yazılır.

Load penceresindeki Load configuration kısmında bulunan Engine instances kısmı yük testi için kaç tane test motorunun çalıştırılacağının belirleneceği alandır. Mevcut değer olan 1 seçeneği ile devam ediyorum.

Test criteria kısmında yapılacak olan testin başarılı ve başarısız olacağı durumlar belirlenebilir.
Gerçekleştirecek olduğum test için hata yüzdesi %10 dan büyük ise başarısız nitelendirilmesini istiyorum.

Monitoring kısmında Add/Modify seçeneği ile izlenecek olan kaynakların seçim işlemi gerçekleştirilir.
Review + create seçeneği ile ayarlar gözden geçirilir ve oluşturma işlemi başlatılır.

Testin oluşturulması için herhangi bir engel görüntülenmemektedir. Create seçeneği ile test oluşturma işlemi başlatılır.

Yük testini oluşturulduktan sonra test işleminin başlamasını tercih ettiğimiz için test otomatik olarak başlayacaktır.
Test sonuçları incelendiğinde Error yüzdesi 14.02 çıkmış bulunmakta ve test sonucu başarısız olarak sonuçlanmıştır.
İstemci ve Sunucu tarafında oluşan metrikler detaylı bir şekilde incelenmelidir.

Sunucu tarafındaki veriler incelendiğinde Normalized RU Consumption değerinin hızlı bir şekilde %100 kaynak kullanımı yaptığı görüntülenmektedir. Yüksek kaynak tüketimi veritabanı hatalarına neden olabilmektedir. Bu durum API tarafında gelen isteklerinde yanıt süresini uzatabilmektedir.

Yaşanan bu durumu çözümlemek için veritabanının kaynak değerini artırma işlemi gerçekleştireceğiz. Veritabanında Data Explorer altında bulunan Scale & Settings yapılandırma ayarı altındaki ölçeklendirme değerini 1000 olarak değiştirip Save butonu ile ayarları kaydediyoruz.

Database yapılandırma ayarlarını değiştirdikten sonra aynı test işlemini tekrarlıyoruz. Error yüzdelik seviyesinin 5.24 olarak oluştuğu görüntülenmektedir. Bu değere göre test sonucu başarılı olarak nitelendirilebilir.

Sunucu tarafında oluşan Normalized RU Consumption değerininde normal seviyeye geldiği görüntülenmektedir.

Şimdide URL bazlı bir yük testi işlemi gerçekleştireceğim. Load Testing Overview sayfasında bulunan Quick test seçilerek devam edilir.

Test details sayfasında bulunan;
Test URL: Test işlemi gerçekleştirilecek olan web sayfasının adresi girilir.
Number of virtual users: Sanal kullanıcı sayısının belirleneceği kısımdır. İzin verilen maksimum değer 11250 dir. Sanal kullanıcı sayısı test altyapısı örneği başına maksimum 250 değerini aşarsa yük testi birden çok test altyapısı sağlar ve yükü eşit olarak dağıtır. Örneğin 300 sanal kullanıcı her birinde 150 sanal kullanıcı bulunan 2 test motoruyla sonuçlanacaktır.
Test duration: Test süresinin saniye cinsinden belirlendiği alandır.
Ramp-up time: Testin toplam sanal kullanıcı sayısına ulaşması için saniye cinsinden hızlanma süresinin belirlendiği alandır.
Run test seçeneği ile yük testi işlemi başlatılır.

Yük testi işlemi tamamlanmıştır. Sonuçlarda olumsuz bir durum görüntülenmemektedir.

Bu makalede Azure Load Testing aracını kullanarak kaynakların yoğun yük altında çalışırken sergileyeceği durumları görüntüleyerek önceden önlem alınması gereken bir nokta varsa bunları tespit etmiş olduk.

reference: https://docs.microsoft.com/en-us/azure/load-testing

Bir sonraki makalede görüşmek üzere. Sağlıkla Kalın…

Yazar: Mutlu BALIK