Kaynakları ölçeklendirme
- 11 dakika
Bulutun önemli avantajlarından biri, sistem kaynaklarının talebe göre ölçeklendirilebilmesidir. Ölçeği artırma (daha büyük kaynaklar sağlama) veya ölçeği genişletme (ek kaynak sağlama), kapasitenin artırılması ya da iş yükünün daha geniş bir tabana dağıtılması sayesinde kullanımı azaltarak tek bir kaynaktaki yükün azaltılmasına yardımcı olabilir.
Ölçeklendirme sayesinde şimdi daha fazla sayıda isteğe hizmet verilebildiğinden, aktarım hızı artırılarak performansın artması sağlanabilir. Bu durum ayrıca yoğun kullanım dönemlerinde tek bir kaynak için kuyruğa alınan istek sayısını azalttığından bu dönemlerde gecikme süresinin azaltılmasına da yardımcı olabilir. Ayrıca bu, kaynağın kırılma noktasına ulaşılmaması için kaynak kullanımını azaltarak sistemin güvenilirliğinin artırılmasına yardımcı olabilir.
Bulut, daha yeni veya daha iyi kaynakları kolayca sağlama imkanı sunuyor olsa da maliyetin her zaman dikkate alınması gereken bir faktör olduğunu unutmamak gerekir. Bu nedenle, ölçeği artırma/genişletme işlemleri faydalı olsa da maliyet tasarrufu sağlama açısından ölçeği azaltma/daraltma işlemlerinin yapılması gereken zamanı belirlemek de önemlidir. N katmanı uygulamasında, ister veri katmanı, isterse sunucu katmanı olsun, hangi katmanın ölçeklendirileceğinin ve nerede performans sorunlarının olduğunun belirlenmesi önemlidir.
Bir sistemin ölçeklendirme unsurunun, tutarlı bir uç noktanın ardına saklanarak maskelenmesine yardımcı olan yük dengeleme (daha önce bunu ele almıştık) sayesinde kaynakların ölçeklendirilmesi kolaylaşır.
Ölçeklendirme stratejileri
Yatay ölçeklendirme (ölçeği genişletme ve daraltma)
Yatay ölçeklendirme, sisteme ek kaynakların eklendiği veya gereksiz kaynakların sistemden kaldırıldığı bir stratejidir. Bu ölçeklendirme türü, sistem yükünün öngörülemez olduğu ve tutarsız şekilde dalgalandığı durumlarda hizmet katmanı için faydalıdır. Dalgalanan yükler söz konusu olduğunda önemli olan, tüm yükleri işlemek için doğru miktarda kaynağı verimli şekilde sağlamaktır.
Bunu zorlu bir görev haline getiren noktalardan birkaçı, bir örneğin başlatma süresi, bulut hizmeti sağlayıcısının fiyatlandırma modeli ve zamanında ölçeğin genişletilememesi nedeniyle hizmet kalitesindeki (QoS) düşüşten kaynaklanan olası gelir kaybıdır. Örnek olarak, aşağıdaki yük düzenini ele alalım:
Şekil 6: Örnek istek yük deseni
Amazon Web Services hizmetini kullandığımızı varsayalım. Her bir zaman biriminin 3 saatlik bir süreye karşılık geldiğini ve tek bir sunucunun 5.000 isteğe hizmet vermesi gerektiğini düşünelim. 16 ila 22 numaralı zaman birimleri sırasındaki yükü dikkate alırsanız, muazzam bir yük dalgalanması olduğunu fark edersiniz. 16 numaralı zaman biriminde talebin düştüğünü algılayıp ayrılan kaynakların sayısını azaltmaya başlayabiliriz. 3 saatlik zaman aralığında kabaca 50.000 istekten neredeyse 0 isteğe düşüş yaşadığımızdan, teorik olarak 16 numaralı zaman biriminde 10 örnek maliyetinden tasarruf edebiliriz.
Şimdi, her bir zaman biriminin 20 dakikalık süreye denk geldiğini varsayalım. Bu durumda, 16 numaralı zaman birimindeki tüm kaynakların azaltılıp 20 dakika sonra yeni kaynakların eklenmesi durumunda, AWS her bir işlem örneğini saatlik olarak faturalandıracağından, tasarruf sağlanması yerine maliyet artırılır.
Yukarıda belirtilen iki noktaya ek olarak, bir hizmet sağlayıcısının, 100.000 istek yerine yalnızca 90.000 istek için kapasitesi olduğundan, 20 numaralı zaman biriminde daha düşük hizmet kalitesi sağlaması nedeniyle ortaya çıkacak kayıpları da değerlendirmesi gerekir.
Ölçeklendirme, trafiğin özelliğine ve web hizmetinde oluşturduğu yüke bağlıdır. Trafik tahmin edilebilir bir desen izlerse (örneğin, akşam bir web hizmetinden film akışı yapma gibi insan davranışlarına bağlı olarak), QoS'yi korumak için ölçeklendirme tahmine dayalı olabilir. Ancak çoğu durumda trafik tahmin edilemez ve yukarıdaki örneklerde gösterildiği gibi ölçeklendirme sistemlerinin farklı ölçütlere göre reaktif olması gerekir.
Dikey ölçeklendirme (ölçeği artırma ve azaltma)
Hizmet sağlayıcıları için, diğerlerinden daha öngörülebilir olan belirli yük türleri vardır. Örneğin, geçmiş desenlere bakarak istek sayısının her zaman 10.000 - 15.000 arasında olacağını biliyorsanız, 20.000 isteğe hizmet verebilen tek bir sunucunun hizmet sağlayıcının amaçları için yeterince iyi olacağını rahatlıkla düşünebilirsiniz. Bu yükler gelecekte artabilir, ancak tutarlı bir şekilde arttığı sürece hizmet, daha fazla isteğe hizmet verebilecek daha büyük bir örneğe taşınabilir. Bu, düşük miktarda trafikle karşılaşan küçük uygulamalar için uygundur.
Dikey ölçeklendirmedeki zorluk, her zaman kapalı kalma süresi olarak kabul edilebilecek bir geçiş süresinin söz konusu olmasıdır. Bunun nedeni, küçük örnekteki tüm işlemlerin daha büyük olan örneğe taşınması gerekmesidir ve geçiş süresi yalnızca birkaç dakika olsa da bu süre boyunca Hizmet Kalitesi düşer.
Ayrıca, çoğu bulut sağlayıcısı, bir kaynağın işlem gücünü iki katına çıkararak işlem gücü artan işlem kaynakları sunar. Bu nedenle, ölçeği artırmadaki taneciklik, yatay ölçeklendirmedeki kadar ince değildir. Dolayısıyla yük öngörülebilir olsa da ve hizmetin popülerliği arttıkça öngörülebilirliği artsa da, çoğu hizmet sağlayıcısı, dikey ölçeklendirme yerine yatay ölçeklendirmeyi tercih etmektedir.
Ölçeklendirmeyle ilgili dikkat edilmesi gerekenler
İzleme
İzleme, kaynakların etkili şekilde ölçeklendirilmesindeki en kritik öğelerden biri olup sistemin hangi kısımlarının, ne zaman ölçeklendirilmesi gerektiğini yorumlamak için kullanılabilecek ölçümlere sahip olmanıza olanak sağlar. İzleme seçeneği, trafik düzenlerinin veya kaynak kullanımının analiz edilmesini sağlayarak Hizmet Kalitesini ve kârı en üst düzeye çıkarma amacıyla kaynak ölçeklendirme zamanlaması ve maliyeti konusunda veriye dayalı bir değerlendirme yapılmasını sağlar.
Kaynakların ölçeklendirilmesini tetikleme amacıyla izlenen birçok farklı ölçüt vardır. En yaygın ölçüm, kaynak kullanımıdır. Örneğin izleme hizmeti, her bir kaynak düğümündeki CPU kullanımını izleyebilir ve kullanımın çok yüksek veya çok düşük olması durumunda kaynakları ölçeklendirebilir. Örneğin kaynak kullanımının %95’ten fazla olması, sistemin ağır yük altında olduğunu gösterir ve bu durumda daha fazla kaynak eklemek iyi bir fikir olacaktır. Hizmet sağlayıcıları, bu tetikleyici noktalarını belirlemek için genellikle kaynak düğümlerinin hata noktalarını analiz edip düğümlerin hata vermeye başladığı anı belirleyerek farklı yük düzeylerindeki davranışlarını inceler. Maliyet nedeniyle her kaynağı en verimli şekilde kullanmak önemli olsa da işletim sisteminin ek etkinlikler gerçekleştirebilmesi amacıyla biraz pay bırakılması önerilir. Benzer şekilde, örneğin, kullanımın %50’nin altında olması da tüm kaynak düğümlerine ihtiyaç duyulmadığını ve bazılarının sağlamasının kaldırılabileceğini gösterir.
Uygulamada hizmet sağlayıcıları, kaynakların ölçeklendirilmesi gereken zamanı belirlemek için genellikle kaynak düğümün farklı ölçümlerini izler. CPU kullanımı, bellek tüketimi, aktarım hızı ve gecikme süresi bunlardan bazılarıdır. Azure, Azure kaynaklarını izleyebilen ve bu tür ölçümleri sağlayabilen ek bir hizmet olarak Azure İzleyici’yi sunar.
Durum bilgisi olmaması
Durum bilgisi olmayan hizmet tasarımı, ölçeklenebilir mimariye daha uygundur. Durum bilgisi olmayan hizmet temelde istemci isteğinde sunucunun isteği yanıtlaması için gerekli olan tüm bilgilerin yer alması anlamına gelir. Sunucu, istemciyle ilgili bilgileri örnekte depolamaz ve oturumla ilgili bilgileri sunucu örneğinde depolar.
Durum bilgisi olmayan hizmet, kaynakları istediğiniz zaman değiştirmenize yardımcı olur ve sonraki istekler için istemci bağlantısının bağlamını (durumunu) korumak üzere herhangi bir yapılandırma yapmanızı gerektirmez. Durum bilgisi olan hizmetlerde kaynak ölçeklendirme için mevcut düğüm yapılandırması bağlamını yeni düğüm yapılandırmasına aktaracak bir strateji belirlenmesi gerekir. Durum bilgisi olan hizmetleri uygulamaya yönelik belirli teknikler vardır. Örneğin, Belleğe yüklenmiş ağ önbelleği tutularak bağlamın sunucular arasında paylaşılması sağlanabilir.
Neyin ölçeklendirileceğine karar verme
Hizmetin doğasına bağlı olarak, gereksinime göre farklı kaynakların ölçeklendirilmesi gerekir. Sunucu katmanı için, iş yükleri arttıkça, uygulama türüne bağlı olarak, CPU, bellek, ağ bant genişliği veya bunların tümü için kaynak çekişmesi artabilir. Trafiği izlemek, hangi kaynağın kısıtlanmış olduğunu belirlememize ve bu belirli kaynağı uygun şekilde ölçeklendirmemize olanak sağlar. Bulut hizmeti sağlayıcıları, yalnızca işlemi veya belleği ölçeklendirmek için ölçeklenebilirlik tanecikliği sağlamaz, özellikle yoğun işlem kullanan veya yoğun bellek kullanan yükleri karşılayan farklı işlem örneği türleri de saklar. Bu nedenle de, örneğin, bellek açısından yoğun iş yükleri olan bir uygulama için kaynakların bellek için iyileştirilmiş örneklere ölçeğinin artırılması önerilir. Mutlaka yoğun işlem kullanmayan veya yoğun bellek kullanmayan çok sayıda isteğe hizmet vermesi gereken uygulamalar için, birden çok standart işlem örneğine ölçeği genişletme daha iyi bir strateji olabilir.
Donanım kaynaklarının artırılması, hizmet performansının artırılması için her zaman en iyi çözüm olmayabilir. Hizmet içinde kullanılan algoritmaların verimliliğinin artırılması da kaynak çekişmesinin azaltılmasına yardımcı olup kullanımı artırarak fiziksel kaynakları ölçeklendirme gereksinimini ortadan kaldırabilir.
Veri katmanını ölçeklendirme
Veritabanı veya depolama sisteminde gerçekleştirilen okuma ve yazma (veya ikisi birden) sayısının yüksek olduğu veri odaklı uygulamalarda her bir isteğin gidiş dönüş süresi, sabit diskin G/Ç okuma ve yazma süresiyle sınırlıdır. Daha büyük örnekler, okumalar ve yazmalar için daha yüksek G/Ç performansı sunarak sabit diskteki arama sürelerini kısaltabilir ve bu sayede hizmetin gecikme süresinde büyük bir gelişme elde edilebilir. Veri katmanında birden çok veri örneğinin olması, yük devretme yedekliliği sağlayarak uygulamanın güvenilirliğini ve kullanılabilirliğini artırabilir. Verilerin birden çok örnek arasında çoğaltılması, istemciye fiziksel olarak yakın bir veri merkezi tarafından hizmet veriliyor olması durumunda ağ gecikme süresinin kısaltılmasında ek avantajlar sunar. Verilerin farklı kaynaklara bölümlenmesi veya parçalanması da bir diğer yatay veri ölçeklendirme stratejisidir. Bu stratejide veriler, birden fazla örneğe çoğaltmak yerine birkaç bölüme ayrılır ve birden fazla veri sunucusunda depolanır.
Veri katmanını ölçeklendirme konusunda karşılaşılan ek zorluk tutarlılık (tüm çoğaltmalardaki okuma işlemi aynıdır), kullanılabilirlik (okuma ve yazma işlemleri her zaman başarılı olur) ve bölüm toleransı (hatalar düğümler arasında iletişimi engellediğinde sistemdeki garantili özellikler korunur) korumaktır. Bu durum genellikle CAP teoremi olarak adlandırılır ve bu da dağıtılmış bir veritabanı sisteminde bu üç özelliği de elde etmenin oldukça zor olduğunu ve bu nedenle çoğu durumda sistemin bu özelliklerden ikisinin elde edilebileceğini ifade eder. İlerleyen modüllerde veritabanı ölçeklendirme stratejileri ve CAP teoremi hakkında daha fazla bilgi edineceksiniz.