Uygulama Sunucusu ve Web Sunucusu

Sürekli karşılaştığım sorulardan biri uygulama sunucusunun ne olduğu sorusudur. Uygulama sunucusu google'daki ingilizce tanımlara bakarsak basitçe n katmanlı mimaride iş mantığı ve iş süreçlerini gerçekleştirmek üzere API sunan sunucudur. Özetle sunucu taraflı iş mantığını çalıştırmak için ana motordur. Örneğin Java uygulama sunucuları size Java web uygulamalarını ve hizmetlerini sunmanız için gereklidir. Web sunucusu ile arasındaki farka gelirsek, bir yazıdan yararlanarak (çevirerek) açıklamaya çalışacağım.

Soru. Bir uygulama sunucusu ile web sunucusu arasındaki fark nedir?

Yanıt. Bütüne bakacak olursak, web sunucusu bir tarayıcıda görüntülenecek sayfaları sunar, bir uygulama sunucusu ise bir istemci uygulamasının çağırabileceği metotları sunar. Daha ayrıntılı söyleyecek olursak:

Web sunucusu

Uygulama sunucu özellikle HTTP isteklerini kotarır, uygulama sunucusu ise farklı tipteki protokollerle uygulamalara iş mantığını sunar. Web sunucusu HTTP protokolünü kullanır. Web sunucusunun çalışma mantığını anlamak kolaydır. Web suncusuna bir istek geldiğinde, sunucu bu isteği basitçe bu isteği en iyi karşılayabilecek programa aktarır. Web sunucusu, sunucu taraflı programın işlediği ve ürettilen yanıtı geri döndüren bir ortamdan fazla işlevselliği sağlamaz. Sunucu taraflı program genellikle görev (transaction) işleme, veritabanı bağlantısı ve mesajlaşma gibi işlevleri kendisi sağlar.

Uygulama sunucusu

Uygulama sunucusu ise, tanımımıza göre, iş mantığını istemci uygulamalara farklı protokollerle sunan, protokollerde HTTP de muhtemelen vardır. Çoğu durumda sunucu iş mantığını bir bileşen APIsi ile sunmaktadır, örneğin EJB (Enterprise (Kurumsal) Java Bean) bileşen modeli J2EE (Java 2 Platform, Kurumsal Sürüm) uygulama sunucularında bulunur. Ayrıca uygulama sunucusu kendi kaynaklarını yönetir. Bu tip görevler arasında güvenlik, görev (transaction) işleme, kaynak havuzları, ve mesajlaşma yer alır.

Web sunucusunun işlevini özetle aktarma olarak görebiliyoruz. Gerçi yararlandığım kaynakta web sunucularında XML web servislerinin kullanılmasıyla beraber, uygulama sunucularıyla farklarının azaldığı söyleniyor. XML'i web sunucusuna göndererek, verinin işlenmesi ve buna göre yanıtlaması nedeniyle en az uygulama sunucular kadar işlem yapmasına neden oluyor. Zaten çoğu uygulama sunucusu web sunucusu görevini de yapmaktadır. Aslında web sunucusuna başka bir işleme aktarım yapan, HTTP protokolünü destekleyen basit bir uygulama sunucusu olarak da bakabiliriz.

Bağlantılar:

http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html

http://www.velocityreviews.com/forums/t149260-webserver-vs-application-server.html

http://faq.javaranch.com/java/WebVsApplicationServer

http://www.diffen.com/difference/Application_Server_vs_Web_Server

10 yorum:

serkan dedi ki...

Ben bu ayrımı çok anlamadım. Şimdi elimde bir sunucu var, 80. portu açtım, http taleplerini alıp apache ile yanıtladım. Sonra misal 3306 portunu açıp gelen mysql taleplerini mysql servisi ile yanıtladım, 53. portu açıp gelen dns taleplerini bind ile yanıtladım, 80. porttan web servisi sunup veri işleyip xml olarak geri döndüm. Demem o ki bunların her biri için sunucuya ayrı bir isim mi vermek gerek o zaman. Web hizmeti dediğimiz şey de sunucuda çalışan bir uygulamadır zaten. Böyle bir ayrım yapmak bana pek sağlıklı gelmedi.
Yine de çeviri için teşekkürler.

Tahir Emre Kalaycı dedi ki...

Aslında sunucu sunucudur :) Bir hizmet verir. Burada kastedilen uygulama sunucusuyla, web sunucu yazılımları arasındaki farktı. Web sunucusu günümüzde iyice kapsamlaştı, ama görevi yine de çağrıları yanıtlamak ve işletmesi için bir başka uygulamayı çalıştırmak, misal cgi için Perl veya Php çalıştırması. Uygulama sunucusunda ise kendisi bütün hizmetleri kendi içerisinde veriyor daha kapsamlı bir şekilde. Misal Java uygulama sunucusu glassfish. Bir J2EE ortamı olarak hizmet veriyor. J2EE ile ilgili tüm hizmetleri kendi görüyür, tabi JDK üstünde çalışarak. Yine de karışık bir konu. Ama yurtdışında mülakatlarda sorulan bir soru, kafa karıştırıcılığından herhalde.

serkan dedi ki...

Bu bir işletim sistemi gibi birşey galiba değil mi?

Tahir Emre Kalaycı dedi ki...

Yok, değil. http://en.wikipedia.org/wiki/GlassFish adresinde ayrıntılı bilgi var. J2EE sunucusu dediğimiz kavram sunucu taraflı (dinamik web siteleri için) Java geliştirme için kullanılan sunucu.

serkan dedi ki...

Benim önümde de şu anda tam olarak o sayfa açık ama anlamadım yine. Bunu hangi sistem üzerinde kullanabiliyorsun?

Tahir Emre Kalaycı dedi ki...

Herhangi bir işletim sistemi üzerine aynen apache gibi kurup daha sonra belli bir port üzerinden genellikle http olarak sunuyorsun. Web sunucu işlevi de görüyor, ama daha kapsamlı. Apache gerektirmiyor (ama genellikle load balancing için statik kısımlar ayrı bir mesela apache sunucuda olsa daha iyi olur) mesela bununla yaptığın web uygulamaları.

serkan dedi ki...

Anladım, bence o zaman yine de servisin (uygulama sunucusu?) büyüklüğü ve kapsamlı olmasına rağmen yine de bir basit bir httpd servisinden ana başlık olarak bir farkı yok gibime geldi. Bilgiler için teşekkürler.

ömür dedi ki...

Uygulama sunucusu sayesinde istemcinin istediği isteğin veri tabanına sorgulaması yapılıyor yani.Bunu web sunucusu da yapabiliyor.Ozaman aralarındaki fark web sunucusunu yormadan ve daha kıvrak yapan sanal bi sunucu gibi mi düşüncez?

T. E. Kalaycı dedi ki...

Web sunucusu üzerinden PHP gibi dillerin desteği ile veritabanına erişmek de mümkün. Uygulama sunucusunun en önemli farkı HTTP sorgularına yanıt vermesi, uygulama sunucusu ise HTTP ile birlikte farklı bir çok protokole yanıt verebilir. Daha kapsamlıdır.

site aç dedi ki...

Çok teşekkürler, sayenizde ikilemde kaldığım bazı şeyleri netleştirmiş oldum.