22 Kasım 2011 Salı

Ne Ka İstemci O Ka Sunucu

Bu yazımda biraz tarihe dalacağım ve istemci-sunucu (ecnebicesi client server) tarihini inceleyeceğim. Tarih boyunca (tarih dediysek, taş çatlasa 50-60 seneden bahsediyoruz) bilişim işlem yükünün sunucu ile istemci arasında gidip gelmesi hep ilgimi çekmiştir. Uzun favorinin dönem dönem moda olması gibi, bir dönem sunucuya daha çok yüklenilir, sonra istemciye daha çok yüklenilir, daha sonra tekrar sunucuya...bu böyle gider gelir. Günümüzde bu gidip gelmeler yavaşlamış değildir, halen konu oldukça canlıdır.

Önce istemci ve sunucu kelimelerinden biraz bahsedelim. Sunucu, birden fazla kullanıcı açısından bilişim yükünü çeken birim iken, istemci ise son kullanıcının o bilişim ürününden doğrudan yararlanmasını sağlayan birimdir. Bu açıklama biraz karışık oldu galiba, sanırım diğer alanlardan örnekler verirsek daha iyi anlaşılabilir: Evlerimize elektrik sağlayan organizasyona (barajlar, santrallar, havai hatlar, kutular, kablolar vb.) sunucu dersek, evimizi aydınlatan ampüle de istemci diyebiliriz. Aynı ilişki cep telefonu servis sağlayıcısı ile cep telefonu, sular idaresi ile musluk arasında da görülebilir.

Elektrik Ağı

Genel hizmet yükünün sunucu ile istemci arasında ne kadar dağıldığının evrimi yazımın ana konusu olacak. Örneğin koskoca elektrik dağıtım organizasyonu ile ampülün görev dağılımı olarak bakıldığında, her ne kadar ampülün icadı daha havalı gözükse de, hizmetin yükünün büyük kısmı sunucunun üzerindedir. Diğer yandan ampülün yeribe televizyonu koyarsak, TV'nin çok daha fazla iş yapan bir istemci olduğu aşikardır. Başka bir bakış açısından bakarsak, TV yayıncılarını sunucu olarak düşündüğümüzde bu sefer TV istemcisi de basite indirgenebilir. Analojileri fazla zorlamamak gerekir O yüzden artık bilişim ile devam edeceğim.

Etkileşimli Olmayan Bilgisayarlar

İlk bilgisayarlar yığın işlemeli (batch processing) bilgisayarlar idi. Bu bilgisayarlar için veriler delikli kartlar yardımıyla, yazılımlar da kablolar bağlanarak önceden hazırlanır (gerçi Von Neumann makinesi sayesinde program kablolarla bağlanmak yerine hafızada tutulabilen soyut bir bilgi haline geldi, ama yazımın konusu itibariyle biraz abartmayı gerekli görüyorum). Bu ön hazırlıklardan sonra bilgisayar üzerindeki yazılım çalıştırılarak verilen veri üzerindeki hesaplamalarını yapması sağlanır ve sonuçlar kağıtlara yazılarak görev tamamlanır. Böyle bir sistemde istemci gayet fiziksel ve pasif kalmakta, tüm bilişim yükü bilgisayarın bizzat kendisinde olmaktadır. (Veya tam tersi midir? Tekrar düşünürken tersi de olabileceği aklıma geldi. Yorumlarınızı bekliyorum.)

ENIAC bilgisayarını programlayan hatunlar

Etkileşimli Bilgisayarlar

Etkileşimli bilgisayarlar ile kullanıcıların bilgisayara çalışırken müdahale edebildiği bilgisayarlar kastedilmektedir. Müdahale klavye ile ekrandan ibaret aptal terminaller ile yapılmaktadır. Bilişim yükü doğal olarak yine sunucuda olmakta, ama en azından klavye ve ekran ile çalışma anında etkileşim sağlanabilmektedir. Bu aşamada bilişim yükünün sunucudan istemciye doğru biraz kaydığı söylenebilir. Bu dönemde bilgisayarların halen mainframe adı verilen odaları kaplayan ve bilgi işlem gücü hızla artan dev makineler olduğunu belirtmeden geçmeyelim.

Bir aptal terminal

Her ne kadar aptal dense de, mainframe'leri kullanmaya yarayan terminaller o kadar aptal değildir. Sunucudan gelen (sunucuya ana bilgisayar veya daha amiyane tabirle "host" denir) sinyalleri yorumlayarak ekran görüntüsünü oluşturur. Ondan sonra da klavyeden basılan tuşları sunucuya gönderirler. Günümüzde özellikle bankalarda yaygın kullanımda olan mainframe bilgisayarlarla etkileşebilmek için bizzat aptal terminaller kullanılmasa da, laptop veya masaüstü bilgisayarlarımızda çalışan VT100 terminal emülatör yazılımları aptal terminal görevini görmektedirler.

Buraya kadar bahsettiğimiz bilgisayarlar her ne kadar çok eski teknoloji gibi gözükseler de, aşağıda da vurgulayacağımız gibi, gerek yığın çalışma modeli, gerekse merkezdeki çok güçlü tek bir bilgisayarın tüm işi yapması halen kullanılan metodlardır.

Kişisel Bilgisayarlar

Kişisel bilgisayarlar (PC), şu ana kadar anlattığım odalara sığmayan bilgisayarlara göre radikal bir dönüşüm yaparak (günümüzde de sürüyor bu dönüşüm) bilgisayar denen cihazı halka indirmişlerdir. Ondan önce bilgisayarlar özel uzmanların kullandığı, bilim kurgu romanlarının ve filmlerinin yalan yanlış betimlediği anlaşılması zor zamazingolar idiler.

Kişisel bilgisayarlar ilk olarak 1975 yılında Altair adında bir elektronik kit olarak ortaya çıktı. Halkın bilgisayara bu kadar talepkar olacağını hesaplayamayan üreticileri gelen yoğun talep üzerine oldukça şaşırmışlardı. Bu bilgisayar için ilk programlama dili olan Altair Basic'i geliştirenler Bill Gates ile Paul Allen adlı iki genç kafadar idi, ki bunlar sonradan -söylemeye gerek yoktu ama- Microsoft adlı dev şirketi kurdular.
İlk kişisel bilgisayarı tanıtan Popular Electronics dergisi kapağı

Kişisel bilgisayarlar, en azından ilk çıktıkları haliyle sunucusuz çalışan istemcilerdi. Başka bir bakış açısıyla, sunucuyu da içinde barındıran istemci idiler. Yani, bilişim yükü birden ve tamamen istemciye geçmişti. Halen iş hayatının yükünü mainframe'ler ve o sıralarda yeni yeni palazlanmaya başlayan küçük ve daha ulaşılabilir mainframe denebilecek olan mini computer'ler çekse de (Unix işletim sistemi, C programlama dili gibi yenilikler onlarda geliştirilmiştir), kişisel bilgisayarlar ardarda çıkan ve bilgisayarı gelişmiş bir hesap makinesi gibi kullanmaya yarayan spreadsheet (Excel gibi), bilgisayarı daktilo gibi kullanmaya yarayan kelime işlem ve küçük çaplı veritabanı kullanan yazılım ürünleriyle iş dünyasına da sızmaya başlamışlardı. Elbette oyun da oynanabiliyordu bu makinelerde.

1977'de çıkan Apple II, 1982'de çıkan Commodore 64 gibi kişisel bilgisayarlar ticari olarak çok başarılı olmuşlardır. Gelgelelim esas başarı IBM firmasının çıkardığı IBM PC ile olmuştur. Bu bilgisayar aslında teknik olarak rakiplerinden çok üstün değildi. Ama IBM bu bilgisayarın donanım spesifikasyonlarını çok iyi belgelemişti. Belgelemenin olmasının yararı, başka donanım üreticilerinin de uyumlu donanımları üretebilmesi yoluyla kendi PC'lerini oluşturabilmesi demek oluyordu. Bu PC'lerin işletim sistemi de standarttı: Küçük bir yazılım firması olan MicroSoft'un MS-DOS işletim sistemi. İşlemci de Intel'in ürettikleriyle uyumlu olan x86 idi.

Orijinal IBM PC

IBM dışındaki firmalarında IBM PC uyumlu bilgisayarları üretebilmesi ve böylece oluşan sinerji,  yavaşça da olsa IBM PC uyumluların, veya artık kısa adıyla PC'lerin pazarın tümünü ele geçirmesini sağladı. Bunun en önemli sebebi, uyumlu donanım sayesinde geliştirilen yazılımların tüm PC'lerde çalışabilmesiydi.Ondan önce üretilen yazılımların Apple için ayrı, Commodore için ayrı ve daha burada sayamayacağımız bir sürü firmanın ürettiği bilgisayarlar için ayrı ayrı geliştirilmesi gerekiyordu. (Aslında IBM'in PC'lerden önce ve sonra firma karakteristiğine uymamaktadır)

Bilişimin tamamen istemci tarafına geçmesi, başdöndürücü bir hızla işlem gücü artan kişisel bilgisayarlar için sorun olmasa da, enteresan bir yan etki ortaya çıktı: Yazılım korsanlığı denen şey ortaya çıkmıştı; yani yazılım ürünleri kolayca kopyalanabiliyordu (halen de alınmaya çalışılan tüm önlemlere rağmen bu durum böyledir). Eski tüm yükün sunucuda olduğu sistemle karşılaştırırsak, yazılım her ne kadar teorik olarak kopyalanabilir olsa da, dünyadaki makine sayısı az olduğundan, ve pratik olarak bunların çoğunun kontrolü IBM'de olduğundan, büyük bir sorun sayılmazdı. Zaten o zamanki büyük şirketler bilgisayar ve her türlü desteğin ve yazılımın içinde olduğu oldukça büyük bir paket hizmet satın alıyorlardı. Halbuki kişisel bilgisayarlarda aygıt ve içinde çalışan yazılımlar tamamen sade halkın kontrolündeydi. Hatta bu dönemde Bill Gates yazılımlarının kopyalanmasına o kadar kızmıştı ki, "hobicilere açık mektup" başlığıyla sert bir mektup yazmıştı.

Bilgisayar Ağları ve Dağıtık Sistemler

Kişisel bilgisayarlar ilk başlarda gerçekten kişisel amaçlar için kullanıldıysa da, iş dünyasında kullanımları yaygınlaştıkça yapılan işlerin ve verilerin paylaşılması ihtiyacı çıktı. Elbette disketler ile de veri paylaşılabiliyordu ama yoğun kullanım için pratik bir yöntem olduğu söylenemezdi. Daha iyi bir paylaşım için bilgisayarların birbirine bağlanmasını sağlayan LAN adı verilen yerel ağlar kuruldu; yani bilgisayarlar kabloyla birbirine bağlandı. İlk başlarda amaç dosya paylaşmaktı. Her ihtimalde daha güçlü bir bilgisayar bu işi görse de, bilişim yükünün tamamen istemcide kalması bu modelde de devam ediyordu.

Sonra SQL tabanlı veritabanı sunucuları da PC dünyasına girince artık bazı PC'ler isimlerine tezat olarak görülse bile, verinin yönetimi için sunucu olarak hizmet vermeye başladılar. Bu sırada gelişen PC'ler artık GUI adı verilen grafiksel arabirimler sayesinde çok daha özellikli ve kolay kullanımlı istemciler olmaya başlamışlardı. İstemci PC ekran yönetimini eski aptal terminallerle kıyaslanamayacak kadar kolay kullanımlı şekilde yapıyor, sunucu da verinin, ama sadece verinin yönetimi ile ilgileniyordu. Yani istemci ile sunucu arasında denge kurulmuştu. Muhtemelen bu denge farkedildiğinden, gelinen noktada böyle sistemlere istemci-sunucu mimarisi denilmeye başlandı.
GUI kullanan bir iş uygulama ekranı

Sonra uygulama sunucuları ortaya çıktı.  Uygulama sunucusu iş yükünün bir kısmını istemciden alıyor, veritabanı sunucu ile istemci yerine kendisi aracılık ediyor, elde ettiği veri ile ilgili uygulamanın ruhuna dönük manipülasyonlar yaparak sonuçları şıpın işi istemciye veriyordu. İstemcinin yükü biraz daha azalmıştı. Ayrıca bu model, giderek bottleneck haline gelmeye başlayan veritabanı sunucusu ve ağ trafik kaynaklarına yüklenmesini azaltıyor, zulalama (caching) gibi işlevler de sağlayarak işlem yükünü dengeliyordu. Böyle bir yapı N-tier veya dağıtık mimari olarak isimlendirilmektedir. Böylece istemciler çok sayıda olmak suretiyle kalmaya devam ederken, sunucuların sayısı da artmaya başlamış oldu.

İstemcilerin güçlü olması, bilişim gücünün dengeli dağılımı açısından avantajlı olmakla beraber, yönetim anlamında sorunludur. Örneğin yazılımın değiştiğini düşünelim: Bu durumda tüm istemci bilgisayarlardaki yazılımın güncellenmesi gerekmektedir. Eski modelde mainframe'de çalışan yazılım tek seferde değiştiriliyor, değişiklik anında aptal terminaller tarafından kullanılabilir hale geliyordu. İstemci-sunucu mimaride ise herhangi bir sebeple güncellenemeyen istemci yazılımları büyük problemlere sebep olabiliyordu.

Aynı şekilde donanım ve işletim sistemi uyumsuzluğu da büyük problem olma potansiyeli taşımaktaysa da, IBM PC mimarisinin ve Microsoft'un Windows işletim sisteminin dominasyonu sayesinde bu pek fazla sorun olmadı. Çok adil olmasa da, bunu itiraf etmek lazım.

Internet ve Web 1.0

1990'larda Internet hayatımıza bir daha çıkmamak üzere girdi. Internet kelimesindeki "Net" ağ anlamına geliyor, buna "Inter" de eklenince ağlararası ağ gibi bir mana çıkıyor. Sahiden de öyle oldu, bilgisayar ağları birbirine bağlana bağlana tüm dünya birbirine bağlanıvermiş oldu. Minnettarız.

Aslında Internet 1970'lerde ortaya çıkmış bir ağdır. İlk olarak askeri ve akademik ağları birbirine bağlamıştı, Sunucuların işlevi temel olarak dosya paylaşımı biçiminde görülmekteydi; FTP ile dosya paylaşımı yapılıyor, e-posta ile mesajlaşma sağlanıyordu. Telnet adlı uygulama ile de ana bilgisayar sunucuları aptal terminal gibi kullanılabiliyor.

1990'larda bu işlevlere web (WWW, World Wide Web) eklendi. Bu da temelde dosya paylaşımına dayanan bir sistemdi, sadece dosyalar (ki jargonda sayfa deniyor) zengin görsel biçemlendirme sunabilen HTML sunuyor, böylece resim ve başka sayfalara bağlantı sunuyordu. Örneğin şöyle bir sayfa adresi düşünelim:

http://en.wikipedia.org/wiki/Html

Buradaki en.wikipedia.org sunucunun adresini verirken, koyulaştırdığımız /wiki/Html kısmı da istediğimiz sayfanın sunucunun diskteki yeri oluyor...du. Di'li geçmiş zaman kullandık, çünkü bir noktada web sunucusunun pasif olarak dosyaları okuyup aynen vermek yerine, URL adı verilen sayfa adresini yorumlayıp o anda dinamik olarak bir sayfa oluşturmaya başlaması ile web uygulaması denen hizmet de başlamış oldu.
İlk web tarayıcısı olan Mosaic

Bu noktada aslında tekrar mainframe günlerine geri dönmüş oluyorduk: Bilgi işlemin hemen hemen tamamı web sunucusunda yapılıyor, artık istemci olan web tarayıcısına da  hazır sayfayı döndürüyordu. Yani aptal terminal günlerine web tarayıcısı aracılığıyla geri dönülmüştü. Bu kimsenin umurunda değildi. Tüm dünyayı web uygulamaları kapladı.

Web Servisleri

Web uygulamaları ticari dünyanın Internet'e katılımını sağladı. İlk uygulamalar müşteriye doğrudan satış uygulamalarıydı. Bu satışlar kredi kartıyla yapılıyordu. Web sitesi dolaşılarak alınacak ürünler seçiliyordu. Sonra hesaplanan tutar kredi kartıyla tahsil ediliyordu. Bu ana kadar sunucu olan web sitesi, kredi kartı işlemini yaptırmak için istemci olarak çalıştığı bankanın sunucusuna bağlanıyor ve oradan işlem yapılıyordu.

İki firmanın bilgisayar sistemlerinin birbiriyle ortak iş yapmasına jargonda B2B (business to business) denir. İlk başlarda her banka kendine ait bir haberleşme protokolü ile ticari müşterileriyle haberleşiyordu. Ancak işler karmaşıklaştıkça B2B'nin kapsamı da genişledi. Artık bir satış sitesi sadece banka ile değil, tedarikçileriyle de haberleşmek zorundaydı. Her ticari birim kendi protokolünü uygularsa haberleşme yapılamaz hale geleceğinden web services denilen bir teknolojiler bütünü ortaya çıktı. Buna göre Internet'i oluşturan TCP/IP, HTTP gibi varolan teknolojiler kullanılarak XML biçemindeki SOAP mesajları aynı webde olduğu gibi firmalar arasında gidip gelmeye başladı. Gelen bilgi biçemlendirilmiş sayfa değil, ticari bilgiydi veyahut ticari bir işlem talebi idi. Halen halk aptal web tarayıcılarında web uygulamalarını kullanmaya devam ediyor, işlem yükü yine arka taraftaki birbirine bağlı ve rolleri bağlamına göre değişen istemci-sunucularda hallediliyordu.
Kitap satıcılığı ile işe başlayan Amazon günümüzde çok kompleks bir tedarikçi zincirinin önyüzüdür

Web teknolojileri ile yazılım korsanlığı sorunu büyük ölçüde çözülmüş oluyordu, çünkü uygulama kullanıcılarına asla ulaşamayacağı sunuculara dönmüştü. Uygulama güncelleme de sorun değildi, sunucudaki yazılım değiştiğinde herkesteki kullanım değişiyordu. Web tarayıcıları da üç aşağı beş yukarı Internet Explorer ve Mozilla Firefox olarak standartlaşmıştı.

Ama esas ilginç yan etki, artık kişisel bilgisayarların standart olmasına pek de gerek kalmamasıydı. Çünkü normal bir kullanıcı zamanının çoğunu web tarayıcısında geçiriyordu. Web tarayıcı çalıştırabilen bir Macintosh, Linux işletim sistemli bilgisayar, cep telefonu gayet güzel iş görüyordu. Yani IBM PC ve Windows'a da eskisi kadar gerek kalmamıştı. Zaten bu dönem de PC'ye alternatif bilgisayarların öne çıktığı dönemdir ve halen devam etmektedir.

Web 2.0

Web 1.0 uygulamalarında web istemcisinin yaptığı her işlemin cevabı yeni bir sayfa olarak dönüyordu. Bu sayede web istemcileri basit yapıda kalabiliyordu, ama diğer yandan her seferinde koca bir sayfa gidip geldiğinden hem ağda transfer edilen veri miktarı çoğalıyordu, hem de istemci ile sunucu arasında yavaş bir etkileşim oluyordu.

AJAX adı verilen bir metodlar kümesi sayesinde bu sorun da çözüldü. Buna göre artık sayfaların içine Javascript dili ile yazılan programcıklar web uygulamasından istekte bulunuyorlar, ancak bu istek sayfa değil, sadece gerekli bilgiyi döndürüyor ve yine javascript programcığı gelen bilgiye göre sayfayı olduğu yerde güncelliyordu. Böylece mucizevi biçimde hem ağ üzerinde transfer edilen bilgi azaldı, hem de GUI uygulamalarından özellik olarak hiç de geri kalmayan şekilde etkileşimli uygulamalar hayata geçmiş oldu. Yazımızın esas amacı bağlamında belirtelim ki, Web 2.0 bilgi işlem yükünü sunucudan istemciye transfer ederek yükü tekrar eşitlemiş oldu.
Facebook gayet dinamik bir Web 2.0 sosyal paylaşım uygulamasıdır

Şu anda web uygulamalarının çoğu Web 2.0 teknolojisini kullanmaktadır. İstemcinin güçlenmesinin mahsurlarıını hatırlarsak, bunlardan ilki yazılım korsanlığı idi. Bu pek büyük bir sorun teşkil etmemektedir, çünkü kritik kodların çoğu yine sunucudadır. İstemciye gelen Javascript kodlarını da karıştırmak veya sadece gereken kodları seçmece göndermek mümkündür.

İstemcilerin yönetimi her ne kadar sorun gibi gözükse de, HTTP, HTML,Javascript gibi teknolojiler büyük titizlikle standartlaştığından bu açıdan da fazla bir sorun gözükmemektedir.

Küçük Cihazlar

Internet kadar önemli bir gelişme, cep telefonlarıdır. Her ne kadar telefon olsa da, günümüzde telefon olma özelliği ayrıntı olarak kalmıştır: Bu cihazlar kişisel bilgisayarlardır, hem de kişisel bilgisayarlarımızın ağlar ve Internet aracılığıyla anonim hale geldiği dönemde hızır gibi yetişmişlerdir.
iPhone...

Bu cihazların, küçüklükleri sebebiyle görece güçlerinin az olması, hadi diyelim güçlendirilseler bile taşınabilir bir cihaz için çok kritik olan pil kullanımı konusunda zorlaması sebebiyle bilgi işlem yükü ne kadar sunucuda olursa o kadar çok memnun olacak istemciler olmaları gerekmesine rağmen, Apple'ın çok meşhur ve başarılı cep telefonu iPhone'lar için AppStore aracılığıyla resmen istemciyi yoran uygulamalar satabilmesi, şahsım için henüz çözülememiş bir soru işaretidir. Sonuç olarak istemci güçlü cep telefonları yoluyla yine bilişimin yükünü üzerine almıştır.

Bulut Bilgi İşlem

Internet'de hemen hemen herşeyimiz olan Google firması hizmetlerini yapabilmek için muhtaç olduğu bilgi işleme gücünü onbinlerce ucuz bilgisayarı özel tekniklerle birleştirmesiyle oluşturduğu veri merkezlerinden sağlamaktadır.

Böyle bir dev veri merkezine sahip olan sadece Google değildir, neredeyse büyük firmaların hepsi artık veri merkezine sahiptir. Son zamanlarda bu firmalar veri merkezlerini para karşılığı bulut bilgi işlem (cloud computing) adıyla herkesin kullanımına açmıştır: Google'ın AppEngine'i, Amazon'un Web Servisleri, Microsoft'un Azure'si, IBM'in SmartCloud'u.
Esprili bir cloud computing illüstrasyonu

Henüz nisbeten yeni olan bulutların vaadedilen avantajları şunlardır: Uygulamanızı kendi güvenilir sunucularında çalıştırmayı vadetmektedir ve sunucunun tüm yönetimini üstlenmektedirler. Ayrıca "ne ka ekmek o ka köfte" prensibiyle (buna ölçeklenebilirlik de deniyor) bilgi işlem gücüne ihtiyaç duyulduğu ölçüde daha fazla bilişim kaynağı kullanılabilmesini  otomatikman sağlanmaktadır. (Elbette parası karşılığında)

Gerçek amaç öncelikle paramızı almaktır. Ancak daha stratejik olan amaç ise, bu bulut ortamlarını sunan büyük firmaların kendi geliştirme araçlarını çaktırmadan empoze etmesidir. Yazımız bağlamında bakarsak, bu bulut hikayesi mainframe'lerin geniş ölçekli olarak yeniden keşfedilmesinden başka birşey değildir.

Hiç yorum yok:

Yorum Gönder