Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Bu yazıda basit bir kodun nasıl gerçek bir ürüne dönüştüğünü, insanların onu nasıl kullandığını ve bu süreçte sistem tasarımının neden kritik olduğunu öğreneceksin. Ayrıca ölçeklenebilirlik, sunucu yapısı ve performans gibi temel kavramları da sade bir şekilde anlayacaksın.
Şimdi şöyle bir düşün… bilgisayarında bir algoritma yazdın. Bu algoritma bir input alıyor ve sana bir output veriyor. Yani klasik bir fonksiyon gibi çalışıyor.
Ama bir süre sonra insanlar bunu kullanmak istiyor.
Burada kritik bir problem var:
Sen bilgisayarını herkese veremezsin.
İşte burada devreye API giriyor.
API (Application Programming Interface), senin yazdığın kodu internet üzerinden erişilebilir hale getirir.
Yani şöyle düşün:
Birisi sana “şu input’u işleyip sonucu ver” diye bir mesaj gönderiyor (request), sen de sonucu geri gönderiyorsun (response).
Bu noktada sen artık sadece kod yazan biri değilsin, bir servis sunuyorsun.
Şimdi şöyle bir problem var… bu sistemi kendi bilgisayarında mı çalıştıracaksın?
Aslında bu çok mantıklı değil. Çünkü:
Bu yüzden sistemler genelde cloud üzerinde çalıştırılır.
Cloud (bulut) dediğimiz şey aslında başkasına ait bilgisayarları kiralamaktır.
Yani şöyle düşün:
Sen kendi bilgisayarın yerine, dünyanın başka bir yerindeki güçlü bir bilgisayara bağlanıyorsun ve kodunu orada çalıştırıyorsun.
Örneğin Amazon Web Services gibi servisler sana bu altyapıyı sağlar.
Böylece:
Senin servisin çok kullanılmaya başladı diyelim.
Başta her şey güzel çalışıyordu ama şimdi sistem yavaşladı.
Sen de fark etmişsindir ki… tek bir bilgisayarın kapasitesi sınırlıdır.
İşte burada “scalability” yani ölçeklenebilirlik devreye girer.
Scalability, sistemin daha fazla kullanıcıyı kaldırabilme yeteneğidir.
Daha güçlü bir makine alırsın.
Yani şöyle düşün:
Küçük bir bilgisayar yerine daha büyük, daha hızlı bir bilgisayar kullanıyorsun.
Avantajları:
Dezavantajları:
Tek makine yerine birden fazla makine kullanırsın.
Yani şöyle düşün:
Tek kasiyer yerine 5 kasiyer açıyorsun.
Avantajları:
Dezavantajları:
Cevap: İkisi birlikte.
Aslında bu çok basit:
Her makineyi mümkün olduğunca güçlü yaparsın (vertical),
sonra da bunlardan birden fazla kullanırsın (horizontal).
Yani şöyle hayal edebilirsin:
Güçlü bilgisayarlardan oluşan bir ordu kuruyorsun.
Bu yaklaşım sayesinde:
Burada kritik nokta şu:
Her şeyin bir trade-off’u (bedeli) var.
Örneğin:
Yani sistem tasarımı aslında şu soruya cevap verir:
“Benim ihtiyacım ne ve buna en uygun denge ne?”
Aslında sistem tasarımı, basit bir kodun gerçek dünyada çalışabilecek bir ürüne dönüşme sürecidir. Önce kodunu API ile dışarı açarsın, sonra bunu güvenilir bir ortamda (cloud) çalıştırırsın. Kullanıcı sayısı arttıkça sistemi büyütmen gerekir ve burada dikey ve yatay ölçekleme seçenekleri devreye girer. Ama hiçbir çözüm kusursuz değildir; her zaman performans, maliyet ve karmaşıklık arasında bir denge kurman gerekir. İşte bu dengeyi kurma işi, sistem tasarımının özüdür.
Bu yazı System Design BASICS: Horizontal vs. Vertical Scaling videosundan ilham alınarak yazılmıştır.