Ölçeklendirme Kübü (Scale Cube)

Abdullah Pazarbaşı
5 min readSep 4, 2023

--

Ölçeklendirme kübü, sistem ölçeklendirme yaklaşımları ve stratejilerini sistematik bir tarzda düşünebilmeye yardımcı olur.

Sistem Ölçeklendirilebilirliği (System Scalability) Nedir?

Otomasyon, uygulama, ağ, veritabanı veya işlemci gibi bir sistemin, yükü arttıkça veya azaldıkça performansını koruması için gerçekleştirilmesi icap eden büyütme-küçültme, artırma-azaltma, ekleme-çıkarma tarzı müdahalelere ne kadar açık olduğunun ifadesidir.

Ölçeklendirme ihtiyacına etki eden faktörler temel olarak;

  • Yüksek erişilebilirlik (high availability)
  • Düşük gecikme (low latency)
  • Yüksek işleme kapasitesi (high throughput)

Bu makale canlıdır. Zaman içerisinde güncellenebilir.

Temel İki Ölçeklendirme Yolu

Yatay Ölçeklendirme (Horizontal Scaling)

Bir sistemde mevcut bulunan sunucu, sağlayıcı veya barındırıcının aynısından o sisteme eklemek (scale-out) veya o sistemde mevcut bulunan sunucu, sağlayıcı veya barındırıcıyı sistemden çıkarmaktır (scale-in). Örneğin, node eklemek, pod eklemek gibi…

Yatay ölçeklendirmenin avantajları

  • Esneklik sağlar. İhtiyaca göre hızla ölçeklendirme yapılabilir, ölçeklendirme otomatikleştirilebilir.
  • Yüksek erişilebilirlik (high availability) sağlar. Örneklerden biri arızalandığında diğerleri erişilebilirliği devam ettirebilir.
  • Birden fazla örnek arasında yük dengeleme (load balancing) de mümkün olur. Ortalama performansı artırmanın ötesinde asgari performansın üzerinde kalmak mümkün olur.
  • Kolay yedekleme imkanı sağlar. Aktif işlevsellikler veya sistem state’leri, kolayca yedeke çekilebilir veya dönüştürülebilir.
  • Paralel işleme (parallel processing) imkanı sağlar. İşlemler birden fazla sunucu, sağlayıcı veya barındırıcı üzerinde aynı anda (eş zamanlı bile değil) gerçekleştirilebilir.

Yatay ölçeklendirmenin dezavantajları

  • Yüksek maliyete (high cost) sebep olur. Birden fazla örnek muhtemelen ilave donanımsal kaynak gerektirir. Ayrıca ilave yazılım lisansı da gerektirebilir.
  • Karmaşıklık (complexity) getirir. Sistemi yapılandırmak ve yönetmek az daha ya da çok daha karmaşık hale gelir.
  • Veri tutarsızlığı (data inconsistency) ihtimali büyür. Doğru tasarlanmamış veya doğru yapılandırılmamış bir sistemde veri tutarsızlığı riski nispeten yüksek olur. CAP teoremi (CAP theorem)göz önünde bulundurulmalıdır.
  • Senkronizasyon anındaki veya yük dengeleyicisi (load balancer) gibi ara katmanlar ile iletişimdeki ağ gecikmeleri (network latencies) yan etkilerdir.
  • Ölçeklenebilirliğe uygun tasarlanmamış bir yazılım, tasarım fazında veya çalışma zamanında (runtime) problem çıkarabilir. Yazılımın uyumluluğu (compatibility) kritik önemdedir.
  • Organizasyonel ölçeklendirmeye (organizational scaling) karşılık gelmez.

Dikey Ölçeklendirme (Vertical Scaling)

Kapasite ayarlama olarak da ifade edilebilir. Bir sistemde mevcut bulunan sunucu, sağlayıcı veya barındırıcının kapasitesini büyütmek (scale-up) veya küçültmektir (scale-down). Örneğin, RAM bellek kapasitesini artırmak, işlemci çekirdeği eklemek gibi…

Dikey ölçeklendirmenin avantajları

  • Basitlik (simplicity) barındırır. Mevcut platforma daha fazla donanımsal kaynak eklemek iş gücü açısından kolaydır.
  • Ağdaki terminal sayısının artması yerine terminalin kapasitesinin artması nispeten düşük gecikme (low latency) demektir.
  • Yapılandırmada çok fazla şey değişmeyecektir. Yani uyumluluğa (compatibility) olumsuz etki olmayacaktır.
  • Tek örnek veya daha az örnek üzerinde işleme daha yüksek veri tutarlılığı (high data consistency) demektir.

Dikey ölçeklendirmenin dezavantajları

  • Fiziksel kaynak eklemenin sınırı vardır. Bir noktaya gelindiğinde daha fazla kaynak eklenemeyebilir.
  • Limitlere uzak iken kaynak eklemek her ne kadar kolay olsa da kesinti (downtime) icap ettirir. Restart şarttır.
  • Bir seviyeden sonra katlanan donanım maliyeti yine yüksek maliyet (high cost) demektir.
  • Sınırlı sayıdaki örneklerden biri arızalandığında dayanıklılık (resilience) dramatik olarak düşer ve hele ki örnek tekse, o tek örnek arızalandığında sistem çöker. Bunlar her halükarda düşük erişilebilirlik (low availability) demektir.
  • Nispeten daha dar alanda daha yoğun donanım, enerji aktarımı ve soğutma maliyetini büyütür. Bu da ısı ve güç meseleleri (heat and power issues) demektir.
  • Organizasyonel ölçeklendirmeye (organizational scaling) karşılık gelmez.

Ölçeklendirme Kübü, Meselenin Neresinde?

Dağıtık sistemler (distributed systems) göz önünde bulundurulduğunda ölçeklendirme mevzusu derinleşir.

Ölçeklendirme Kübü
Ölçeklendirme Kübü (Scale Cube)

“Kısımlar” ve “ayrışmalar” işin içine girdiğinde farklı boyutlar söz konusu olur.

Ölçeklendirme kübü, sistem ölçeklendirme konusunda bir çerçeve sağlayan bir kavramdır. “The Art of Scalability” adlı kitapta tanıtılmıştır ve üç boyutlu bir küp şeklinde görselleştirilir. Ben küp çizmeyi tercih etmiyorum eksenlere odaklanmayı sağlamak açısından. Her bir eksen, ölçeklendirme için farklı bir yaklaşımı temsil eder.

X-ekseni ölçeklendirme ile yatay ölçeklendirme temelde aynı şeydir. Fakat y-ekseni ölçeklendirme ile dikey ölçeklendirme aynı şey değildir.

X-Ekseni Ölçeklendirme (X-Axis Scaling)

Yatay ölçeklendirme olarak da ifade edilir. Yukarıda bahsetmiştik. Klonlama (Cloning), duplikasyon (duplication), çoğaltma (replication) bu yaklaşıma dahildir. İlave örnek vermek gerekirse, bir master’ın slave’leri arasına slave eklemek.

Y-Ekseni Ölçeklendirme (Y-Axis Scaling)

Farklıları ayrıştırma (splitting different things) veya işlevsel dekompozisyon (functional decomposition) olarak da adlandırılır. Mikrohizmetlere ayrıştırma (splitting into microservices) da bu yaklaşıma dahildir. Bu yaklaşımla sistem, farklı işlevsellik barındıran bileşenlerine bölünür. Mesela monolitik bir uygulama, mikroservislerden oluşan bir uygulama sistemine dönüştürülür. Dinamik bir ölçeklendirme tarzı değildir fakat bunun sayesinde işlevsellikler ayrı ayrı yatay ölçeklendirilme şansı elde eder. Örneğin, bir e-ticaret otomasyon sisteminde ürün listeleme ve ödeme kapısı hizmetlerinin ayrı olması, bu hizmetlerin bağımsızca yatay ölçeklendirilebilirliği demektir.

Y-ekseni ölçeklendirmenin avantajları

  • Her bileşenin veya işlevin ayrı ayrı ölçeklendirilmesi mümkündür. Bu sayede kaynak kullanımı daha verimli olur.
  • Farklı bileşenler farklı runtime environment’lara dağıtıldığında yük dağılımı daha dengeli olur. İyileştirilmiş yük dağılımı (improved load distribution) demektir.
  • Bağlam (context) bölüneceğinden dolayı önbellek isabet oranları (cache hit rates) olumlu etkilenir.
  • Bir bileşen arızalandığında arıza genellikle o bileşenle sınırlı kalır. Bu da hata yalıtımı (fault isolation) demektir.
  • Organizasyonel ölçeklendirmeye (organizational scaling) karşılık gelebilir.
  • Farklı ekipler, farklı bileşenler üzerinde bağımsız bir şekilde çalışabilirler. Bu da geliştirme hızına olumlu etki eder.
  • Her bir bileşen, en uygun olanı hangisi ise o teknoloji yığını ile geliştirilebilir. Bu da teknoloji çeşitliliğinin (technology diversity) önünü açar.

Y-ekseni ölçeklendirmenin dezavantajları

  • Sistemin bileşenlerine ayrıştırılması, sistem karmaşıklığını (complexity) artırabilir.
  • Gerçekleme (implementation) zaman alır.
  • Farklı bileşenler arasındaki iletişim, ağ gecikmelerine (network latencies) yol açabilir.
  • Farklı bileşenler, farklı veritabanlarını kullanabilir. Bu da veri tutarsızlığına (data inconsistency) yol açabilir.
  • Her bir bileşenin ayrı ayrı yönetilmesi gerekebilir. Bu da operasyonel karmaşıklığa yol açabilir. Yönetim zorluğu (management overhead) demektir.
  • Bileşenler arası iletişim, güvenlik açıklarına yol açabilir. Güvenlik riskleri (security risks) yükselir.

Z-Ekseni Ölçeklendirme (Z-Axis Scaling)

Benzerleri ayrıştırma (splitting similar things) olarak da ifade edilir. Bölümleme (partitioning) ve parçalama (sharding) bu yaklaşıma dahildir. Tabi buradaki bölümlemeden kastettiğimiz yatay bölümlemedir (horizontal partitioning). Benzerleri ayrıştırma, temelde “kısımlara ayırma” meselesidir. Kısımlara ayırma, önceden belirlenmiş anahtar veya özellik seti bazlı yapılır. Bu sayede, her bir kısım (her bir partition, her bir shard veya her bir availability zone) ilgili baza sahip istemciye hizmet eder. Örneğin, uluslararası hizmet veren bir konaklama rezervasyon otomasyonu sisteminde, otel odası listeleme hizmeti, “geo-partitioning” yaklaşımı ile pazar bölgesi (market zone) bazlı shard’lara ayrıştırıldığında farklı pazarların farklı talep yoğunluklarına göre yatay ölçeklenebilirlikte optimizasyon sağlanabilir.

Z-ekseni ölçeklendirmenin avantajları

  • Her bir örnek, kendi veri kümesine hizmet ettiği için, veri yalıtımı (data isolation) daha kolay sağlanır.
  • Bir örnekte meydana gelen bir arıza, sadece o örneği etkiler ve diğer örnekler üzerinde herhangi bir etkisi olmaz. Böylece hata yalıtımı (fault isolation) sağlanmış olur.
  • Eğer bir örnek çökerse, sadece o örneğin hizmet verdiği istemci kümesi etkilenir. Diğer istemci kümeleri için erişilebilirlik devam eder. Bu da yüksek erişilebilirlik (high availability) anlamına gelir.
  • Veri alt setleri (data subsets), nispeten daha dar olacağından dolayı sorgu cevap süresi nispeten düşük olur. Bu da gecikmeyi (latency) düşürmeye olumlu etki eder.
  • Farklı örnekler arasında yük dağılımı (load balancing) daha kolay ve etkili bir şekilde yapılabilir.

Z-ekseni ölçeklendirmenin dezavantajları

  • Örnekler arasındaki veri senkronizasyonu (data synchronization) karmaşık olabilir. Çünkü artık araya parçalama anahtarları (sharding keys) veya parçalama aralıkları (sharding ranges) girmiştir.
  • Gerçekleme (implementation) zaman alabilir.
  • Her örnek için ayrı ayrı donanımsal kaynaklar gerekebilir, bu da maliyeti (cost) artırabilir.
  • Daha fazla örnek, veri senkronizasyonu ve yük dağılımı bağlamında daha fazla ağ terminali demek, daha fazla ağ terminali daha fazla ağ gecikmesi (network latency) demektir.
  • Kapasite planlaması (capacity planning) karmaşıklaşabilir.
  • Organizasyonel ölçeklendirmeye (organizational scaling) karşılık gelmez.

Müellife LinkedIn profili üzerinden ulaşabilirsiniz.

--

--