Ölçeklenebilirlik
- İngilizcesi
- Scalability
- Okunuşu
- skeylıbilıti
Günlük kullanımda iki ad da yaygın.
Kısaca
Ölçeklenebilirlik, bir sistemin daha fazla kullanıcı ya da veri gibi artan iş yükünü, kaynak ekleyerek performansı düşmeden karşılayabilme yeteneğidir.
Ölçeklenebilirlik nedir?
Ölçeklenebilirlik, talep büyüdükçe bir sistemin ne kadar iyi başa çıktığını anlatır. Ölçeklenebilir bir uygulama, yanıt sürelerini ve hata oranlarını kabul edilebilir tutarak kaynak ekleyerek yüz kullanıcıdan bir milyon kullanıcıya çıkabilir. Web sunucuları, veritabanları ve kuyruklar dahil sistemin her katmanı için geçerlidir; hatta bunları sürdüren ekip ve kod tabanı için bile.
Ölçeklemenin iki ana yolu vardır. Dikey ölçekleme (scaling up), tek bir makineye daha fazla CPU çekirdeği, bellek ya da daha hızlı disk gibi daha fazla güç vermek demektir; basittir ama kesin bir tavanı vardır ve tek bir hata noktası bırakır. Yatay ölçekleme (scaling out) ise daha fazla makine eklemek ve işi bir yük dengeleyici (load balancer) ile aralarında paylaştırmak demektir; çok daha ileri gidebilir ve dayanıklılığı artırır ama uygulamanın buna göre tasarlanması gerekir; örneğin sunucuları durumsuz (stateless) tutmak ve oturumları paylaşılan bir önbellekte veya veritabanında saklamak gibi.
Yoğun bir restoran düşünün. Dikey ölçekleme daha hızlı bir aşçı tutmaktır, ki bu yalnızca bir noktaya kadar işe yarar; yatay ölçekleme ise daha fazla mutfak açmaktır, ki bu koordinasyon gerektirir ama çok daha fazla yemek müşterisine hizmet verebilir. Yaygın ölçekleme teknikleri arasında önbellekleme, okuma ağırlıklı trafik için veritabanı çoğaltma (replication), büyük veri kümelerini bölmek için sharding, trafik sıçramalarını emmek için mesaj kuyrukları ve sunucuları otomatik ekleyip çıkarmak için bulut otomatik ölçeklemesi (autoscaling) bulunur.
Ölçeklenebilirlik sıklıkla performansla karıştırılır. Performans, bir sistemin mevcut yük altında bir isteği ne kadar hızlı işlediğidir; ölçeklenebilirlik ise yük arttıkça bu performansı ne kadar iyi koruduğudur; hızlı bir uygulama yine de ağır trafik altında çökebilir. Ölçeklenebilirlik ayrıca, talep değiştikçe otomatik olarak büyüyüp küçülebilme yeteneği olan esneklikten (elasticity) de farklıdır.
Önemli noktalar
- Ölçeklenebilirlik, kaynak ekleyerek daha fazla yükü karşılayabilme yeteneğidir.
- Dikey ölçekleme (scaling up) tek makineye güç ekler ve kesin bir sınırı vardır.
- Yatay ölçekleme (scaling out) daha fazla makine ekler ve genellikle durumsuz servisler gerektirir.
- Önbellekleme, çoğaltma, sharding ve kuyruklar yaygın ölçekleme tekniklerindendir.
- Performans mevcut yükteki hızdır; ölçeklenebilirlik yük büyürken bu hızı korumaktır.
Örnek
# Vertical scaling: give one container more CPU and memory
docker run --cpus=4 --memory=8g my-app
# Horizontal scaling: run three identical copies of the web service
docker compose up --scale web=3
# In Kubernetes, change the number of copies (replicas) of a deployment
kubectl scale deployment/web-app --replicas=5Sık sorulan sorular
Yatay ve dikey ölçekleme arasındaki fark nedir?
Dikey ölçekleme, CPU, bellek ya da depolama ekleyerek tek bir sunucuyu büyütür; yatay ölçekleme ise daha fazla sunucu ekler ve işi aralarında böler. Dikey ölçekleme daha basittir, ancak yatay ölçekleme çok daha ileri gidebilir ve tek bir makinenin arızasından sağ çıkar.
Bir uygulamayı ölçeklemeyi ne zorlaştırır?
Yaygın engeller; kullanıcı oturumlarını yerel bellekte tutan sunucular, her isteğin bağlı olduğu tek bir veritabanı ve istek içinde çalışan yavaş görevlerdir. Servisleri durumsuz yapmak, önbellek ve okuma replikaları eklemek ve ağır işleri arka plan kuyruklarına taşımak yardımcı olur.
Mikroservisler bir sistemi ölçeklenebilir kılar mı?
Kılabilir, çünkü her servis bağımsız ölçeklenebilir, ama zorunlu değildir. İyi tasarlanmış bir monolit de yatay ölçeklenebilir ve mikroservisler küçük ekiplerin ihtiyaç duymayabileceği ağ ve operasyon karmaşıklığı ekler.
İlgili sayfalar
- Yük DengeleyiciDevOps ve Bulut, s. 54Yük dengeleyici, gelen trafiği birkaç arka uç sunucuya dağıtan bir sunucu ya da hizmettir; hiçbir sunucu aşırı yüklenmez ve uygulama erişilebilir kalır.
- ÖnbellekBackend ve API'ler, s. 34Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- ShardingVeritabanları, s. 28Sharding, bir veritabanının verisini shard adı verilen birkaç sunucuya bölerek ölçeklendirme yöntemidir; her biri toplamın yalnızca bir kısmını saklar ve işler.
- Veritabanı ReplikasyonuVeritabanları, s. 41Veritabanı replikasyonu, verinin bir sunucudan diğerlerine sürekli kopyalanmasıdır; böylece birkaç sunucu güvenilirlik ve ölçek için aynı veriyi tutar.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- Bulut BilişimDevOps ve Bulut, s. 5Bulut bilişim, sunucu, depolama ve veritabanı gibi bilişim kaynaklarının internet üzerinden, kullandığın kadar öde modeliyle talep üzerine sunulmasıdır.
- Yatay ÖlçeklemeYazılım Mimarisi, s. 47Yatay ölçekleme (scale out), bir sistemin kapasitesini tek bir makineyi büyütmek yerine daha fazla makine ekleyip işi onlara dağıtarak artırır.
- Dikey ÖlçeklemeYazılım Mimarisi, s. 11Dikey ölçekleme (scale up), daha fazla makine eklemek yerine tek bir makineye daha fazla CPU, bellek ya da daha hızlı depolama vererek kapasiteyi artırır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin