Performans Yönetimi ve Ölçeklenebilirlik
Uygulama performansı önemi artan bir alandır. Günümüzde artık daha büyük ve daha büyük uygulamalar inşa ediliyor. Bugünün uygulamalarının işlevselliği arttıkça Performans Yönetimi daha kritik ve güçlü hale geliyor. Kurumlar artık uygulama ortamının merkezi parçaları olarak harici hizmetleri de entegre eden yüksek oranda dağıtılmış, büyük ölçekli mimariler kullanmaktadır. Bu uygulamaları optimize etmek için Kurumsal uygulamaların performansını nasıl ölçeceğimiz ve optimize edeceğimiz konusunda derin bilgiye ihtiyacımız var. Performansın nasıl optimize edileceğini teknik ayrıntılara girmeden önce, temelde yatan önemli kavramlara bakıyoruz.
Konunun sağlam bir şekilde anlaşılması, bir uygulamanın performansını daha verimli bir şekilde yönetmeye ve Performans yönetiminin daha az karmaşık görünmesine yardımcı olacaktır. Teknik altyapıyı anladıkça birçok şey birden bire çok daha basitleştiğini ve performans problemlerini çözme verimliliğinizin de arttığını görebilirsiniz.
Özellikle farklı ölçüm tekniklerinde bunların avantajları ve dezavantajlarının yanı sıra, genel ölçüm ve ölçüm hassasiyetinin tam olarak anlaşılması, ölçüm sonuçlarının yorumlanmasında anahtardır. Veri toplama tekniklerinin ve veri sunumunun derinlemesine anlaşılması, analiz görevlerimiz için uygun araçları seçmemize de yardımcı olur.
Performansı Ölçeklenebilirlikten Ayırma
Performans nasıl ölçülür, sorunlar nasıl belirlenir ve nasıl optimize edilir? Birçok insan bu terimleri eş anlamlı olarak kullanıyor. “uygulama performansının kötü” olduğunu söylediğinde, yanıt sürelerinin çok yüksek olduğu veya uygulamanın eşzamanlı çok sayıda kullanıcıdan daha fazlasına ölçeklenemeyeceği anlamına mı gelecektir? Belirtiler aynı olabilir, ancak bunlar bir uygulamanın farklı özelliklerini tanımlayan oldukça farklı iki sorundur.
Performansı tartışırken “Performans ve Ölçeklenebilirlik ” konularını dikkatlice ayırt etmeliyiz. Bu her zaman kolay bir görev değildir, çünkü aynı zamanda birbirleriyle ilişkilidirler ve biri diğerini etkileyebilir ve çoğu zaman da etkiler.
Performansı Tanımlama ve Ölçme
Uygulama durumu, taleplerin işlenme şeklini belirler. Mevcut yük, talebin karmaşıklığı ve diğer uygulama ve sistem faktörlerinin (CPU veya ağ kullanımı gibi) tümü, uygulama yanıt verme hızını etkiler. Uygulama performansını tanımlayan kavram ise yanıtın özellikleridir. Daha spesifik olarak, üç temel performans ölçütü vardır:
- Yanıt süresi:(Response Time) Bu, en yaygın olarak kullanılan performans metriğidir ve bir isteği işleme koymanın ne kadar sürdüğünün doğrudan bir ölçüsüdür.
- Yoğunluk:(Throughput) Uygulamanın tanımlı bir zaman aralığı içinde işleyebileceği istek sayısının doğrudan sayı karşılığıdır. Web uygulamaları için, sayfa gösterimi veya saniye başına istek sayısı, genellikle iş hacminin bir ölçüsü olarak kullanılır.
- Sistem Kullanılabilirliği:(System Availability) Genellikle uygulama çalıştırma süresinin, uygulamaya kullanıcılar tarafından erişilemeyen sürenin çıkarılmasıyla ifade edilir. Bu vazgeçilmez bir ölçüdür, çünkü sistem kullanılamadığında hem yanıt süresi hem de verim sıfırdır.
Performans, kaynak talepleri tarafından ve iş hacmine göre kaynak talepleri ölçülerek de tanımlanabilir. Bu, kaynak planlaması bağlamında önemli bir metrik haline gelir. Örneğin, tam uygulama ölçeklendirmesi elde etmek için hangi kaynakların gerekli olduğunu bilmeniz gerekebilir, bu da her bir kaynak türü için istek sıklığını bilmekle ilgilidir.
Bulut gibi “esnek” ortamlarda devreye alınan uygulamalar için kaynak tüketimi daha da önemlidir. Bu daha büyük ölçekli ve coğrafi olarak dağınık uygulamalarla, ölçeklenebilirlik ve performans ayrılmaz bir şekilde bağlantılı hale gelir ve bu, kaynak merkezli bir bakış açısından en kolay şekilde tanımlanabilir.
Kesinlikle unutulmaması gereken önemli bir nokta da, en fazla kaynak sağlanabilen uygulamaların bile sınırlı kaynakları olduğudur. Aynı zamanda, artan sistem yükü, gerekli olan her türlü kaynak için eşit olmayan taleplere ihtiyaç duyacaktır. Bu nihai, gerçek dünya performans ölçüsü haline gelir.
Kullanıcılar uygulamaya ne kadar çok istek gönderirse yük o kadar fazla olur. Sonuçlar, temel mekanikler kadar basit bir şekilde çizilebilir. Sürtünme veya yerçekimi kuvvetleri ile yük arttıkça, nihayetinde hareketli bir gövdenin bile performansını azalır.
Artan yük, bir uygulamanın yanıt süresini ve verimini etkiler.
Aynı şekilde, uygulama performansı her zaman kaynak kısıtlamalarından etkilenecektir. Kullanıcılarınız bu kısıtlamaları uygulama kararsızlığı olarak deneyimleyebilir, ancak bunun altında yatan neden, uygulama performansını tanımlayan ölçümlerden herhangi biri olabilir.
Bu nedenle, performansı zaman içinde ölçülebilir bir miktarın (yanıt, iş hacmi, kullanılabilirlik veya talepler) oranı olarak tanımlamak hayati önem taşır. Kişiler kolaya kaçıp kısaltma kullanmak isteyebilir, Örneğin : “Tepki süresi 2 saniyedir.” denebilir.
Bu ifade tehlikelidir. Düzgün tanımlayıcı bir bağlam olmadan, bu tür bir ifade anlamsızdır ve nihayetinde faydasızdır. Bunun yerine ayrıntılı olmakta fayda vardır: Örneğin : “Sistem yanıt süresi, 500 eşzamanlı istekte 2 saniyedir, CPU yükü% 50 ve bellek kullanımı% 92'dir.” Gibi ifadeler daha somut ve gerçekçi bir yaklaşımdır.
Uygulama Ölçeklenebilirliği Nasıl Sağlanır.
Kaynak ekleyerek performans sınırlarının üstesinden gelme yeteneği, ölçeklenebilirlik olarak tanımlanır. Belli bir noktada ne kadar donanımımız olursa olsun, performansın düştüğünü göreceğiz. Bu, artan yanıt süreleri veya verimde bir sınır anlamına gelir. Ek donanım eklemek sorunu çözecek mi? Evetse, ölçeklendirebiliriz. Değilse, bir ölçeklenebilirlik sorunumuz var.
Dikey Ölçekleme veya tek bir düğümü büyütme:
Donanım kaynaklarını mevcut bir düğüme ekleme işlemidir. Bu genellikle, sistem kaynaklarını dinamik olarak genişletmenin mümkün olduğu sanallaştırılmış ortamlarda kullanılır. Uygulama mimarisinde herhangi bir değişiklik gerektirmemesi net bir avantaja sahiptir. Aynı zamanda, ölçeklenebilirlik seviyesi her zaman donanımla sınırlı olacaktır.
Mevcut sunuculara donanım kaynakları ekleyerek dikey ölçeklendirme
Şekil 1.1: Mevcut sunuculara donanım kaynakları ekleyerek dikey ölçeklendirme
Yatay Ölçekleme veya düğüm ekleyerek ölçeklendirme:
İstekleri ek düğümler arasında göndermek, tek bir düğümün kaynaklarını artırmaktan daha fazla düğüm eklemek daha kolay olduğunda tercih edilen ölçeklendirme çözümüdür. Bu, özellikle bulut tabanlı ortamlar için geçerlidir. Sonunda, tek bir makinenin her zaman sınırlı kapasitesi olduğu için yine de yatay olarak ölçeklendirmemiz gerekir. Ek bir avantaj da, ucuz düğümlerin hem daha fazla yük devretme kapasitesi hem de geliştirilmiş uygulama kullanılabilirliği sağlamasıdır. Bariz dezavantaj, düğümlerin kolaylıkla eklenip kaldırılabilmesi için kümelerin tasarlanması gerektiğidir.
Yeni sunucular ekleyerek yatay ölçeklendirme, genişletme
Şekil 1.2: Yeni sunucular ekleyerek, ölçeklendirerek Yatay Ölçeklendirme
Bu iki ölçekleme yöntemini karşılaştırdığımızda, Dikey Ölçekleme ikisinden daha basittir ve bu nedenle daha kolay uygulanır. Yatay Ölçeklendirme, verilerin yeni düğüm yapılandırmasında yeniden dağıtılmasını ve senkronize edilmesini gerektirir. Düzgün planlama olmadan, ölçeklendirme için kümeleri güçlendirmek pahalı ve yıkıcı olabilir.
Ölçeklendirme Performans Sorunlarımızı Çözecek mi?
Bir uygulamayı kaynak ekleyerek ölçeklendirmek ideal bir durumdur, ancak bir noktada bu çok pahalı hale gelecektir. Ve artık, donanım eklemeyi, ölçeklendirmeyi veya mimarimizi değiştirmeyi düşünmemiz gereklidir.
Ancak çoğu zaman ölçeklenebilirlik sorunu donanımla ilgili değildir ve donanım eklemek yardımcı olmaz. Kaynakların aşırı yüklenmediğini gözlemlersek, bu genellikle senkronizasyonla ilgili bir sorunu gösterir ve bu genellikle bir performans sorunundan ziyade paylaşılan verilere serileştirilmiş erişimle ilgilidir. Kaynak eklemek yardımcı olmayacaktır çünkü darboğazın olduğu yer burası değildir.
Bir verinin güncelleme örneğini düşünürsek; bu güncelleme işleminin her zaman tutarlı olmasını istiyorsak, herhangi bir zamanda yalnızca bir işlem onu güncelleyebilir. Bu güncellemenin süresi, ölçeklenebilirlik sınırlarımızın nerede olduğunu gösterir. İşlem 200 milisaniye sürüyorsa, uygulamamızın ölçeklenebilirlik eşiği, mevcut donanımdan bağımsız olarak saniyede beş istektir.
Daha yüksek verim elde etmek istiyorsak, ölçeklenebilirliği artırmak yerine genel performansı iyileştirmemiz gerekir. Yukarıdaki verilen örnekteki güncelleme işlemlerini bir kuyruğa yerleştirebilir ve daha sonra bir noktada güncelleyebiliriz. Buna “nihai tutarlılık” denir.
Ancak bu yaklaşımla, bir ürünün belirli bir miktarının şu anda stokta olup olmadığını kontrol etmek artık mümkün değildir.
Bu örneğin de gösterdiği gibi, ölçeklenebilirlik kararları verirken bize rehberlik edecek gerçekten iyi performans ölçütlerine ihtiyacımız bulunmaktadır.