Scaling nedir: Vertical ve Horizontal Scaling nasıl yapılır?

Emre Güney
2 min readSep 17, 2022

--

Vertical and Horizontal Scaling

Öncelikle konu hakkında temelimizi sağlamlaştırmak için Scaling nedir sorusuna cevap arayalım.

Geliştiriciler olarak geliştirdiğimiz ürünün, sağlıklı şekilde, mümkün mertebe en fazla kişi tarafından erişebilecek ortamda çalışmasını arzularız. Bazen ürünlerimiz beklediğimizden yada hazırlıklı olduğumuzdan çok fazla trafik alabilir.

Böyle durumlarda, geliştiriciler olarak durumun üstesinden gelmek için bir çok farklı yol izleriz. İşte böyle durumlarda ilk duyacağınız şey Scaling’dir.

Scaling ve Scalability nedir?

Scalability:

Elimizdeki server’ın gücü ile uygulamamızın sağlayabileceği maksimum karşılık verme seviyesidir. Uygulamamız sınıra ulaştığı artık daha fazla request’e cevap veremediği noktadır.

Scaling:

Kısaca eğer server’ınız artık limitlerine dayanmışsa, performans kayıpları hatta server’da yetmemezlikten dolayı sorunlar yaşanmaya başlandıysa yapacağımız şeyin adı Scaling’tir.

Böyle bir durumda mevcut ve beklentileri karşılayamayan sistemimizi büyütmemiz veya optimize etmemizin gerektiği aşikardır.

Scaling türleri: Vertical ve Horizontal Scaling nedir?

Vertical Scaling (scaling up):

Uygulamamızın scalability’sini arttırmak, daha fazla güce sahip olup daha fazla request’e cevap verebilmesini sağlamak için yapabileceğimiz işlemlerden biri budur. Temel olarak fiziksel bir çözümdür. Sistemimizin donanım gücünü arttırarak çözüme ulaşılır.

Horizontal Scaling (scaling out):

Vertical scaling’in aksine biraz daha karmaşık bir kavramdır. Sistemin yükünü bölüştürerek daha kararlı sistemler oluştururuz.

Vertical scaling’de tek bir makineyi yeni ve daha güçlü bileşenlerle besleyip genişliyorduk. Horizontal scaling’de ise tek bir makine yerine uygulamamızı parçalar halinde bölüyor ve farklı farklı cihazlarda çalıştırıyoruz. Aynı yazılımın birden fazla instance’ını alıp birden fazla makinede yayınlamak veya yazılım ile veritabanını farklı makinelere ayırmak buna bir örnektir. Burada önemli olan ayırma işlemi olsa da haberleşmenin kopmaması.

Vertical ve horizontal scaling arasındaki farklar nelerdir?

Veritabanı:

  • Horizontal scaling yaptığımızda, veritabanımız parçalar halinde makinelere dağılır. Her node, (her makine) veritabanı verilerinin bir kısmını barındırır.

Ayrıca database’imizi tamamen farklı bir cihazda tutarak, izolasyon yapmak da horizontal scaling bünyesinde bir çözümdür.

  • Vertical scaling de ise veritabanı ve uygulamamız tek bir makinede bulunur. Tek bir node’da bir bütün halinde çalışır. Bundan dolayı o makinenin CPU gücü, çekirdek sayısı, RAM belleği ne kadar güç sağlayabilecekse o kadar hızlı çalışır ve request’e cevap verebilir.

Downtime:

  • Horizontal scaling yaptığımızda, sistemi bir çok node halinde böldüğümüz için, node’ların birinde oluşacak sorun tüm sistemi etkilemeyecektir. Downtime açısından minimum seviyede zafiyet vermiş oluruz.
  • Vertical scaling de ise tek bir node olduğu için, o makinede oluşabilecek bir sıkıntı tüm sistemi etkiler ve bu bütün kullanıcılara sirayet eder.

Yönetmek:

Horizontal scaling’de sistemimizi, birden fazla makineye böldüğümüz için, bir uygulama yüklemek istediğimizde her biri için ayrı ayrı uğraşırız. Bakım yapılması gerektiğinde tek bir makine yerine birden fazla makineyle uğraşmak zorunda kalırız. Horizontal scaling, vertical’e göre daha az maintable ve daha complex’tir.

Maliyet:

Horizontal scaling’de uygulamamızı birden fazla yerde, birden fazla makinede tutacağımız için, tek başına çalışabilen birden fazla makine satın almamız gerekir. Belki her makine farklı bir konumda tutulacağı için her biri için ayrı bir yer kiralanmalı, her biriyle ilgilenecek eleman tutmak gerekebilir. Ayrıca tek bir makineyi elektrik ve internet açısından beslemek ile bir çok makineyi beslemek arasında büyük farklar olabilir. Kısaca horizontal scaling çok daha pahalıdır.

--

--