İstemci-Sunucu Mimarisi: İnternette Etkileşim Nasıl Çalışır?
İstemci-sunucu mimarisi, görevlerin hizmet veya kaynak sağlayıcıları (sunucular) ile tüketiciler (istemciler) arasında dağıtıldığı bir bilgisayar ağı oluşturma modelidir. İstemci bir istek gönderir, sunucu bunu işler ve sonucu döndürür. Bu model, web'in, mobil uygulamaların, çevrimiçi bankacılığın ve kurumsal sistemlerin çalışma temelini oluşturur.
Tüm katılımcıların eşit haklara sahip olduğu eşler arası (P2P) ağların aksine, burada roller net bir şekilde ayrılır: sunucu tarafında verilerin merkezi yönetimi ve istemci tarafında kullanıcı için bir arayüz bulunur.
Kısaca: Bir tarayıcı açıp bir web sitesine girdiğinizde, tarayıcınız istemci olarak hareket ederken size web sitesi sayfasını veren bilgisayar sunucu olarak hareket eder.
Sistemin Temel Bileşenleri
Mimari, ağ protokolleri aracılığıyla etkileşime giren üç temel unsurdan oluşur.
1. İstemci (Client)
Bu, isteği başlatan cihaz veya programdır. İstemcinin görevi, kullanıcıya kullanışlı bir arayüz (UI) sağlamak ve verileri sunucuya göndermektir.
- Örnekler: Web tarayıcısı (Chrome, Safari), mobil uygulama (Telegram, Instagram), masaüstü programı (1C, Outlook).
- Fonksiyonlar: Kullanıcı girişlerinin doğrulanması, verilerin görüntülenmesi, HTTP isteklerinin oluşturulması.
2. Sunucu (Server)
Sürekli olarak ağa bağlı olan ve istekleri bekleyen güçlü bir bilgisayar veya bilgisayar kümesidir.
- Web sunucusu: İstekleri kabul eder ve statik dosyaları (HTML, CSS, resimler) teslim eder.
- Uygulama sunucusu: İş mantığını yürütür (sepet maliyetinin hesaplanması, şifre kontrolü).
- Veritabanı sunucusu: Bilgileri saklar ve yapılandırır (kullanıcılar, ürünler, işlemler).
3. Ağ ve Protokoller
Verilerin aktarıldığı iletişim kanalıdır. İstemci ve sunucunun birbirini "anlaması" için bilgi alışverişi için ortak kurallar kullanmaları gerekir — protokoller.
- HTTP/HTTPS: Web'in ana protokolü.
- TCP/IP: İnternette veri iletimi için temel protokol paketi.
- DNS: Site adına göre sunucunun IP adresini bulmaya yardımcı alan alan adı sistemi.
İstek-Yanıt Döngüsü Nasıl Çalışır?
İstemci-sunucu modelindeki etkileşim her zaman saniyenin kesirlerini alan standart bir algoritmayı izler:
- Başlatma: Kullanıcı bir eylem gerçekleştirir ("Giriş Yap" düğmesine basar veya tarayıcıya bir URL girer).
- İstek (Request): İstemci bir veri paketi oluşturur ve bunu sunucunun IP adresine gönderir. İstek, bir yöntem (örneğin, veri almak için
GETveya göndermek içinPOST) ve parametreler içerir. - İşleme: Sunucu isteği kabul eder, erişim haklarını kontrol eder (kimlik doğrulama), veritabanına başvurur ve gerekli hesaplamaları yapar.
- Yanıt (Response): Sunucu bir yanıt oluşturur. Bu bir HTML sayfası, verileri içeren bir JSON nesnesi veya bir hata kodu (örneğin,
404 Not Found) olabilir. - Render Etme: İstemci yanıtı alır ve sonucu kullanıcıya görüntüler.
Asenkronluk: Modern uygulamalar, sayfayı tamamen yeniden yüklemeden yalnızca bir bölümünü güncellemek için genellikle AJAX veya Fetch API kullanır. Bu, etkileşimi akıcı ve hızlı hale getirir.
Popüler Etkileşim Protokolleri
Protokol seçimi, hangi verilerin aktarıldığına ve ne kadar hızlı teslim edilmeleri gerektiğine bağlıdır.
Etkileşim Protokollerinin Karşılaştırılması
| Protokol | Bağlantı Türü | Özellikler | Nerede Kullanılır |
|---|---|---|---|
| HTTP/HTTPS | İstek-Yanıt | Stateless (durum tutmaz), evrenseldir | Web siteleri, REST API |
| WebSocket | Kalıcı | Çift yönlü kanal, düşük gecikme | Sohbetler, borsa kurları, çevrimiçi oyunlar |
| gRPC | İstek-Yanıt | Yüksek hız, ikili format, sıkı sözleşmeler | Mikroservislerin dahili iletişimi |
| MQTT | Pub/Sub | Hafif, trafiği azaltır | Nesnelerin İnterneti (IoT), akıllı ev |
Modelin Avantajları ve Dezavantajları
Mimarinin güçlü ve zayıf yönlerini anlamak, sistemlerin doğru tasarlanmasına yardımcı olur.
Artılar
- Verilerin Merkezi Yönetimi: Tüm bilgiler tek bir yerde saklanır, bu da yedeklemeyi, güvenliği ve mantık güncellemelerini kolaylaştırır. Sunucudaki bir hatayı düzeltmek için her kullanıcının telefonundaki uygulamayı güncellemeniz gerekmez.
- Ölçeklenebilirlik: Yük arttığında, istemci tarafını değiştirmeden daha fazla sunucu ekleyebilir (yatay ölçeklendirme) veya güçlerini artırabilirsiniz (dikey ölçeklendirme).
- Güvenlik: Kritik mantık ve veriler sunucuda korunur. İstemcinin veritabanına doğrudan erişimi yoktur.
Eksiler
- Tek Nokta Arızası: Sunucu çökerse, istemciler hizmete erişimi kaybeder. Kümeleme ve yük dengeleyiciler kullanılarak çözülür.
- Ağa Bağımlılık: İnternet olmadan istemci işlevsiz hale gelir (çevrimdışı mod uygulanmadıysa).
- Gecikmeler (Latency): Her istek, ağ üzerinden gitmek için zaman gerektirir. Kötü bağlantıda arayüz "takılabilir".
Yaygın Hata: Hassas mantığın (hak kontrolü, fiyat hesaplama) istemci tarafında konumlandırılması. Saldırgan, isteği sahteleştirerek bu kontrolleri atlayabilir. Kontrolleri her zaman sunucuda tekrarlayın.
İstemci-Sunucu vs P2P: Fark Nedir?
Eşler Arası (P2P) mimarisinde ayrılmış bir sunucu yoktur. Ağdaki tüm katılımcılar eşittir ve hem istemci hem de sunucu olabilirler.
- İstemci-Sunucu: Kararlılık, kontrol, güvenlik. Bankalar, sosyal ağlar, çevrimiçi mağazalar için idealdir.
- P2P: Ademi merkeziyetçilik, sansüre direnç, sunucu maliyetlerinden tasarruf. Torrentlerde, blokzincirde (Bitcoin), bazı mesajlaşma uygulamalarında kullanılır.
Modern Trendler: Mikroservisler ve Serverless
Klasik "tek büyük sunucu" modeli evrim geçiriyor:
- Mikroservisler: Tek bir monolitik sunucu yerine, uygulama onlarca küçük bağımsız servise bölünür (yetkilendirme servisi, ödeme servisi, katalog servisi). İstemci bunlarla bir API ağ geçidi üzerinden iletişim kurar.
- Serverless (Sunucusuz Mimari): Geliştirici yalnızca fonksiyon kodunu yazar, bulut sağlayıcısı (AWS, Azure, Yandex Cloud) ise sunucuları kendi yönetir ve yük altında ölçeklendirir. İstemci için hiçbir şey değişmez, ancak altyapı daha esnek hale gelir.
Uygulamada Sık Karşılaşılan Hatalar
- API Versiyonlamasının Olmaması: Sunucu yanıt yapısının değiştirilmesi, mobil uygulamaların eski sürümlerini bozar. URL'de her zaman versiyonları kullanın (
/api/v1/users). - Önbelleğe Almanın Göz Ardı Edilmesi: Aynı verilerin tekrarlanan istekleri sunucuyu yükler.
Cache-Controlbaşlıklarını ve CDN'yi kullanın. - Çok Sık İstekler (Chatty API): İstemci, tek bir büyük istek yerine 10 küçük istek gönderir. Bu, gecikmeyi artırır. Uç noktaları optimize edin veya GraphQL kullanın.
SSS
Bu mimaride frontend ve backend arasındaki fark nedir? Frontend, istemci tarafıdır (kullanıcının gördüğü kısım). Backend, sunucu tarafıdır (mantık, veritabanları, sunucular).
İstemci sunucu olmadan çalışabilir mi? Yalnızca tüm mantık ve veriler uygulamanın kendisine gömülüyse (offline-first). Ancak diğer kullanıcılarla veri alışverişi yapmak veya ilerlemeyi bulutta kaydetmek için sunucu gereklidir.
İstemci-sunucu mimarisi bağlamında API nedir? API (Application Programming Interface - Uygulama Programlama Arayüzü), istemcinin sunucu ile iletişim kurduğu kurallar ve uç noktalar setidir. Bu, hangi isteklerin gönderilebileceğini ve hangi yanıtların geleceğini tanımlayan bir "sözleşmedir".
Neden HTTPS, HTTP'den daha önemlidir? HTTPS, istemci ve sunucu arasındaki verileri şifreler. Şifreleme olmadan, halka açık Wi-Fi ağlardaki saldırganlar şifrelerinizi ve kişisel verilerinizi ele geçirebilir.