Bir uygulamanın ilk günlerinde her şey hızlı ve sorunsuz görünür. Birkaç yüz kullanıcı, birkaç bin sipariş; sunucu rahat nefes alır. Ancak işin doğası şudur: başarı, altyapıyı zorlar. Kampanya günü trafiğin on katına çıktığında ya da bir haber sitesine düştüğünüzde, dün rahat çalışan sistem bugün diz çökebilir. Ölçeklenebilirlik mimarisi, tam olarak bu anı öngörüp uygulamayı büyümeye hazır hale getirme disiplinidir. Bu yazıda ölçeklemenin iki temel yönünü, durumsuz tasarımın önemini ve darboğazları erken yakalamanın yollarını ele alacağız.

Ölçeklenebilirlik Tam Olarak Ne Demek?
Ölçeklenebilirlik (scalability), bir sistemin artan yükü, orantısız biçimde bozulmadan karşılayabilme kapasitesidir. Önemli olan yalnızca "daha fazla kullanıcıyı taşımak" değil, bunu yaparken yanıt sürelerini makul tutmak ve maliyeti kontrol altında bırakmaktır. İyi ölçeklenen bir sistemde yük iki katına çıktığında yanıt süresi ideal olarak neredeyse sabit kalır; kaynak ekledikçe kapasite öngörülebilir biçimde artar.
Kötü ölçeklenen bir sistemde ise küçük yük artışları bile üstel gecikmelere yol açar. Bunun nedeni genellikle mimarinin tek bir kritik noktaya bağımlı olması, yani darboğaz (bottleneck) barındırmasıdır. Ölçeklenebilirlik, bu bağımlılıkları tanıyıp ortadan kaldırma sanatıdır.
Dikey Ölçekleme (Scale Up)
Dikey ölçekleme, mevcut sunucuya daha fazla güç eklemektir: daha çok RAM, daha hızlı işlemci, daha iyi disk. En basit ve en hızlı çözümdür çünkü mimariyi değiştirmez; sadece kutuyu büyütürsünüz. Küçük ve orta ölçekli uygulamalarda genellikle ilk başvurulan yöntemdir.
Ancak dikey ölçeklemenin sert bir tavanı vardır. Bir noktadan sonra daha güçlü donanım ya çok pahalı hale gelir ya da fiziksel olarak imkânsızlaşır. Ayrıca tek sunucu tek arıza noktasıdır (single point of failure); o makine düşerse tüm sistem düşer. Bu yüzden dikey ölçekleme bir başlangıç stratejisidir, uzun vadeli bir hedef değil.
- Artı: Uygulama değişikliği gerektirmez, hızlı uygulanır.
- Artı: Operasyonel karmaşıklık düşüktür.
- Eksi: Donanım tavanına takılır, maliyet üstel artar.
- Eksi: Tek arıza noktası riski sürer.
Yatay Ölçekleme (Scale Out)
Yatay ölçekleme, tek bir dev sunucu yerine birden fazla küçük sunucuyu birlikte çalıştırmaktır. Yük, bu sunucular arasında bir yük dengeleyici (load balancer) aracılığıyla dağıtılır. Bir sunucu düşerse diğerleri işi sürdürür; kapasiteye ihtiyaç arttığında yeni bir sunucu eklersiniz. Modern bulut altyapıları ve büyük ölçekli sistemlerin temeli budur.
Dikey ölçekleme daha büyük bir kamyon almaktır; yatay ölçekleme ise daha fazla kamyon almaktır. Kamyon büyütmenin bir sınırı vardır, filo büyütmenin ise neredeyse yoktur.
Yatay ölçeklemenin bedeli karmaşıklıktır. Birden fazla sunucu aynı veriyi tutarlı görmeli, oturumlar herhangi bir sunucuda çalışabilmeli ve dağıtık sistemin kendine özgü sorunları (senkronizasyon, tutarlılık) yönetilmelidir. Bu yüzden uygulamanın en baştan bu modele uygun tasarlanması, sonradan zorla uyarlanmasından çok daha ucuzdur.
Durumsuz (Stateless) Tasarımın Kritik Rolü
Yatay ölçeklemenin temel taşı durumsuz uygulama tasarımıdır. Durumsuz bir uygulamada her istek kendi başına yeterlidir; sunucu, kullanıcıya dair bilgiyi kendi belleğinde tutmaz. Oturum verisi, dosyalar ve önbellek gibi "durum" barındıran her şey sunucunun dışına, paylaşılan bir katmana taşınır.
Örneğin PHP'de oturumlar varsayılan olarak dosyaya yazılır. Bu, tek sunucuda sorun değildir; ama üç sunuculu bir kümede kullanıcı her istekte farklı sunucuya düşerse oturumu kaybolur. Çözüm, oturumları merkezî bir depoya taşımaktır:
// php.ini veya çalışma zamanında
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://redis-host:6379');
// Artık oturum verisi tüm sunucularca paylaşılır
session_start();
$_SESSION['user_id'] = $userId;
Aynı mantık dosya yüklemeleri için de geçerlidir: yüklenen dosyalar yerel diske değil, ortak bir nesne deposuna (object storage) yazılmalıdır. Aksi halde bir sunucuya yüklenen dosya, diğer sunuculardan görünmez.

Veritabanı: En Sık Unutulan Darboğaz
Uygulama sunucularını yatay ölçeklemek görece kolaydır; asıl zorluk veritabanındadır. On uygulama sunucusu da olsa, hepsi tek bir veritabanına bağlanıyorsa darboğaz oraya kayar. Veritabanı ölçeklemesinde birkaç yaygın strateji vardır:
- Okuma kopyaları (read replicas): Okuma ağırlıklı sistemlerde, yazma ana sunucuya, okumalar kopyalara yönlendirilir. E-ticarette listeleme ve arama gibi işlemler bundan büyük fayda görür.
- Önbellekleme (caching): Sık istenen ve seyrek değişen veriyi Redis gibi bir katmanda tutarak veritabanına giden istek sayısını dramatik biçimde azaltmak.
- Bölümleme (sharding): Veriyi mantıksal parçalara bölüp farklı sunuculara dağıtmak. Güçlüdür ama karmaşıktır; yalnızca gerçekten büyük veri hacimlerinde gerekir.
- Sorgu ve indeks optimizasyonu: Çoğu ölçek sorunu, aslında yanlış yazılmış bir sorgu veya eksik bir indekstir. Ölçeklemeden önce burayı düzeltmek en ucuz kazançtır.
Darboğazları Erken Yakalamak
Ölçekleme, tahminle değil ölçümle yapılır. "Sanırım burası yavaşlar" demek yerine, yük testleri (load testing) ve izleme (monitoring) araçlarıyla sistemin gerçek davranışını görmek gerekir. Yapay olarak artırılan trafik altında hangi bileşenin önce doyduğunu görürsünüz; işte gerçek darboğaz odur, tahmin ettiğiniz yer değil.
- Yanıt sürelerini yüzdelik dilimlerle (p95, p99) izleyin; ortalama yanıltıcıdır.
- Veritabanı yavaş sorgu günlüğünü açık tutun ve düzenli inceleyin.
- CPU, bellek, disk G/Ç ve ağ trafiğini eş zamanlı izleyin.
- Kademeli yük testleriyle sistemin nerede kırıldığını önceden belirleyin.
Berasoft olarak geliştirdiğimiz özel yazılım projelerinde, mimariyi baştan durumsuz ve ölçeklenebilir kurmaya özen gösteririz; çünkü büyümeyi sonradan altyapıya sığdırmaya çalışmak, en pahalı teknik borçlardan biridir. Uygulamanızın büyümeye hazır olup olmadığını değerlendirmek isterseniz projenizi konuşalım.
Sonuç
Ölçeklenebilirlik, uygulama çökene kadar ertelenecek bir konu değil, baştan verilen bir tasarım kararıdır. Dikey ölçekleme hızlı bir başlangıç sunar; yatay ölçekleme ise gerçek büyümenin yoludur ve durumsuz tasarım, paylaşılan oturum/dosya katmanları, veritabanı stratejileri ile mümkün olur. En önemlisi, ölçeklemeyi tahminle değil ölçümle yönetmektir. Bugün küçük görünen bir uygulamayı yarının yüküne hazırlamak, ancak darboğazları önceden görüp mimariyi buna göre kurmakla olur. Doğru temel üzerine kurulan bir sistem, başarı geldiğinde onu bir krize değil, bir fırsata dönüştürür.
Bir sonraki projeniz için hazır mısınız?
Okuduklarınızı işinize uygulamak veya dijital dönüşümünüzü konuşmak isterseniz, ekibimiz bir mesaj uzağınızda.

Yorum Yap