İstemci-sunucu, istemciyi (genellikle bir grafik kullanıcı arayüzü-GUI) sunucudan ayıran bir ağ mimarisidir. Her bir istemci yazılımı, sunucuya ya da uygulama sunucusuna isteklerini (request) gönderir.
Bu fikrin pek çok çeşitli uygulaması olmasına karşın, en güzel örneği İnternet üzerindeki Web sayfalarıdır. Bir web sayfası incelenirken, bilgisayar ve web tarayıcısı istemci olarak adlandırılır. Web sayfasını oluşturan gelişmiş bilgisayarlar, veritabanları ve uygulamalar da sunucu olarak adlandırılır. Web tarayıcısı, web sitesinden bir istekte bulunur ve sunucu istenen bilgileri toplar ve onu bir web sitesi şekline getirerek web tarayıcısına geri yollar, kullanıcılar da ekranda web sitesini görmüş olur.
Bir istemci/sunucu mimarisi, ölçeklenebilir bir mimari sunmayı amaçlar. Böylece ağdaki her bir bilgisayar bir istemci ya da sunucu rolünü üstlenir. Sunucu yazılımı genelde, fakat her zaman değil, bir iş yazılımı için adanmış güçlü bir bilgisayarda çalışır. İstemci yazılımı ise genelde sıradan bir PC veya işistasyonunda çalışır. İstemciler gerek duydukları verinin pek çoğunu ya da tamamını uygulama sunucusundan isterlerler. Mesela; ayar dosyaları, stok verileri, iş uygulama yazılımları gibi.
Sunucu'nun özellikleri:
- Pasif (köle)
- İstekleri bekler
- İstek olduğunda bilgiyi sunar ve cevap yollar
İstemcinin özellikleri:
- Aktif (efendi)
- İstekleri gönderir
- Cevap dönene kadar bekler
Sunucular durumsuz (stateless) veya durumlu (stateful) olabilir. Durumsuz bir sunucu, istekler arasında bilgi tutmaz. Mesela statik HTML sayfalarını sunan bir HTTP sunucusu gibi. Fakat durumlu bir sunucu, kendisine gelen istekler arasında bilgi tutar. Bu bilgi küresel (global) veya oturum (session) bazlı olabilir. Örneğin Apache Tomcat sunucusu gibi.
İstemci ve sunucu arasındaki ilişki genelde ardışık diyagramlar (sequence diagram) ile belirlenir ve bu diyagramlar UML standardına uygun yapılır.
Bir diğer ağ mimarisi ise peer-to-peer yapılar olarak karşımıza çıkar. Burada her bir düğüm, hem istemci hem de sunucudur ve hepsi de aynı sorumluluğa sahiptirler. Hem istemci/sunucu mimarisi hem de peer-to-peer mimarisi günümüzde çok fazla kullanılmaktadır. Her ikisinin de avantaj ve dezavantajları vardır.
Genel bir istemci/sunucu mimarisinde iki adet düğüm vardır ve bu yüzden iki-katmanlı mimari olarak adlandırılır. Bazı ağlarda üç düğümlü bir yapı olabilir. Mesela islemci, uygulama sunucusu ve veritabanı sunucusundan müteşekkil bir ağda üç adet düğüm vardır ve bu yapı üç-katmanlı mimari olarak adlandırılır.
Genelde n-katmanlı ya da çok-katmanlı mimarilerde iş mantığının farklı fonksiyonları için her bir hizmetle sorumlu ayrı bir sunucu görevlendirilir. Çok-katmanlı mimarinin iki-katmanlı mimariye göre avantajı daha iyi yük dengeleme sunması ve daha çok ölçeklenebilir olmasıdır. Dezavantajları ise ağa daha fazla yük getirmesi ve programlama ve test aşamalarının daha zor gerçekleştirilmesidir.
İstemci/sunucu mimarilerde adresleme çeşitli yöntemler ile gerçekleştirilir:
- Makine proses adreslemesi (machine process adressing): adresler şu şekilde bölümlenir: proses@makine. Yani 56@453 ifadesi, 453 nolu bilgisayardaki 56 nolu proses'i işaret eder.
- İsim sunucusu (name server): İlgili alandaki (domain) sunucuların isimlerini ve adreslerini indeksler.
- Hedefbulma paketleri (Localization packets): Bir dağıtık sistemteki tüm bilgisayarlara gönderilen broadcast mesajlarıyla hedef bilgisayarların adreslerinin öğrenilmesidir.
- Tüccar (trader): Bir dağıtık sistemdeki hizmetleri indeksleyen bir sistemdir.