Was ist der Unterschied zwischen Anwendungsserver und Webserver?
Antworten
Zu viele Anzeigen?Wie bereits gesagt wurde, bearbeiten Webserver HTTP-Petitionen, während Anwendungsserver Petitionen für verteilte Komponenten bearbeiten. Der einfachste Weg, den Unterschied zu verstehen, besteht also darin, die beiden Produkte in Bezug auf die Programmierumgebung zu vergleichen, die sie bieten.
Webserver -> Programmierumgebung
IIS : ASP (.NET)
Tomcat : Servlet
Jetty : Servlet
Apache : Php, CGI
Anwendungsserver -> Programmierumgebung
MTS : COM+
WAS : EJB
JBoss : EJB
WebLogic Anwendungsserver : EJB
Der entscheidende Unterschied besteht darin, dass Anwendungsserver einige verteilte Komponente Technologie, die Funktionen wie Fernaufrufe und verteilte Transaktionen bietet, wie EJB in der Java-Welt oder COM+ auf der Microsoft-Plattform. Http-Server unterstützen oft einige einfachere Programmierumgebungen, oft Skripte, wie ASP (.NET) im Falle von Microsoft oder Servlet-basiert, einschließlich JSP und viele andere im Falle von Java oder PHP und CGI im Falle von Apache.
Andere Funktionen wie Load-Balancing, Clustering, Session-Failover, Connection-Pooling usw., die bisher den Anwendungsservern vorbehalten waren, werden nun auch auf Webservern direkt oder über Produkte von Drittanbietern verfügbar.
Schließlich ist noch anzumerken, dass das Bild mit "leichtgewichtigen Containern" wie Spring Framework, die oft den Zweck von Anwendungsservern auf einfachere Weise und ohne die Anwendungsserver-Infrastruktur ergänzen, weiter verzerrt wird. Und da sich der Verteilungsaspekt bei Anwendungen von verteilten Komponenten hin zu Service-Paradigma und SOA-Architekturen verschiebt, bleibt immer weniger Platz für traditionelle Anwendungsserver.
Kurz gesagt,
Der Webserver ist ein Server, der die statische Webseiten für Benutzer über HTTP-Anfragen.
Der Anwendungsserver ist ein Server, der die Geschäftslogik für ein System hostet.
Sie beherbergt häufig sowohl langlaufende Batch-Prozesse als auch Interop-Dienste, die nicht für den menschlichen Gebrauch bestimmt sind (REST/JSON-Dienste, SOAP, RPC usw.).
Der Hauptunterschied zwischen Webserver und Anwendungsserver besteht darin, dass der Webserver für die Bereitstellung statischer Seiten, z. B. HTML und CSS, gedacht ist, während der Anwendungsserver für die Erzeugung dynamischer Inhalte durch die Ausführung von serverseitigem Code, z. B. JSP, Servlet oder EJB, zuständig ist.
Welche sollte ich verwenden?
Wenn Sie den Unterschied zwischen Web- und Anwendungsservern und Webcontainern kennen, können Sie leicht herausfinden, wann Sie diese einsetzen sollten. Sie brauchen einen web server
wie Apache HTTPD, wenn Sie statische Webseiten bereitstellen. Wenn Sie eine Java-Anwendung nur mit JSP und Servlet haben, um dynamische Inhalte zu erzeugen, benötigen Sie web containers
wie Tomcat oder Jetty. Während, wenn Sie eine Java EE-Anwendung mit EJB, verteilten Transaktionen, Messaging und anderen ausgefallenen Funktionen haben dann brauchen Sie einen vollwertigen application server
wie JBoss, WebSphere oder WebLogic von Oracle.
Der Web-Container ist ein Teil des Web-Servers und der Web-Server ist ein Teil des Anwendungs-Servers.
Der Webserver besteht aus einem Webcontainer, während der Anwendungsserver sowohl aus einem Webcontainer als auch aus einem EJB-Container besteht.
Ein Webserver bearbeitet ausschließlich HTTP/HTTPS-Anfragen. Er stellt Inhalte über das HTTP/HTTPS-Protokoll ins Internet.
Ein Anwendungsserver liefert Geschäftslogik an Anwendungsprogramme über eine beliebige Anzahl von Protokollen, möglicherweise einschließlich HTTP. Das Anwendungsprogramm kann diese Logik genauso verwenden, wie es eine Methode für ein Objekt aufrufen würde. In den meisten Fällen stellt der Server diese Geschäftslogik über eine Komponenten-API zur Verfügung, wie z. B. das EJB-Komponentenmodell (Enterprise JavaBean), das auf Java EE-Anwendungsservern (Java Platform, Enterprise Edition) zu finden ist. Der wichtigste Punkt ist, dass der Webserver alles über das http-Protokoll zur Verfügung stellt, während der Anwendungsserver nicht auf dieses Protokoll beschränkt ist. Ein Anwendungsserver bietet daher viel mehr Dienste als ein Webserver, die in der Regel Folgendes umfassen:
- Eine (proprietäre oder nicht proprietäre) API
- Lastausgleich, Failover...
- Verwaltung des Lebenszyklus von Objekten
- Zustandsverwaltung (Sitzung)
- Ressourcenmanagement (z.B. Verbindungspools zur Datenbank)
Die meisten Anwendungsserver haben einen Webserver als integralen Bestandteil, d.h. App Server kann alles, was ein Webserver kann. Zusätzlich verfügen App Server über Komponenten und Funktionen zur Unterstützung von Diensten auf Anwendungsebene wie Connection Pooling, Object Pooling, Transaktionsunterstützung, Messaging-Dienste usw.
Ein Anwendungsserver kann (muss aber nicht) auf einem Webserver laufen, um Programmlogik auszuführen, deren Ergebnisse dann vom Webserver geliefert werden können. Das ist ein Beispiel für ein Webserver/Anwendungsserver-Szenario. Ein gutes Beispiel aus der Microsoft-Welt ist die Beziehung zwischen Internet Information Server und SharePoint Server. IIS ist ein Webserver; SharePoint ist ein Anwendungsserver. SharePoint sitzt auf dem IIS, führt eine bestimmte Logik aus und stellt die Ergebnisse über den IIS bereit. In der Java-Welt gibt es ein ähnliches Szenario, z. B. mit Apache und Tomcat.
Da Webserver gut für statische Inhalte und App-Server für dynamische Inhalte geeignet sind, fungiert der Webserver in den meisten Produktionsumgebungen als Reverse-Proxy für den App-Server. Das bedeutet, dass statische Inhalte wie Bilder/statisches HTML vom Webserver, der die Anfrage interpretiert, bedient werden, während eine Seitenanfrage bedient wird. Mithilfe einer Art von Filtertechnik (meist Erweiterung der angeforderten Ressource) identifiziert der Webserver die Anforderung für dynamische Inhalte und leitet sie transparent an den Anwendungsserver weiter.
Ein Beispiel für eine solche Konfiguration ist Apache HTTP Server und BEA WebLogic Server. Apache HTTP Server ist ein Webserver und BEA WebLogic ist ein Anwendungsserver. In einigen Fällen sind die Server eng integriert, wie z. B. IIS und .NET Runtime. IIS ist ein Webserver. Wenn er mit der .NET-Laufzeitumgebung ausgestattet ist, kann IIS Anwendungsdienste bereitstellen.
Web Server Programming Environment
Apache PHP, CGI
IIS (Internet Information Server) ASP (.NET)
Tomcat Servlet
Jetty Servlet
Application Server Programming Environment
WAS (IBM's WebSphere Application Server) EJB
WebLogic Application Server (Oracle's) EJB
JBoss AS EJB
MTS COM+
Die Grenze zwischen diesen beiden wird immer dünner.
Anwendungsserver stellen den Clients Geschäftslogik zur Verfügung. Das bedeutet, dass Anwendungsserver aus einer Reihe von Methoden bestehen (nicht ausschließlich, es kann sogar ein vernetzter Computer sein, auf dem viele Software laufen können), um Geschäftslogik auszuführen. Es werden also einfach die gewünschten Ergebnisse ausgegeben, nicht der HTML-Inhalt. (ähnlich wie bei einem Methodenaufruf). Es ist also nicht streng HTTP-basiert.
Webserver geben jedoch HTML-Inhalte an Webbrowser weiter (streng HTTP-basiert). Webserver waren nur in der Lage, statische Webressourcen zu verarbeiten, aber mit dem Aufkommen der serverseitigen Skripterstellung konnten Webserver auch dynamische Inhalte verarbeiten. Ein Webserver nimmt die Anfrage entgegen und leitet sie an die entsprechenden Skripte (PHP, JSP, CGI-Skripte usw.) weiter, um HTML-Inhalte zu erstellen, die an den Client gesendet werden. Sobald der Inhalt eingegangen ist, sendet der Webserver die HTML-Seite an den Kunden.
Heutzutage werden diese beiden Server jedoch gemeinsam genutzt. Der Webserver nimmt die Anfrage entgegen und ruft dann ein Skript auf, um den HTML-Inhalt zu erstellen. Anschließend ruft das Skript wiederum eine LOGIK des Anwendungsservers auf (z. B. Abrufen von Transaktionsdetails), um den HTML-Inhalt zu füllen.
Die beiden Server werden also effektiv genutzt.
Deshalb .... Wir können mit Sicherheit sagen, dass Webserver heutzutage in den meisten Fällen als Teilmenge von Anwendungsservern verwendet werden. Theoretisch ist dies jedoch NICHT der Fall.
Ich habe viele Artikel über dieses Thema gelesen und fand este Artikel sehr nützlich.