-
Gebiet der
Erfindung
-
Die Erfindung betrifft Server-Architekturen
in vernetzten Computersystemen, insbesondere zum Ermöglichen
verteilter Software-Entwicklung in einer verteilungsunbewussten
Weise.
-
Hintergrund
der Erfindung
-
Das World Wide Web beinhaltet ein
Netzwerk von Servern im Internet, wobei jeder mit einer oder mehreren
HTML (Hypertext Markup Language)-Seiten gekoppelt ist. Die HTML-Seiten, welche mit
einem Server gekoppelt sind, stellen Informationen und Hypertext-Verknüpfungen
zu anderen Dokumenten auf diesem und (normalerweise) anderen Servern
bereit. Server kommunizieren mit Clients unter Verwendung des Hypertext Transfer
Protocols (HTTP). Die Server horchen nach Anforderungen von Clients
nach ihren HTML-Seiten und werden daher oft als "Listeners" bezeichnet.
-
Benutzer des World Wide Webs benutzen
ein Clientprogramm, welches hier als Browser bezeichnet wird, zum
Anfordern, Dekodieren und Anzeigen von Informationen von Listenern.
Wenn der Benutzer eines Browsers eine Verknüpfung auf einer HTML-Seite
auswählt,
sendet der Browser, der die Seite anzeigt, eine Anforderung über das
Internet an den dem Universal Resource Locator (URL) zugeordneten
Listener, der in der Verknüpfung
angegeben ist. In Antwort auf die Anforderung überträgt der Listener die angeforderten
Informationen zum Browser, der die Anforderung ausgegeben hat. Der
Browser empfängt
die Information, präsentiert
die empfangene Information dem Benutzer und wartet auf die nächste Benutzer-Anforderung.
-
Üblicherweise
ist die, auf den Listenern gespeicherte, Information in der Form
von statischen HTML-Seiten. Statische HTML-Seiten werden, vor einer
Anforderung von einem Web-Browser, auf dem Listener erzeugt und
gespeichert. in Antwort auf eine Anforderung wird eine statische
HTML-Seite lediglich aus dem Speicher gelesen und an den abfragenden
Browser übertragen.
Gegenwärtig
gibt es einen Trend Listener zu entwickeln, welche auf Browser-Anforderungen mittels
Durchführung
dynamischer Operationen antworten. Zum Beispiel kann ein Listener
auf eine Anforderung durch Ausgabe einer Anforderung an eine Datenbank, dynamischem
Aufbau einer Web-Seite, welche die Ergebnisse der Anforderung aufweist
und Übertragung
der dynamisch aufgebauten HTML-Seite an den anfordernden Browser
antworten. Zum Durchführen
dynamischer Operationen muss die Funktionalität des Listeners überarbeitet
oder erhöht
werden. Verschiedene Lösungswege
wurden entwickelt, zum Erweitern von Listenern, zum Durchführen dynamischer
Operationen.
-
Ein Lösungsweg um dynamische Operationen
in Antwort auf Anforderungen von Web-Browsern bereitzustellen, benutzt
das Common Gateway Interface (CGI). CGI ist eine Beschreibung zum Übertragen
von Informationen zwischen einem Listener und einem CGI-Programm.
Ein CGI-Programm ist jedes Programm, das zum Akzeptieren und Zurückliefern
von Daten entworfen wurde, welche sich nach den CGI-Beschreibungen
richten. Das Programm könnte
in jeder Programmiersprache, einschließlich C, Perl oder Visual Basic
geschrieben sein.
-
Der CGI-Lösungsweg leidet am Nachteil,
dass ein separater Prozess (eine separate Instanz des CGI-Programms)
jedes Mal anläuft,
wenn die beschriebene Anforderung durch den Server empfangen wurde. Weiterhin
werden CGI-Programme auf derselben Maschine ausgeführt wie
der Listener, der die Browser-Anforderung empfing. Demzufolge wird
der Empfang von Tausend solcher Anforderungen von unterschiedlichen Benutzern
auf der Maschine, welche den Listener ausführen lässt, tausend Prozesse auslösen und
verfügbare Ressourcen
auf dem Server aufbrauchen.
-
Ein zweiter Nachteil des CGI-Lösungsweges
ist, dass ein separater Prozess für jede Anforderung ausgelöst, ausgeführt und
beendet wird. Daher wird, wenn eine erste Serie von zehn Anforderungen
von einer zweiten Serie von zehn Anforderungen gefolgt wird, die
erste Serie von zehn Prozessen für
die erste Serie von Anforderungen ausgelöst und beendet und eine zweite
Serie von zehn Prozessen für
die zweite Serie von Anforderungen ausgelöst und beendet. CGI erlaubt
es nicht, dieselben zehn Prozesse zu benutzen, die für die ersten
zehn Anforderungen benutzt wurden, zum Verarbeiten der zweiten zehn
Anforderungen, zum Vermeiden von Überhang, der mit der Auslösung von
Prozessen gekoppelt ist.
-
Ein alternativer Lösungsweg
zum Bereitstellen dynamischer Antworten auf Anforderungen weist
das Benutzen von "Plugin"-Erweiterungen auf.
Eine Plug-In-Erweiterung fängt
Nachrichten ab, welche an den Server in verschiedenen Phasen gesendet
werden, um ein anwendungsspezifisches Verarbeiten einer spezifischen
Benutzer-Anforderung durchzuführen.
Ein serverseitiges Plug-In führt
im selben Adressraum wie der Listener und alle anderen serverseitigen
Plug-Ins aus. Dadurch muss ein Anwendungs-Entwickler, der ein Plug-In
entwirft, mit den Betriebsdetails des Listeners auf niedriger Ebene
vertraut sein. Weiterhin setzt die Ausführung von Plug-Ins im selben
Adressraum wie der Listener, den Listener Sicherheits- und Stabilitätsrisiken aus,
wobei ein fehlerhaftes Plug-In verursachen kann, dass andere Plug-Ins
oder der Listener selbst abstürzen,
oder in einer unvorhersehbaren Weise ausführen.
-
Ein zweites Problem mit dem Plug-In-Lösungsweg
ist, dass ähnlich
zu dem CGI-Lösungsweg,
alle Plug-In-Operationen auf derselben Maschine durchgeführt werden,
welche den Listener ausführt.
Da die durch die Plug-In-Erweiterung ausgeführten Aufgaben nicht zu anderen
Maschinen ausgelagert werden können,
ist die Skalierbarkeit des Plug-In-Lösungsweges bedeutend begrenzt.
-
Zusätzliche Details zum Hintergrund
der durch Ausführungsbeispiele
dieser Erfindung gelösten
Probleme, können
in einem Artikel von Nigel Edwards und Owen Rees, betitelt mit "High security Web
servers and gateways" in
Computer Networks and ISDN Systems, 29, (1997) 927–938 gefunden
werden.
-
Zusammenfassung
der Erfindung
-
Ein Verfahren und System werden bereitgestellt
zum Ausführen
von Operationen in einer verteilten Umgebung, in einer Weise, welche
nicht benötigt,
dass die Module, welche die Operationen ausführen, verteilungsbewusst sind.
Die verteilte Umgebung erlaubt es Prozessen ("Cartridge-Instanzen"), welche die in den Browser-Anforderungen
angegeben Operationen durchführen,
auf anderen Maschinen ausgeführt
zu werden, als die Listener, welche die Anforderungen empfangen
und die Browser, welche die Anforderungen ausgeben. Da die Cartridge-Instanzen
auf anderen Maschinen als die Listener sind, sind die Listener besser
gegen fehlerhafte Cartridge-Instanzen isoliert, wodurch die Zuverlässigkeit
und Sicherheit des Systems überarbeitet wird.
Zusätzlich
wird die Skalierbarkeit des Systems durch Aufteilen der Prozesslast
der Ausführung
der Cartridge-Einheiten auf viele Maschinen beträchtlich erhöht, eher als auf dieselbe Maschine,
welche den Listener ausführt.
Die Fähigkeit
die Ausführung
der Cartridge-Instanzen
auf mehrere Maschinen zu verteilen, erlaubt das Benutzen zahlreicher
Lastverteilungstechniken in der Entscheidung, wann und wo neue Cartridge-Instanzen
hervorgebracht werden.
-
Die Vorteile, die sich aus der verteilten
Art des Systems ableiten, erfreuen sich minimaler Last für die Cartridge-Entwickler. Speziell
müssen
sich Cartridges nicht der Tatsache "bewusst" sein, dass sie als Teil eines verteilten
Systems arbeiten, da sie von der Komplexität des verteilten Systems durch
Module isoliert sind, welche hier als Cartridge-Ausführungs-Engines
bezeichnet werden. Die dadurch erreichte Isolation erlaubt es Cartridge-Entwicklern sich
eher auf die Probleme zu fokussieren, auf welche ihre Cartridge
gerichtet ist, als auf die Komplexitäten der Zwischen-Maschinen-Kommunikation.
-
Gemäß einem Aspekt der Erfindung
arbeitet ein Lastverteiler auf einer ersten Maschine. Eine Cartridge-Ausführungs-Engine
arbeitet auf einer zweiten Maschine, welche unterschiedlich von
der ersten Maschine ist. Der Lastverteiler empfängt von einem Web-Listener
eine erste Nachricht, welche ein Ausführen der Operation anfordert.
Die erste Nachricht wurde an den Lastverteiler gesendet in Antwort
auf den Web-Listener, welcher eine Browser-Anforderung von einem Browser empfängt.
-
In Antwort auf die erste Nachricht
sendet der Lastverteiler eine zweite Nachricht zu der Cartridge- Ausführungs-Engine.
In Antwort auf die zweite Nachricht gibt die Cartridge-Ausführungs-Engine
eine dritte Nachricht zu einer Cartridge weiter, welche auf der
zweiten Maschine ausführt.
In Antwort auf den Erhalt der dritten Nachricht führt die
Cartridge die Operation aus. Da Anforderungen an die Cartridge mittels
der Cartridge-Ausführungs-Engine
gesendet werden und die Cartridge-Ausführungs-Engine sich auf derselben
Maschine wie die Cartridge befindet, isoliert die Cartridge-Ausführungs-Engine
die Cartridge wirksam von den Komplexitäten der Unterstützung der
Zwischen-Maschinen-Kommunikation.
-
Gemäß einem anderen Aspekt der
Erfindung wird ein System zum Durchführen von Operationen, welche
Browser-Anforderungen
zugeordnet sind, bereitgestellt. Das System weist eine Mehrzahl
von Lastverteilern auf, welche mit einer Mehrzahl von Web-Listenern
gekoppelt sind, einen Inter-Maschinen-Kommunikations-Mechanismus
und eine Mehrzahl von Cartridges. Die Cartridges werden mittels
einer Standard-Cartridge-Schnittstelle aufgerufen, führen aber
unterschiedliche Operationen durch.
-
Das System weist weiterhin eine Mehrzahl
der Cartridge-Ausführungs-Engines
auf, welche mit der Mehrzahl von Lastverteilern mittels des Inter-Maschinen-Kommunikations-Mechanismus kommunizieren
und mit der Mehrzahl der Cartridges durch Aufrufen von Routinen
in der Mehrzahl der Cartridges mittels der Standard-Cartridge-Schnittstelle,
kommunizieren. Jeder Lastverteiler ist konfiguriert zum Senden einer
ersten Nachricht durch den Inter-Maschinen-Kommunikations-Mechanismus an eine bestimmte
Cartridge-Ausführungs-Engine
der Mehrzahl der Cartridge-Ausführungs-Engines in Antwort
auf einen Web-Listener, welcher eine Browser-Anforderung empfängt, welche
die Ausführung
einer Operation einer bestimmten Cartridge benötigt. Die bestimmte Cartridge-Ausführungs-Engine
ist konfiguriert, in dem auf die erste Nachricht durch Aufrufen
einer Routine in der bestimmten Cartridge geantwortet wird, welche
die Operation ausführt.
-
Kurzbeschreibung
der Zeichnungen
-
Die Erfindung wird mittels Beispielen
dargestellt und nicht mittels Einschränkungen und in den Bildern der
begleitenden Zeichnungen beziehen sich gleiche Bezugszeichen auf ähnliche
Elemente und in welchen:
-
1 ein
Block-Diagramm eines Computersystems ist, auf welchem ein Ausführungsbeispiel
der Erfindung implementiert sein kann;
-
2 ein
Block-Diagramm eines verteilten Anwendungs-Servers gemäß einem Ausführungsbeispiel der
Erfindung ist;
-
3A ein
Teil eines Ablauf-Diagramms ist, welches Schritte zum Behandeln
einer Browser-Anforderung gemäß einem
Ausführungsbeispiel
der Erfindung dargestellt;
-
3B ein
anderer Teil des Ablauf-Diagramms ist, welches Schritte zum Behandeln
einer Browser-Anforderung gemäß einem
Ausführungsbeispiel
der Erfindung dargestellt;
-
4 ein
Block-Diagramm einer Tabelle ist, welche Informationen aufweist,
welche durch einen Lastverteiler verwaltet werden, gemäß einem
Ausführungsbeispiel
der Erfindung; und
-
5 ein
Block-Diagramm einer Tabelle ist, welche Informationen aufweist,
welche durch einen Ressourcen-Manager
verwaltet werden, gemäß einem
Ausführungsbeispiel
der Erfindung.
-
Detaillierte
Beschreibung des bevorzugten Ausführungsbeispiels
-
Ein Verfahren und eine Vorrichtung
zum Durchführen
von Operationen über
ein Netzwerk wird beschrieben. In der folgenden Beschreibung werden,
zum Zwecke der Erklärung,
zahlreiche spezifische Details erklärt, um ein gründliches
Verständnis
der Erfindung zu verschaffen. Es wird dennoch für jene, die in der Technik
geübt sind,
offensichtlich sein, dass die Erfindung ohne diese spezifischen
Details angewendet werden kann. Andererseits werden gut bekannte
Strukturen und Vorrichtungen in Block-Diagramm-Form gezeigt, um zu
Vermeiden, dass die Erfindung undeutlich gemacht wird.
-
Hardware-Übersicht
-
1 ist
ein Block-Diagramm, welches ein Computersystem 100 darstellt,
auf welchem ein Ausführungsbeispiel
der Erfindung implementiert sein kann. Das Computersystem 100 weist
einen Bus 102 oder andere Kommunikations-Mechanismen zum Übertragen
von Informationen und einen Prozessor 104 auf, welcher
mit dem Bus 102 zum Verarbeiten von Informationen gekoppelt ist.
Das Computersystem 100 weist ferner einen Hauptspeicher 106,
wie einen Schreib-Lese-Speicher (RAM) oder andere dynamische Speichervorrichtungen
auf, welche mit dem Bus 102 zum Speichern von Informationen und
Befehlen gekoppelt sind, welche durch den Prozessor 104 ausgeführt werden sollen.
Der Hauptspeicher 106 kann auch zur Speicherung von temporären Variablen
und anderen Hilfsinformationen, während der Ausführung von
durch den Prozessor 104 auszuführenden Befehlen benutzt werden.
Das Computersystem 100 weist weiter einen Nur-Lese-Speicher (ROM) 108 oder
andere statische Speichervorrichtungen, welche mit dem Bus 108 gekoppelt
sind zum Speichern von statischen Informationen und Befehlen für den Prozessor 104 auf.
Eine Speichervorrichtung 110, wie eine magnetische Diskette
oder eine-optische Scheibe, ist bereitgestellt und an Bus 102 gekoppelt
zum Speichern von Informationen und Befehlen.
-
Das Computersystem 100 kann über Bus 102 an
eine Anzeige 112, wie eine Kathodenstrahlröhre (CRT)
zum Anzeigen von Informationen für
einen Computer-Benutzer, gekoppelt sein. Eine Eingabe-Vorrichtung 114,
welche alphanumerische und andere Tasten aufweist, ist an Bus 102
zum Übertragen
einer Informations- und einer Befehlsauswahl an den Prozessor 104,
gekoppelt. Ein anderer Typ von Benutzer-Eingabevorrichtung ist die Cursor-Steuerung 116,
wie eine Maus, ein Trackball, oder Cursor-Richtungstasten zum Übertragen
von einer Richtungsinformationsauswahl und einer Befehlsauswahl
zum Prozessor 104 und zum Steuern der Cursor-Bewegung auf
der Anzeige 112. Diese Eingabe-Vorrichtung hat typischerweise zwei
Freiheitsgrade in zwei Achsen, einer ersten Achse (z. B. x) und
einer zweiten Achse (z. B. y), welche es der Vorrichtung erlauben,
Positionen in einer Ebene anzugeben.
-
Die Erfindung bezieht sich auf die
Benutzung des Computersystems 100 zum Durchführen spezifischer Operationen
in Antwort auf Nachrichten von Browsern. Gemäß einem Ausführungsbeispiel
der Erfindung, werden die Operationen durch das Computersystem 100 durchgeführt in Antwort
auf Prozessor 104, der eine oder mehrere Sequenzen von
einem oder mehreren Befehlen durchführt, welche im Hauptspeicher 106 enthalten
sind. Solche Befehle können
in den Hauptspeicher 106 von einem anderen Computer-lesbaren
Medium, wie der Speichervorrichtung 110, eingelesen werden.
Die Ausführung
der Sequenzen von Befehlen, welche im Hauptspeicher 106 enthalten
sind, veranlasst den Prozessor 104 die darin beschriebenen
Prozess-Schritte durchzuführen.
In alternativen Ausführungsbeispielen
können
festverdrahtete Schaltkreise an Stelle von oder in Kombination mit
Software-Befehlen zum Realisieren der Erfindung benutzt werden.
Daher sind Ausführungsbeispiele
der Erfindung nicht auf irgendeine spezifische Kombination von Hardware-Schaltkreisen und
Software begrenzt.
-
Der Begriff "Computer-lesbares Medium" wie hierin benutzt,
bezieht sich auf irgendein Medium welches an der Bereitstellung
von Befehlen für
den Prozessor 104 zur Ausführung teilnimmt. Solch ein
Medium kann viele Formen annehmen, einschließlich aber nicht begrenzt auf,
nichtflüchtige
Medien, flüchtige
Medien und Übertragungsmedien.
Nicht-flüchtige
Medien weisen zum Beispiel optische oder magnetische Disketten wie
Speichervorrichtung 110 auf. Flüchtige Medien weisen dynamische
Speicher, wie den Hauptspeicher 106 auf. Übertragungsmedien
weisen Koaxialkabel, Kupferdrähte
und Faseroptik, einschließlich
der Drähte
die Bus 102 aufweist, auf. Übertragungsmedien können auch
die Form von akustischen Wellen oder Lichtwellen annehmen, so wie
jene, welche während
Radiowellen- und Infrarot-Datenübertragung
erzeugt werden.
-
Herkömmliche Formen von Computer-lesbaren
Medien weisen zum Beispiel Disketten, flexible Discs, Festplatten,
Magnetbänder
oder jedes andere magnetische Medium, CD-ROM, jede anderen optischen
Medien, Lochkarten, Papierstreifen oder jede anderen physikalischen
Medien mit Mustern von Löchern,
RAM, PROM und EPROM, ein FLASH-EPROM, jeden anderen Speicherchip
oder -Kassette, eine Trägerwelle
wie hier später
beschrieben oder jedes andere Medium von welchem ein Computer lesen
kann, auf.
-
Verschiedene Formen von Computer-lesbaren
Medien können
beim Tragen einer oder mehrerer Sequenzen von einem oder mehreren
Befehlen zum Prozessor 104 einbezogen sein. Zum Beispiel
können
die Anweisungen anfänglich
auf einer Magnetplatte eines fernen Computers getragen werden. Der
ferne Computer kann die Anweisungen in seinen dynamischen Speicher
laden und die Anweisungen über
eine Telefonleitung senden, wobei ein Modem benutzt wird. Ein zum
Computersystem 100 lokales Modem kann die Daten auf der
Telefonleitung empfangen und einen Infrarot-Transmitter zum Umwandeln
der Daten in ein Infrarot-Signal benutzen. Ein mit dem Bus 102 gekoppelter
Infrarot-Detektor kann die im Infrarot-Signal getragenen Daten empfangen
und die Daten auf Bus 102 platzieren. Bus 102 trägt die Daten
zum Hauptspeicher 106, von welchem der Prozessor 104 die
Anweisungen lädt
und ausführt.
Die durch den Hauptspeicher 106 empfangenen Anweisungen
können
wahlweise entweder vor oder nach der Ausführung durch den Prozessor 104 in
der Speichervorrichtung 110 gespeichert werden.
-
Das Computersystem 100 weist
auch eine mit dem Bus 102 gekoppelte Kommunikations-Schnittstelle 118 auf.
Die Kommunikations-Schnittstelle 118 stellt eine Zwei-Wege-Daten-Kommunikation
zur Verfügung, welche
an eine Netzwerkverbindung 120 koppelt, welche an ein lokales
Netzwerk 122 gekoppelt ist. Die Kommunikations-Schnittstelle 118 kann
zum Beispiel eine ISDN (integrated services digital network)-Karte
oder ein Modem sein, zum Bereitstellen einer Daten-Kommunikations-Kopplung
zu einem entsprechenden Typ von Telefonleitung. Als ein anderes
Beispiel kann die Kommunikations-Schnittstelle 118 eine
LAN (local area network)-Karte sein, zum Bereitstellen einer Daten-Kommunikations-Kopplung
zu einem kompatiblen LAN. Kabellose Verbindungen können auch
implementiert werden. In jeder solchen Implementierung sendet und
empfängt
die Kommunikations-Schnittstelle 118 elektrische, elektromagnetische
oder optische Signale, welche digitale Datenströme tragen, die verschiedene
Arten von Informationen darstellen.
-
Die Netzwerkverbindung 120 stellt
typischerweise Daten-Kommunikation
mittels einem oder mehrerer Netzwerke zu anderen Daten-Vorrichtungen
zur Verfügung.
Zum Beispiel kann die Netzwerkverbindung 120 eine Verbindung
mittels des lokalen Netzwerkes 122 zu einem Host-Computer 124 oder
zu einer Daten-Anlage anbieten, welche durch einen Internet-Dienstanbieter (ISP,
internet service provider) 126 betrieben wird. ISP 126 stellt
wiederum Datenkommunikationsdienste mittels des weltweiten Paket-Daten-Kommunikationsnetzwerkes
zur Verfügung,
welches nun gewöhnlich
als das "Internet" 128 bezeichnet wird.
Das lokale Netzwerk 122 und das Internet 128 benutzen
beide elektrische, elektromagnetische oder optische Signale, welche
digitale Datenströme
tragen. Die Signale durch die verschiedenen Netzwerke und die Signale
auf der Netzwerkverbindung 120 und durch die Kommunikations-Schnittstelle 118,
welche die digitalen Daten zu dem und von dem Computersystem 100 tragen,
sind beispielhafte Formen von Trägerwellen,
welche die Information transportieren.
-
Das Computersystem 100 kann
Nachrichten senden und Daten, inklusive Programmcode, mittels des/der
Netzwerkee), der Netzwerkverbindung 120 und der Kommunikations-Schnittstelle 118 empfangen.
Im Internet-Beispiel kann ein Server 130 einen angeforderten
Code für
ein Anwendungsprogramm mittels des Internets 128, des ISP 126,
des lokalen Netzwerkes 122 und der Kommunikations-Schnittstelle 118 übertragen.
-
Der empfangene Code kann durch den
Prozessor 104, wenn er empfangen wurde, ausgeführt werden und/oder
in Speichervorrichtung 110 oder in anderen nicht-flüchtigen
Speichern zur späteren
Ausführung
gespeichert werden. Ruf diese Weise kann das Computersystem 100 Anwendungscode
in der Form einer Trägerwelle
empfangen.
-
Funktionelle Übersicht
des Anwendungs-Servers
-
2 ist
ein Blockdiagramm eines Systems 200, welches gemäß einem
Ausführungsbeispiel
der Erfindung entworfen wurde. Das System 200 weist eine
Mehrzahl von Browsern 202, 204 und 206 auf,
welche mit einer Mehrzahl von Listenern 210, 216 und 222 über das
Internet 208 gemäß dem HTTP-Protokoll kommunizieren.
In Antwort auf Anforderungen von den Browsern, veranlassen die Listener
einen Web-Anwendungs-Server
280 zum Aufrufen von Software-Modulen, welche hierin als Cartridges
bezeichnet werden. Im erklärten
Ausführungsbeispiel
hat der Web-Anwendungs-Server 280 die Ausführung von
drei Cartridges 230, 234 und 238 ausgelöst.
-
Der Web-Anwendungs-Server 280 weist
zahlreiche Komponenten auf, einschließlich Transport-Adapter 212, 218 und 224,
Lastverteiler 214, 220 und 226, einem Authentifizierungs-Server
252, einem virtueller-Pfad- Manager
250, einem Ressourcen-Manager 254, einem Konfigurations-Versorger 256 und
einer Mehrzahl der Cartridge-Ausführungs-Engines 228, 232 und 236.
Die verschiedenen Komponenten des Web-Anwendungs-Servers 280 werden
hier später
in größerem Detail
beschrieben.
-
Es ist bedeutsam, dass die zahlreichen
Komponenten des Web-Anwendungs-Servers 280 mittels eines
Inter-Maschinen-Kommunikations-Mechanismus,
wie einen Objekt-Request-Broker 282 kommunizieren. Durch
Benutzen eines Inter-Maschinen-Kommunikations-Mechanismus
können
Cartridge-Instanzen, welche die in Browser-Anforderungen beschriebenen
Operationen durchführen,
auf anderen Maschinen ablaufen als die Listener, welche die Anforderungen
empfangen und die Browser, welche die Anforderungen ausgeben. Da die
Cartridge-Instanzen auf anderen Maschinen als die Listener sind,
sind die Listener besser gegen fehlerhafte Cartridge-Instanzen isoliert,
wodurch die Zuverlässigkeit
und die Sicherheit des Systems überarbeitet werden.
Zusätzlich
wird die Skalierbarkeit des Systems beträchtlich erhöht durch Verteilen der Prozesslast
der Ausführung
der Cartridge-Instanzen
auf viele Maschinen, eher als auf dieselbe Maschine, die den Listener ausführt. Die
Fähigkeit
die Ausführung
der Cartridge-Instanzen auf mehrere Maschinen zu verteilen, erlaubt das
Benutzen zahlreicher Lastverteilungstechniken in der Entscheidung,
wann und wo neue Cartridge-Instanzen hervorgebracht werden.
-
Ein typischer Betrieb innerhalb des
Systems 200 weist im Allgemeinen die folgenden Stufen auf:
Ein
Browser überträgt eine
Anforderung über
das Internet 208.
-
Ein Listener empfängt die Anforderung und reicht
sie mittels eines Transport-Adapters zu einem Lastverteiler.
-
Der Lastverteiler kommuniziert mit
dem virtuellen-Pfad-Manager
250 um die geeignete Cartridge zum Behandeln der Anforderung zu
bestimmen.
-
In diesem Moment macht der Lastverteiler
eines von zwei Dingen. Wenn der Lastverteiler von einer unbenutzten
Instanz für
diese Cartridge weiß,
sendet der Lastverteiler die Anforderung zu dieser Instanz. Wenn
es keine unbenutzten Cartridge-Instanzen dieser Cartridge gibt,
fordert der Lastverteiler den Ressourcen-Manager 254 zum Erzeugen
einer neuen Cartridge-Instanz auf. Nachdem die Instanz erfolgreich
startet, benachrichtigt die Cartridge den Ressourcen-Manager über ihre
Existenz. Der Ressourcen-Manager 254 benachrichtigt
dann den Lastverteiler über
die neue Instanz. Der Lastverteiler erzeugt eine überarbeitete
Anforderung basierend auf der Browser-Anforderung und sendet die überarbeitete
Anforderung an die neue Instanz.
-
Die Cartridge-Instanz behandelt die überarbeitete
Anforderung und sendet eine Antwort an den Lastverteiler.
-
Der Lastverteiler reicht die Antwort
zurück
an den Client mittels des Listeners. Diese Stufen sollen in größerem Detail
im Folgenden beschreiben werden.
-
Cartridges
-
Cartridges sind Code-Module zum Durchführen spezifischer
Anwendungen und Systemfunktionen. Eine Cartridge bildet die Basiseinheit
zur Verteilung im System 200. Gemäß einem Ausführungsbeispiel
der Erfindung, werden Cartridges unter Benutzen von Universal Resource
Locators (URLs) benannt. Daher hat ein Cartridge-Name zwei Teile:
Die IP-Adresse des Servers, auf dem die Cartridge liegt und den
virtuellen Pfad in der Server-Verzeichnisstruktur des kompilierten
Cartridge-Codes. Da Cartridges unter Benutzen von URLs benannt werden,
ist der Cartridge-Namensraum global und es kann auf Cartridges durch
Benutzen derselben Nachrichtentechniken zugegriffen werden, wie
diejenigen, die zum Zugreifen auf andere Web-Ressourcen, wie Dokumente,
benutzt werden.
-
Gemäß einem Ausführungsbeispiel
der Erfindung hat jede Cartridge eine Standard-Schnittstelle, welches
eine allgemeine Gesamtstruktur für
alle Cartridges bereitstellt. Die Standard-Schnittstelle definiert
die Schnittstelle von Routinen, welche von dem Web-Anwendungs-Server
280 unter
besonderen Bedingungen aufgerufen werden. Gemäß einem Ausführungsbeispiel
der Erfindung ist die abstrakte Cartridge-Schnittstelle wie folgt:
-
Die init()-Routine ist verantwortlich
für das
Initialisieren der Cartridge-Instanz: Das kann das Aufrufen des
Constructors von einigen Unter-Objekten aufweisen, das Aufteilen
von Threads und das Erwerben aller anderen benötigten Gemeinschaftsressourcen.
-
Die shutdown()-Routine ist verantwortlich
für das
Aufräumen
aller Ressourcen und Schließen
der Cartridge-Instanz.
Wenn einmal die shutdown()-Routine in einer Cartridge-Instanz aufgerufen
ist, wird sie sofort unerreichbar für das Bedienen nachfolgender
Anforderungen.
-
Die authenticate()-Routine bestätigt, ob
der die Dienste anfordernde Client berechtigt ist, diese Dienste
zu benutzen.
-
Die exec()-Routine ist ein allgemeiner
Weg zum Verteilen aller Dienst-Anforderungen an die Cartridge.
-
Beispielhafte
Cartridges
-
Jede Cartridge ist entweder als eine
Cartridge die eine wohldefinierte Funktion ausführt oder als eine programmierbare
Cartridge, die als ein Interpreter oder eine Routinenumgebung für eine Anwendung
dient, konfiguriert. Ein Beispiel einer programmierbaren Cartridge
ist eine PL/SQL-Runtime, welche zum Verarbeiten von Datenbank-Anforderungen
gemäß der Oracle-basierten
Programmiersprache unter Benutzen der Structured Query Language
(PL/SQL), konfiguriert ist. Die PL/SQL-Runtime führt eine Browser-Anforderung
aus, welche eine Datenbank-Anforderung
hat. Die PL/SQL-Runtime bearbeitet die Anforderung zum Beispiel
durch Zugreifen über
eine Datenverbindung auf einen Datenbank-Server, der mit der Cartridge-Instanz
in Verbindung steht.
-
Ein anderes Beispiel einer programmierbaren
Cartridge ist ein JAVA-Runtime-Interpreter. Die JAVA-Runtime-Interpreter-Cartridge erlaubt
Webanwendungs-Entwicklern das Schreiben serverseitiger JAVA-Anwendungen
zum Verarbeiten von Browser-Anforderungen. Ähnlich kann ein angepasster
Server als eine Cartridge eingerichtet werden, zum Bereitstellen
dynamischer Operationen wie zum Beispiel den Zugriff auf Prozesse,
welche von einem dritten Server ausgeführt werden.
-
Lastverteiler
-
Lastverteiler sind Software-Module
die zum Weiterleiten der von Listenern empfangenen Anforderungen
zu den geeigneten Cartridges eingerichtet sind. Gemäß einem
Ausführungsbeispiel
der Erfindung sind Lastverteiler als serverseitige Programm-Erweiterungen
(d. h. "Plug-Ins") realisiert. Als
solche sind die Lastverteiler in denselben Adressraum geladen und
arbeiten innerhalb desselben Adressraumes wie die Listener zu denen
sie gehören.
Die Lastverteiler können
mit dem Listener-Code zum Zeitpunkt des Kompilierens gekoppelt sein
oder dynamisch zur Laufzeit geladen werden.
-
Im dargestellten Ausführungsbeispiel
sind Lastverteiler 214, 220 und 226 jeweils
mit den Listenern 210, 216 bzw. 222 gekoppelt.
Die Lastverteiler 214, 220 und 226 leiten
mittels der Listener 210, 216 bzw. 222 Browseranforderungen
gezielt zu den Cartridges.
-
Angenommen zum Beispiel, dass der
Listener 210 eine Browseranforderung über das Internet 208, welche
in Form eines Uniform Resource Locators (URL) geliefert wird, empfängt. Die
Browseranforderung dient als ein Identifizierer für ein Webobjekt,
zum Beispiel eine HTML-Seite
oder eine auszuführende
Operation. Der Listener 210 überreicht die Browseranforderung
an den Lastverteiler 214 ohne irgendeinen Versuch zur Interpretation
der Browseranforderung. Der Lastverteiler 214
- (1) kommuniziert mit dem virtuellen-Pfad-Manager 250 zum Identifizieren
einer durch die Browseranforderung ausgewählten Cartridge und zum Bestimmen,
ob die Cartridge eine Authentifizierung benötigt,
- (2) kommuniziert mit dem Authentifizierungs-Server 252,
wenn die Cartridge eine Authentifizierung benötigt, zum Bestimmen, ob es
dem Browser erlaubt ist auf die ausgewählte Cartridge zuzugreifen,
- (3) kommuniziert mit dem Ressourcen-Manager, wenn der Zugriff
erlaubt ist, zum Bestimmen der spezifischen Instanz der ausgewählten Cartridge
zu welcher die Browser-Anforderung
gesendet werden soll und
- (4) erzeugt und sendet eine überarbeitete
Browser-Anforderung
zum Ausführen
durch die angegebene Instanz der Cartridge, nach Erhalt der Browser-Anforderung.
-
Die überarbeitete Browser-Anforderung
verpackt Informationen wieder, die in der ursprünglichen Browser-Anforderung empfangen
wurden. Die überarbeitete
Browser-Anforderung
kann zum Beispiel ein Kontextobjekt aufweisen, welches Daten enthält, die
für den
ordentlichen Betrieb der Cartridge benötigt werden. Die für den ordentlichen
Betrieb der Cartridge benötigten
Daten können
zum Beispiel eine Transaktions-ID aufweisen, welche eine Transaktion
identifiziert, mit der die Browser-Anforderung gekoppelt ist.
-
Wenn die Cartridge auf die Anforderung
antwortet, sendet die Cartridge die Antwort an den Lastverteiler
und der Lastverteiler gibt die Antwort an den Listener zum Übertragen
zum Browser, der die Anforderung ausgelöst hat.
-
Konfigurations-Versorger
-
Gemäß einem Ausführungsbeispiel
der Erfindung werden Cartridges, welche mit dem Web-Anwendungs-Server 280 benutzt
werden sollen, zuerst mit dem Web-Anwendungs-Server
280 registriert.
Während des
Registrierungsprozesses werden Informationen über die Cartridges an dem Konfigurations-Versorger 256 bereitgestellt.
Der Konfigurations-Versorger 256 speichert die Information
als Metadaten 258 zum späteren
Zugriff durch die Komponenten des Web-Anwendungs-Servers 280.
-
Die Metadaten 285 können zum
Beispiel aufweisen:
- (1) den Cartridge-Namen;
- (2) die minimale Anzahl von benötigten Instanzen;
- (3) die maximale Anzahl von Instanzen;
- (4) den Ort des Codes, der die Cartridge implementiert;
- (5) die Programm-abhängigen
Funktionsnamen, welche durch die Cartridge-Ausführungs-Engine zum Ausführen der
Rückruf-Funktionen (Initialisierung,
Anforderungenbehandlung, Abschaltung) benutzt werden;
- (6) eine Liste von Maschinen zum Ausführen der Cartridge;
- (7) die Leerzeit für
die Cartridge (die Menge von Zeit die für Instanzen der Cartridge erlaubt
ist, unbenutzt zu sein, bevor sie abgeschaltet werden);
- (8) ein Objekt-Identifizierer; und
- (9) Daten, welche den Typ des Authentifizierungsdienstes anzeigen,
welche, wenn überhaupt,
mit der Cartridge benutzt werden.
-
Der Objekt-Identifizierer gibt die
Daten an, welche durch eine Browser-Anforderung, zum Anfordern von
Leistung einer Operation durch die entsprechende Cartridge, bereitgestellt
werden müssen.
Der Objekt-Typ kann ein spezielles Wort oder eine URL sein oder
kann einen virtuellen Pfad wie "/java" aufweisen.
-
Wenn einmal der Konfigurations-Versorger 256 die
Konfigurations-Information für
eine bestimmte Cartridge in den Metadaten 258 gespeichert
hat, wird diese Cartridge automatisch registriert, wenn der Web-Anwendungs-Server 280 gestartet
wurde.
-
Nachdem eine Cartridge mit dem Web-Anwendungs-Server 280 registriert
ist, initiiert der Ressourcen-Manager 254 die minimale
Anzahl von Instanzen für
die Cartridge. Wenn einmal die minimale Anzahl von Instanzen initiiert
wurde, ist der Web-Anwendungs-Server 280 zum Ausführen von
Browseranforderungen vorbereitet.
-
Virtueller-Pfad-Manager
-
Wie oben erwähnt, kommunizieren Lastverteiler
mit dem virtuellen-Pfad-Manager 250 zum Bestimmen, wohin jede überarbeitete
Browser-Anforderung geleitet wird. Insbesondere weist jede Browser-Anforderung
typischerweise eine URL auf. Durch den Erhalt einer Browser-Anforderung
sendet der Lastverteiler die URL in der Anforderung zum virtuellen-Pfad-Manager
250. Der virtuelle-Pfad-Manager 250 antwortet durch Senden von Daten
an den Lastverteiler, wenn überhaupt,
welche die Cartridge identifizieren, die mit der URL gekoppelt ist.
-
Um die benötigte Information an den Lastverteilern
bereitzustellen, konsultiert der virtuelle-Pfad-Manager 250 die
Metadaten 258, welche URLs auf Cartridges abbilden. In
Antwort auf den Erhalt einer Browser-Anforderung benutzt der virtuelle-Pfad-Manager
250 die Abbildungsdaten zum Bestimmen der Cartridge, zu welcher
die in der Browser-Anforderung
enthaltene URL entspricht.
-
Wenn zum Beispiel die Browser-Anforderung
eine URL-Anforderung
ist, welche mit dem virtuellen Pfad "/java" beginnt, kann die Abbildung anzeigen,
dass die JAVA-Interpreter-Cartridge
zum Behandeln von Anforderungen, welche den virtuellen Pfad "/java" haben, konfiguriert
ist.
-
Gemäß einem Ausführungsbeispiel
der Erfindung bestimmt der virtuelle-Pfad-Manager 250 auch, ob die
mit der URL gekoppelte Cartridge eine Authentifizierung benötigt. Wenn
die Cartridge eine Authentifizierung benötigt, zeigt der virtuelle-Pfad-Manager
250 in der Antwort an, dass der virtuelle-Pfad-Manager 250 an den
Lastverteiler sendet, dass eine Authentifizierung benötigt wird.
Wenn eine Authentifizierung nicht benötigt wird, erzeugt und sendet
der Lastverteiler eine überarbeitete
Browser-Anforderung an eine Instanz der Cartridge ohne Aufruf des
Authentifizierungs-Servers 252. Wenn eine Authentifizierung
benötigt
ist, sendet der Lastverteiler die überarbeitete Anforderung nur
dann an eine Instanz der Cartridge, nachdem der Authentifizierungs-Server
anzeigt, dass die überarbeitete
Anforderung an eine Instanz der Cartridge übermittelt werden kann.
-
Ressourcen-Manager
-
Der Ressourcen-Manager 254 des
Web-Anwendungs-Servers 280 verwaltet die Ausführung von
jeder der Cartridges durch Auslösen
einer vorgegebenen minimalen Anzahl von Instanzen für die Cartridges, Last-Ausgleich
zwischen den Instanzen jeder Cartridge und Aufruf neuer Instanzen
der Cartridges, wenn nötig bis
zu einer vorgegebenen maximalen Anzahl von Instanzen einer gegebenen
Cartridge.
-
Angenommen zum Beispiel, dass die
Metadaten für
eine bestimmte Cartridge (Cl) die folgenden Informationen aufweisen:
Name
= Cl
Minimale Instanzen = 10
Maximale Instanzen = 50
Hostmaschinen
= M1, M2, M3
Leerzeit = 30 Sekunden
-
Basierend auf diesen Metadaten löst der Ressourcen-Manager 254 zehn
Instanzen von C1 aus, wenn Cartridge C1 zuerst registriert wird.
Der Ressourcen-Manager 254 löst die zehn Instanzen auf Maschinen
aus, welche mit den Titeln M1, M2 und M3 gekoppelt sind.
-
Auf den Empfang von Anforderungen
von Lastverteilern zum Zugriff auf C1 hin, bestimmt der Ressourcen-Manager 254,
ob irgendeine existierende Instanz-von C1 zum Benutzen verfügbar ist.
Wenn keine Instanz von C1 verfügbar
ist, wenn eine Anforderung empfangen wird, bestimmt der Ressourcen-Manager 254,
ob schon die maximale Anzahl von Instanzen von C1 läuft. Wenn
die maximale Anzahl von Instanzen von C1 noch nicht läuft, löst der Ressourcen-Manager 254 eine
neue Instanz von C1 auf einer der möglichen Hostmaschinen aus und überträgt eine
Nachricht, welche die neue Instanz identifiziert, an den Lastverteiler,
der die Anforderung ausgegeben hat. Wenn die maximale Anzahl von
Instanzen von C1 schon läuft,
dann sendet der Ressourcen-Manager 254 eine Nachricht an
den Lastverteiler, der die Anforderung ausgegeben hat, welche anzeigt,
dass die Anforderung zu dieser Zeit nicht behandelt werden kann.
-
Last-Ausgleich
-
Gemäß einem Ausführungsbeispiel
der Erfindung wendet der Ressourcen-Manager 254 einen Satz von
Last-Ausgleichs- Regeln
an zum Bestimmen wo Instanzen der Cartridges initiiert werden sollen,
wenn es mehr als eine mögliche
Hostmaschine gibt. Folglich sind in dem obigen Beispiel M1, M2 und
M3 alle befähigt, zum
Ausführen
von Instanzen der Cartridge C1. Wenn M1, M2 und M3 dieselbe Verarbeitungskapazität haben, kann
es wünschenswert
sein, die Instanzen gleichmäßig auf
die drei Maschinen zu verteilen. Wenn jedoch M1 zehn Mal die Verarbeitungsleistung
von M2 und M3 hat, kann es wünschenswert
sein, alle Instanzen von C1 bis zu einem gewissen Punkt auf M1 zu
initiieren und dann zusätzliche
Instanzen gleichmäßig auf
M1, M2 und M3 zu verteilen.
-
Um den Ressourcen-Manager 254 beim
Bestimmen zu unterstützen,
wie die Last auf mögliche
Maschinen verteilt wird, können
die für
jede Cartridge gespeicherten Metadaten zusätzliche Details aufweisen. Die
Metadaten können
zum Beispiel eine separate minimale und maximale Anzahl von Instanzen
für jede
Maschine angeben. Die minimalen und maximalen Werte pro Maschine
können
anstelle von oder in Kombination mit einem minimalen und maximalen
Wert, der auf alle Maschinen anwendbar ist, benutzt werden. Der
Ressourcen-Manager 254 kann dann neue Instanzen auf die
Maschinen verteilen, basierend darauf, welche Maschine das kleinste
Verhältnis
von gegenwärtig
ausgeführten
Instanzen zu maximal für
diese Maschine erlaubten Instanzen hat.
-
Die Metadaten können auch eine Reihenfolge
angeben für
die Maschinen, welche eine bestimmte Cartridge ausführen können. Die
Maschine an der (N + 1)ten Position in der Reihenfolge wird nur
dann zum Ausführen
von Instanzen der Cartridge benutzt, wenn die Maschine an der Nten
Position in der Reihenfolge schon ihre, an der Nten Maschine erlaubte,
maximale Anzahl von Instanzen ausführt.
-
Anstelle von oder zusätzlich zu
der maximalen und aktuellen Anzahl von Instanzen auf jeder einzelnen Maschine
kann der Ressourcen-Manager 254 auch verschiedene Systemparameter
berücksichtigen
zum Bestimmen, welche Maschine eine neue Instanz einer Cartridge
aufnehmen soll. Solche Parameter können zum Beispiel die Menge
von unbenutztem Speicher auf einer Maschine, die Gesamtzahl von
gegenwärtig
auf der Maschine laufenden Prozessen, den Typ der Maschine usw.
aufweisen. Für
jede mögliche
Maschine bestimmt der Ressourcen-Manager 254 den gewichteten
Mittelwert dieser Parameter. Die Maschine mit dem höchsten gewichteten
Mittelwert wird dann zum Aufnehmen der neuen Cartridge-Instanz ausgewählt.
-
Cartridge-Instanz-Statusverfolgung
-
Gemäß einem Ausführungsbeispiel
der Erfindung unterhält
der Ressourcen-Manager 254 Zustands-Information um die
Cartridge-Instanzen, die erzeugt wurden, im Auge zu behalten. Die
Zustands-Information weist Daten auf, welche die Instanz identifizieren,
die Maschine identifizieren, welche die Instanz ausführt und
den Listener identifizieren, an welchen die Instanz zugewiesen wurde.
-
5 zeigt
eine Tabelle 500, welche von dem Ressourcen-Manager 254
zum Speichern dieser Zustands-Information
unterhalten werden kann. Tabelle 500 weist eine Instanz-Spalte 502,
eine Cartridge-Spalte 504, eine Listener-Spalte 506 und
eine Maschinen-Spalte 508 auf. Jede Zeile der Tabelle 500 entspricht
einer einzelnen Cartridge-Instanz.
Innerhalb der Zeile für
eine gegebene Cartridge-Instanz
identifiziert die Cartridge-Spalte 504 die Cartridge, welche
mit der Cartridge-Instanz gekoppelt ist und Instanz-Spalte 502 zeigt
die Instanz-Nummer der Cartridge-Instanz. Zeile 510 zum
Beispiel entspricht einer Instanz der Cartridge C1. Deshalb gibt
Cartridge-Spalte 504 aus Zeile 510 Cartridge C1
an. Instanz-Spalte 502 aus Zeile 510 gibt an,
dass die Zeile 510 zugeordnete Cartridge-Instanz, Instanz 1 der
Cartridge C1 ist.
-
Die Listener-Spalte 506 gibt
den Listener an, zu welchem die, einer Zeile zugeordnete, Cartridge-Instanz
zugeordnet ist. Die Maschinen-Spalte 508 gibt die Maschine
an, auf welcher die mit einer Zeile verknüpfte Cartridge-Instanz ausgeführt wird.
Die mit der Zeile 510 verknüpfte Cartridge-Instanz zum
Beispiel wurde Listener 210 zugewiesen und wird auf Maschine
M1 ausgeführt.
-
Ähnlich
dem Ressourcen-Manager 254, unterhält jeder Lastverteiler Zustandsinformationen
für die Cartridge-Instanzen, welche
dem Listener zugewiesen wurden, zu welchem der Lastverteiler verknüpft ist.
Solche Zustandsinformationen können
zum Beispiel in einer Tabelle 400, wie in Figure 4 geneigt,
unterhalten werden. Ähnlich
zur Tabelle 500, weist Tabelle 400 eine Instanz-Spalte 402 und
eine Cartridge-Spalte 404 auf, welche jeweils Instanz-Nummern und Cartridge-Identifizierer
enthalten. Während
jedoch Tabelle 500 einen Eintrag für jede Cartridge-Instanz aufweist,
welche durch den Ressourcen-Manager 254 zugewiesen ist,
weist Tabelle 400 nur Einträge für Cartridge-Instanzen auf,
welche einem besonderen Listener zugewiesen sind. Tabelle 400 weist
zum Beispiel nur für
diejenigen in Tabelle 500 aufgeführten Cartridge-Instanzen Einträge auf, welche
dem Listener 210 zugewiesen sind.
-
Zusätzlich zur Instanz-Spalte 402 und
Cartridge-Spalte 404, weist Tabelle 400 eine Status-Spalte 406 auf.
Für jede Zeile
hält die
Status-Spalte 406 einen Wert, welcher den Status der mit
der Zeile verknüpften
Instanz anzeigt. Die Status-Spalte 406 der Zeile 408 zeigt
zum Beispiel an, dass Instanz 1 der Cartridge C1 gegenwärtig beschäftigt ist.
Im erläuterten
Ausführungsbeispiel
hält die
Status-Spalte 406 einen Merken, welcher anzeigt, dass eine
Cartridge-Instanz entweder "beschäftigt" oder "frei" ist. Die Bedeutung
des Cartridge-Status soll nun mit Bezug zum Betrieb des Ressourcen-Manager 254 und
der Lastverteiler 214 und 220 beschrieben werden.
-
Wechselwirkung
zwischen Lastverteilern und dem Ressourcen-Manager
-
Wie oben erklärt, kommunizieren Lastverteiler
mit dem Ressourcen-Manager 254, wenn sie eine überarbeitete
Browser-Anforderung an eine besondere Cartridge senden sollen. Gemäß einem
Ausführungsbeispiel
der Erfindung bestimmen Lastverteiler zuerst, ob eine Instanz der
geeigneten Cartridge (1) schon dazu zugewiesen wurde und
(2) verfügbar
ist zum Verarbeiten der neuen überarbeiteten
Browser-Anforderung. Wenn eine geeignete Cartridge-Instanz schon
zu dem Lastverteiler zugewiesen, wurde und gegenwärtig zum Verarbeiten
der neuen überarbeiteten
Browser-Anforderung
verfügbar
ist, dann sendet der Lastverteiler die überarbeitete Browser-Anforderung
an die Cartridge-Instanz,
ohne weitere Kommunikation mit dem Ressourcen-Manager 254.
-
Angenommen zum Beispiel, dass Listner
210 eine Browser-Anforderung
erhält,
welche gemäß dem virtuellen-Pfad-Manager 250 durch
die Cartridge C1 ausgeführt
werden muss. Angenommen auch, dass Tabelle 400 die gegenwärtige Liste
und den Status der Cartridge-Instanzen, welche dem Listener
210 zugewiesen
sind, wiederspiegelt. Nach Erhalt der Browser-Anforderung vom Listener 210,
untersucht der Lastverteiler 214 die Tabelle 400 zum
Auffinden einer freien Instanz der Cartridge C1. In der gezeigten
Tabelle 400 zeigt Zeile 410, dass Instanz 3 der
Cartridge C1 gegenwärtig
frei ist. Daher sendet der Lastverteiler 214 eine überarbeitete
Browser-Anforderung direkt zur Instanz 3 der Cartridge
C1 ohne weitere Kommunikation mit dem Ressourcen-Manager 254.
In Antwort auf das Senden der überarbeiteten
Browser-Anforderung wechselt der Lastverteiler 214 den
Status-Wert in der Status-Spalte 406 in Zeile 410 auf "beschäftigt".
-
Wenn ein Listener noch nicht eine
geeignete Cartridge-Instanz
zugewiesen hat, welche gegenwärtig verfügbar ist,
dann fordert der mit der Cartridge verknüpfte Lastverteiler eine Cartridge-Instanz
vom Ressourcen-Manager 254 an. Wenn der Ressourcen-Manager 254 feststellt,
dass eine Instanz der benötigten
Cartridge nicht verfügbar
ist und die Anzahl der existierenden Instanzen der benötigten Cartridge
unterhalb des Maximums ist, dann initiiert der Ressourcen-Manager 254 eine
neue Cartridge. Beim Initiieren einer neuen Cartridge fügt der Ressourcen-Manager 254 einen
Eintrag für
die neue Cartridge-Instanz in Tabelle 500 ein.
-
Angenommen zum Beispiel, dass der
Listener 210 eine Browser-Anforderung erhält, welche
durch die Cartridge C3 ausgeführt
werden muss. Angenommen auch, dass die Instanz 3 der Cartridge
C3 bisher noch nicht initiiert wurde. Unter diesen Bedingungen sendet
der Lastverteiler 204 an den Ressourcen-Manager 254 eine
Anforderung für
eine Bearbeitung zu einer Instanz der Cartridge C3. In Antwort auf
diese Anforderung initiiert der Ressourcen-Manager 254 Instanz 3 der
Cartridge C3 auf Maschine M3. Zusätzlich fügt der Ressourcen-Manager 254 in
Tabelle 500 den in Zeile 512 gefundenen Eintrag ein.
-
Nach dem Einfügen der Zeile 512 für Instanz 3 der
Cartridge C3 in Tabelle 500 sendet der Ressourcen-Manager 254 eine
Bearbeitung zu der neu geschaffenen Instanz an den Lastverteiler 214 zurück. In Antwort
auf den Erhalt dieser Bearbeitung, fügt der Lastverteiler 214 einen
Eintrag (Zeile 412) für
die neue Instanz in seine Status-Tabelle 400 ein. Der Lastverteiler 214 überträgt dann
eine überarbeitete
Browser-Anforderung an Instanz 3 der Cartridge C3.
-
Freigeben
von Cartridge-Instanzen
-
Gemäß einem Ausführungsbeispiel
der Erfindung geben Listener nicht automatisch das Eigentum an Cartridge-Instanzen auf, wenn
die Cartridge-Instanz aufhört,
auf ausstehende Browser-Anforderungen zu antworten. Angenommen zum
Beispiel, dass Instanz 3 der Cartridge C3 eine überarbeitete
Browser-Anforderung erhält,
die überarbeitete
Browser-Anforderung bearbeitet und eine Antwort zurück an den
Lastverteiler 214 sendet. Der Lastverteiler 214 sendet
die Antwort an den Listener 210, damit sie an den Browser,
der die Browser-Anforderung ausgegeben hat, zurückgesendet wird.
-
In diesem Moment benötigt der
Listener 210 nicht länger
das Eigentum an Instanz 3 der Cartridge C3. Dennoch, eher
als Übertragen
des Eigentums an Instanz 3 der Cartridge C3 zurück zum Ressourcen-Manager 254, ändert der
Lastverteiler 214 lediglich die Status-Spalte 406 in
Zeile 412 von "beschäftigt" nach "frei".
-
Das Wechseln des Wertes in Status-Spalte 406 in
Zeile 412 auf "frei" zeigt an, dass Instanz 3 der
Cartridge C3 nicht länger
an einer Anforderung arbeitet und deshalb zum behandeln folgender
Anforderungen bereit ist. Da Tabelle 400, welche anzeigt, dass Instanz 3 der
Cartridge C3 verfügbar
ist, jedoch lokal durch den Lastverteiler 214 unterhalten
wird, ist Instanz 3 der Cartridge C3 nur für folgende
Browser-Anforderungen verfügbar,
die beim Listener 210 ankommen. Zeile 512 von
Tabelle 500, welche vom Ressourcen-Manager 254 unterhalten
wird, zeigt weiter an, dass Instanz 3 der Cartridge C3
vom Listener 210 besessen wird.
-
Da Listener nicht automatisch jedes
Mal Cartridge-Instanzen
freigeben, wenn eine Anforderung ausgeführt wurde, wird mit der Kommunikation
zwischen dem Ressourcen-Manager 254 und
den verschiedenen Lastverteilern verknüpfter Überhang bedeutend reduziert.
Angenommen zum Beispiel, dass ein Listener 210 zehn aufeinanderfolgende
Anforderungen erhält,
die an Cartridge C3 übertragen
werden müssen.
Eher als mit dem Ressourcen-Manager 254 für jede der
zehn Anforderungen zu kommunizieren, kann der Lastverteiler 214 mit
dem Ressourcen-Manager 254 in Antwort auf die erste Anforderung
kommunizieren. Die folgenden neun Anforderungen können durch
den Lastverteiler 214 behandelt werden, ohne mit dem Ressourcen-Manager 254 zu
kommunizieren, da der Lastverteiler 214 dieselbe Instanz
von C3 benutzt, welche die erste zu verarbeitende Anforderung bearbeitet,
zum Verarbeiten der neun folgenden Anforderungen.
-
Während
die nicht-automatische Freigabe des Listener-Eigentums an Cartridge-Instanzen, wenn
jede Anforderung bedient ist, den Nutzwert des Web-Anwendungs-Server 280 erhöhen kann,
können
Listener das Eigentum einer Cartridge-Instanz nicht unbegrenzt aufrechterhalten.
Instanzen zum Beispiel, die seit einer langen Zeitperiode nicht
benutzt wurden, sollten an den Ressourcen-Manager 254 zurückgegeben
werden, so dass sie freigegeben werden können, zum Freigeben von Ressourcen.
Außerdem
ist es für
einen Listener nicht effizient, das Eigentum der Instanz einer Cartridge
aufrecht zu erhalten, welche seit einer relativ langen Zeit nicht
benutzt wurde, wenn andere Listener Instanzen dieser Cartridge benötigen.
-
Demzufolge kommuniziert der Ressourcen-Manager 254 mit
jedem Listener nach einer maximalen Leerzeit für jede an den Listener übergebene
Cartridge-Instanz. Die maximale Leerzeit zeigt die maximale Summe
von Zeit an, die eine Cartridge-Instanz unbenutzt laufen kann, bevor
der Listener den Eigentum der Cartridge-Instanz freigeben muss.
Angenommen zum Beispiel, dass der Ressourcen-Manager 254 dem Listener 210 anzeigt,
dass die maximale Summe von Leerzeit für Instanz 3 der Cartridge
C3 10 Minuten ist. Basierend auf dieser Information kann der Listener 210 mit
der Anwendung von Instanz 3 der Cartridge C3 zum Ausführen von
Browser-Anforderungen für
Cartridge C3 weitermachen, so lange wie Instanz 3 der Cartridge C3
nicht im Leerlauf ist oder "frei" ist für mehr als
10 Minuten.
-
Wenn Instanz 3 der Cartridge
C3 für
mehr als 10 Minuten untätig
ist, entfernt der Lastverteiler 214 die Zeile 412 aus
der Tabelle 400 und sendet eine Nachricht an den Ressourcen-Manager 254,
dass Listener 210 den Eigentum von Instanz 3 der
Cartridge C3 freigibt. In Antwort auf diese Nachricht aktualisiert
der Ressourcen-Manager 254 die Zeile 512 zum Anzeigen,
dass Instanz 3 der Cartridge C3 nicht von irgendeinem Listener besessen
wird und daher wieder einem anderen Listener zugewiesen werden kann
oder beendet werden kann.
-
In einem alternativen Ausführungsbeispiel
geben Lastverteiler Cartridge-Instanzen nicht automatisch frei,
wenn die Leerzeit für
die Cartridge-Instanz abgelaufen ist. Stattdessen sendet der Lastverteiler
eine Nachricht an den Ressourcen-Manager 254, welche anbietet,
dass die abgelaufene Instanz freigegeben wird. Der Ressourcen-Manager 254 kann
auf das Angebot antworten, indem er den Listener auffordert, die
Cartridge-Instanz freizugeben oder indem er dem Listener erlaubt,
das Eigentumsrecht der abgelaufenen Cartridge-Instanz zu behalten.
-
Gemäß einem Ausführungsbeispiel
der Erfindung unterhält
der Ressourcen-Manager 254 eine Warteschlange der Anforderungen,
welche nicht sofort bedient werden können. Wenn es möglich wird,
eine anstehende Anforderung zu bedienen, wird die Anforderung von
der Warteschlange entfernt und bearbeitet.
-
Angenommen zum Beispiel, dass der
Listener 222 eine Browser-Anforderung erhält, welche
durch die Cartridge C1 bearbeitet werden muss und dass Listener 222 nicht
irgendeiner Instanz der Cartridge C1 zugewiesen ist. Der Lastverteiler 226 sendet
eine Anforderung für
eine Instanz von C1 zum Ressourcen-Manager 254. Weiter
angenommen, dass ein Maximum von 50 Instanzen von C1 erlaubt ist
und dass 50 Instanzen von C1 dem Listener 210 zugewiesen
wurden. Unter diesen Bedingungen kann der Ressourcen-Manager 254 die Anforderung
des Listeners 222 nicht bedienen. Daher gibt der Ressourcen-Manager 254 die
Anforderung in eine Warteschlange. Wenn der Listener 210 eine
Instanz von C1 freigibt kommuniziert der Ressourcen-Manager 254 mit
dem Listener 222, dass eine Instanz von C1 verfügbar ist.
-
Unter bestimmten Bedingungen kann
der Ressourcen-Manager präventiv
veranlassen, dass ein Listener eine Cartridge-Instanz freigibt. Zum Beispiel kann
der Ressourcen-Manager 254 eine Systemüberlast-Situation erkennen
und durch Beendigen eines Satzes von Cartridge-Instanzen antworten,
entweder vor oder nach dem Informieren der Listener, denen die Cartridge-Instanzen
aktuell zugewiesen sind, dass die Cartridge-Instanzen beendet werden.
-
Der Ressourcen-Manager 254 kann
auch präventiv
einen Listener zum Freigeben von Cartridge-Instanzen zum Implementieren
von Fairnesspolitik zwischen Listenern bewegen. Der Ressourcen-Manager 254 kann
zum Beispiel einen Listener, der die meisten Instanzen einer gegebenen
Cartridge hält,
veranlassen, eine Instanz der Cartridge freizugeben, wenn ein anderer
Listener mehr als eine vorgegebene Schwelle einer Zeitspanne auf
eine Instanz der Cartridge gewartet hat. Wenn dem Listener 210 zum
Beispiel 50 Instanzen der Cartridge C1 zugewiesen sind
und C1 ein Maximum von 50 Instanzen hat, dann kann der Ressourcen-Manager 254 den
Listener 210 veranlassen, eine Instanz von C1 zehn Sekunden
nach dem Erhalt einer Anforderung für eine Instanz von C1 von einem
anderen Listener freizugeben.
-
Cartridge-Ausführungs-Engines
-
Gemäß einem Ausführungsbeispiel
der Erfindung ist jede Cartridge-Instanz aus einer Cartridge-Ausführungs-Engine
und einer Cartridge zusammengesetzt. Eine Cartridge-Ausführungs-Engine
ist ein Codemodul, welches Cartridges isoliert von den Komplexitäten des
Web-Anwendungs-Servers
280 und des Inter-Maschinen-Kommunikations-Mechanismus,
welcher zum Übertragen
der Nachrichten zwischen den verschiedenen Komponenten des Web-Anwendungs-Servers 280 benutzt
wird.
-
Eine Cartridge wird verfügbar gemacht
für eine
Cartridge-Ausführungs-Engine
durch Speichern von Zeigern zu den Cartridge-Funktionen in einer
Funktionstabelle. Gemäß einem
Ausführungsbeispiel
liefern alle Cartridges die Funktionen, die in dem oben beschriebenen,
beispielhaften Cartridge-Interface
beschrieben sind. Da alle Cartridges dieselbe Schnittstelle unterstützen, kann
eine einzelne Standard-Cartridge-Ausführungs-Engine
mit allen Cartridges benutzt werden.
-
Wie in 2 gezeigt,
weist der Web-Anwendungs-Server 280 Cartridge-Ausführungs-Engines 228, 232 und 236 jeweils
für die
Cartridges 230, 234 bzw. 238 auf. Die Cartridge-Ausführungs-Engines
steuern die Ausführung
der entsprechenden Cartridges durch Ausführen von Aufrufen in die Cartridges
durch die Standard-Schnittstelle. Durch das Einrichten grundlegender
Rückruf-Funktionen
zwischen der Cartridge-Ausführungs-Engine
und einer Cartridge kann jede Cartridge in den Web-Anwendungs-Server 280 integriert
werden durch Konfigurieren der Cartridge zum Antworten auf die Rückruf-Funktionen
und dann Registrieren der Cartridge im Konfigurations-Versorger 256.
-
Gemäß einem Ausführungsbeispiel
der Erfindung sind Cartridges als Gemeinschaftsbibliotheken implementiert
und Cartridge-Ausführungs-Engines
sind ausführbare
Programme, welche die Routinen in den Gemeinschaftsbibliotheken
unter Verwendung der Standard-Cartridge-Schnittstelle aufrufen.
Die Cartridge-Ausführungs-Engine
stellt die Schnittstelle zwischen Cartridges und dem Lastverteiler
bereit, lenkt den Cartridge-Steuerungsablauf und liefert Dienste
zum Benutzen durch die Cartridges.
-
Wenn der Ressourcen-Manager 254 die
Erzeugung einer neuen Cartridge-Instanz fordert, veranlasst der
Ressourcen-Manager 254 das
Realisieren einer Cartridge-Ausführungs-Einheit. Die dadurch
erzeugte Instanz der Cartridge-Ausführungs-Engine
veranlasst wiederum das Realisieren der zugehörigen Cartridge. Der Ressourcen-Manager 254 kann
das Realisieren der Cartridge-Ausführungs-Engine veranlassen,
zum Beispiel durch Aufrufen einer "Cartridge-Ausführungs-Engine-Fabrik", welche sich auf der Maschine befindet,
auf der die Cartridge ausgeführt
werden muss. Die Instanz der Cartridge-Ausführungs-Engine kann die Realisierung der
Cartridge veranlassen, zum Beispiel durch Ausführen eines Aufrufes zu einer
der Routinen in der Gemeinschaftsbibliothek, welche die Cartridge
ausmachen.
-
In Ausführungsbeispielen in welchen
Cartridges als Gemeinschaftsbibliotheken implementiert sind, werden
die Cartridges und die Cartridge-Ausführungs-Engines als ein einzelner
Prozess ausgeführt.
Das heißt,
eine Cartridge wird auf derselben Maschine und in demselben Adressraum
ausgeführt,
wie die Cartridge-Ausführungs-Engine,
die Aufrufe in die Cartridge ausführt. In solchen Ausführungsbeispielen
kann die Cartridge vor der Ausführung
statisch mit der Cartridge-Ausführungs-Engine
verbunden sein oder zur Laufzeit mit der Cartridge-Ausführungs-Engine
dynamisch verbunden sein.
-
Gemäß einem anderen Ausführungsbeispiel
können
die Cartridge-Ausführungs-Einheiten
als getrennte Prozesse von den Cartridges, mit denen sie kommunizieren,
ablaufen. Zum Reduzieren der Programmierlast der Cartridge-Entwickler
jedoch laufen der Cartridge-Ausführungs-Engine-Prozess
und sein entsprechender Cartridge-Prozess auf derselben Maschine
ab.
-
Bezeichnenderweise brauchen sowohl
im Einzel-Prozess-, als auch im Getrennt-Prozess-Ausführungsbeispiel,
die Cartridge-Entwickler die Komplexitäten der Inter-Maschinen-Kommunikation nicht
ansprechen. Alle Kommunikation zwischen einer Cartridge und Komponenten
des Web-Anwendungs-Servers, welche über andere Maschinen verteilt
sind, wird mittels der Cartridge-Ausführungs-Engine durchgeführt, welche auf
derselben Maschine ist, wie die Cartridge. Die Cartridge kann daher
als nicht wissend bezeichnet werden, dass sie in einem System benutzt
wird, welches über
mehrere Maschinen verteilt ist.
-
Cartridge-Wapper-Beispiel
-
Bezogen auf 2, wenn der Lastverteiler 214 bestimmt,
dass die PL/SQL-Runtime-Cartridge die geeignete Cartridge zum Verarbeiten
einer Anforderung ist, sendet der Lastverteiler 214 die
Anforderung an eine Cartridge-Instanz ab, welche eine, mit der PL/SQL-Runtime-Cartridge
verknüpfte,
Cartridge-Ausführungs-Engine
aufweist. Wenn eine neue Instanz initiiert werden muss, erzeugt
der Ressourcen-Manager 254 eine neue Instanz der PL/SQL-Runtime-Cartridge
in einem separaten Adressraum und sendet die Anforderung zu der Cartridge-Ausführungs-Engine 228 der
neuen Instanz. Der zum Ausführen
der Instanz des Programms benutzte Adressraum kann innerhalb des
Speichers des Computersystems sein, auf welchem eine oder mehrere der
Komponenten des Web-Anwendungs-Servers 218 ausgeführt werden
oder auf einem anderen Computersystem.
-
In Antwort auf eine Nachricht von
einem Lastverteiler, gibt die Cartridge-Ausführungs-Engine eine Anforderungsbearbeitungs-Rückruffunktion
zu der Cartridge aus, was die Cartridge zum Verarbeiten der Anforderung
veranlasst. Die Cartridge, welche die Anforderung ausführt, gibt
das Ergebnis an die Cartridge-Ausführungs-Engine zurück, welche
das Ergebnis an den Lastverteiler weiterleitet. Im Fall, dass der
Web-Anwendungs-Server 280 einen Fehler im Betrieb entdeckt,
gibt die Cartridge-Ausführungs-Engine
einen Abschaltbefehl der Cartridge aus.
-
Daher bietet die Cartridge-Ausführungs-Engine
eine Anwendungs-Programmierschnittstelle zum Web-Anwendungs-Server 280,
welche auszuführende
vorgegebene Operationen beschreiben. Der Gebrauch der Standard-Cartridge-Schnittstelle ermöglicht es
den Programmierern der Cartridges jede Cartridge für eine hohe
Integration in den Web-Anwendungs-Server 280 zu konfigurieren,
unabhängig
von den Protokollen welche vom einzelnen Web-Listener benutzt werden,
mit welchem die Cartridge benutzt wird.
-
Transport-Adapter
-
Listener erlauben den Gebrauch von
serverseitigen Plug-Ins
durch Bereitstellen einer Programmierschnittstelle und eines Protokolls
zum Gebrauch mit solchen Plug-Ins.
-
Unglücklicherweise variieren die
von Listenern bereitgestellten Programmierschnittstellen und Protokolle
von Listener zu Listener. Zum Beispiel sind das "Netscape Server Application Programming
Interface (NSAPI)",
das "Internet Server
Application Programming Interface (ISAPI) und das "Application Development Interface
(ADI)" drei Beispiele
von gegenwärtig
durch Listenern bereitgestellte verschiedene Programmierschnittstellen.
-
Transport-Adapter isolieren Lastverteiler
von den proprietären
Protokollen und Schnittstellen, die von Web-Listenern benutzt werden. Insbesondere
ist jeder Transport-Adapter
zum Erkennen der Protokolle von verschiedenen Listenern konfiguriert
und zum Konvertieren der, von den Listenern empfangenen, Browser-Anforderungen
in konvertierte Browser-Anforderungen, welche ein Standard-Lastverteiler-Protokoll
haben, welches unabhängig
vom Protokoll des Listeners ist. In ähnlicher Weise konvertieren
Transport-Adapter die Antworten von den Lastverteilern in das Transport-Protokoll
der Listener.
-
Die Transport-Adapter ermöglichen
es dem Web-Anwendungs-Server 280 folglich,
das er mit Listenern von verschiedenen Händlern benutzt wird. Außerdem können Transport-Adapter
zum Anpassen von unterschiedlichen Server-Architekturen und Betriebssystemen
konfiguriert sein.
-
Betrieb des
Web-Anwendungs-Servers
-
3A und 3B sind Flussdiagramme,
welche ein Verfahren zum Antworten auf eine Browser-Anforderung
gemäß einem
Ausführungsbeispiel
der Erfindung zeigen. Die Browser-Anforderung wird in Schritt 350
von einem Listener empfangen. Für
den Zweck der Erklärung
soll angenommen werden, dass die Browser-Anforderung vom Browser 202 ausgegeben
wurde und vom Listener 210 empfangen wurde.
-
Auf den Empfang der Browser-Anforderung
hin leitet der Listener 210 in Schritt 352 die Anforderung an
den Web-Anwendungs-Server 280 weiter.
Genauer gibt der Listener 210 die Anforderung weiter zum
Transport-Adapter 212 unter Benutzung der proprietären Programmierschnittstelle
von Listener 210. Der Transport-Adapter 212 konvertiert
die Anforderung wie nötig
zum Weiterleiten der Anforderung zum Lastverteiler 214 unter
Benutzung einer Standard-Lastverteiler-Programmierschnittstelle.
-
Der Lastverteiler 214 identifiziert
den Objekttyp der Anforderung, der der Browser-Anforderung in Schritt
354 entspricht, basierend auf dem virtuellen Pfad, welcher in der
Browser-Anforderung durch Kommunikation mit dem virtuellen Pfadmanager 250 beschrieben
ist. Der Lastverteiler 214 bestimmt in Schritt 356, ob der
Anforderungsobjekttyp einer identifizierbaren Cartridge entspricht.
Wenn der Anforderungsobjekttyp nicht einer identifizierbaren Cartridge
entspricht, wird die Anforderung in Schritt 358 an den Listener 210 zurückgegeben
(siehe 3B). Wenn in
Schritt 358 der Listener 210 die Anforderung als eine Anforderung
auf eine statische HTML-Seite erkennt, greift der Listener auf die
statische HTML-Seite zu und sendet die HTML-Seite in Schritt 360
zum Browser 202. Wenn die Browser-Anforderung nicht durch
den Listener 210 erkannt wird, wird die Antwort, welche
anzeigt, dass die Anforderung nicht erkennbar war, in Schritt 360
an den Browser 202 gesendet. Wenn der Lastverteiler 214 in
Schritt 356 bestimmt, dass (1) die Anforderung an eine Cartridge
gesendet werden muss und (2) dem Listener 210 nicht irgendeine
Instanz dieser Cartridge, welche gegenwärtig "frei" ist,
zugewiesen ist, dann kommuniziert der Lastverteiler 214 mit
dem Ressourcen-Manager
254 um eine Instanz der Cartridge 230 zugewiesen zu bekommen,
zu welcher die Browser-Anforderung gesendet werden kann. In Schritt
362, gezeigt in 3B,
bestimmt der Ressourcen-Manager 254 ob eine Instanz der identifizierten
Cartridge verfügbar
(eigentümerlos)
ist unter der existierenden Anzahl von Instanzen. Für die Zwecke der
Erklärung
soll angenommen werden, dass die Anforderung mit Cartridge 230 verknüpft ist
und dass Cartridge 230 eine PL/SQL-Runtime-Cartridge ist.
-
Wenn in Schritt 362 der Ressourcen-Manager
eine verfügbare
Instanz identifiziert, zum Beispiel Instanz 260 der PL/SQL-Runtime
230, informiert der Ressourcen-Manager 254 den Lastverteiler 214,
dass die Anforderung an die Instanz 260 gesendet werden
soll. Der Lastverteiler 214 erzeugt und sendet dann in
Schritt 368 eine überarbeitete
Browser-Anforderung an die Cartridge-Ausführungs-Engine 228 der
Instanz 260 um die verfügbare
Instanz 260 zu veranlassen, die Anforderung, wie oben beschrieben,
zu verarbeiten.
-
Wenn jedoch in Schritt 362 keine
Instanz der Cartridge 230 verfügbar ist, bestimmt der Ressourcen-Manager 254 in
Schritt 364, ob die existierende Anzahl von Instanzen eine vorgegebene
maximale Anzahl überschreitet.
Wenn die existierende Anzahl von Instanzen die vorgegebene maximal
Anzahl in Schritt 364 überschreitet,
zeigt der Ressourcen-Manager
254 dem Lastverteiler 214 an, dass die Anforderung zu dieser Zeit
nicht bearbeitet werden kann. Der Lastverteiler 214 sendet
in Schritt 358 in Antwort die Anforderung an den Listener 210 zurück, nach
welcher der Web-Listener 210 in Schritt 360 eine Antwort
an den Browser 202 über
das Netzwerk sendet, welche anzeigt, dass die Anforderung nicht
bearbeitet wurde.
-
Wenn eine Cartridge-Instanz gegenwärtig nicht
zum Behandeln einer Anforderung verfügbar ist, kann alternativ Listener 210 die
Anforderung auf eine Warteliste für diese Cartridge-Instanz setzen.
Wenn eine Cartridge-Instanz verfügbar
wird, wird die überarbeitete
Browser-Anforderung von der Warteliste entfernt und an die Cartridge-Instanz
weitergeleitet. Wenn die überarbeitete
Browser-Anforderung über
mehr als eine vorgegebene Zeitspanne auf der Warteliste bleibt,
kann der Listener 210 die Anforderung von der Warteliste
entfernen und eine Nachricht an den Browser 202 senden,
welche anzeigt, dass die Anforderung nicht bearbeitet werden konnte.
-
Wenn in Schritt 364 die existierende
Anzahl von Instanzen die vorgegebene maximale Anzahl nicht überschreitet,
initiiert der Ressourcen-Manager 254 eine neue Instanz
des identifizierten Programms und informiert den Lastverteiler 214,
dass eine auf der Browser-Anforderung basierende, überarbeitete
Browser-Anforderung, an die neue Instanz gesendet werden soll. Der
Lastverteiler 214 sendet dann eine überarbeitete Browser-Anforderung
an die Cartridge-Ausführungs-Engine
der neuen Instanz ab.
-
Angenommen zum Beispiel, dass der
Ressourcen-Manager 254 die Instanz 260 in Antwort
auf die Browser-Anforderung initiiert hat. Während der Initialisierung wird
auf die gespeicherten Befehlsfolgen für die PL/SQL-Runtime zum Erzeugen
einer neuen Instanz 260 der Cartridge 230 in einem
Adressraum zugegriffen, der getrennt vom Adressraum ist, in dem
der Lastverteiler 214 ausgeführt wird. Gemäß einem
Ausführungsbeispiel
wird die Initialisierung durchgeführt durch Laden der Cartridge-Ausführungs-Engine 228 und
durch Veranlassen der Cartridge-Ausführungs-Engine, die Initialisierungs-Routine
in Cartridge 230 aufzurufen.
-
Wenn die neue Instanz 260 läuft, sendet
der Lastverteiler 214 die Anforderung zu der Cartridge-Ausführungs-Engine
228,
welche der neuen Instanz 260 in Schritt 368 zugeordnet
ist. Die Cartridge-Ausführungs-Engine 228 sendet
eine Rückruf-Nachricht
an die neue Instanz 260 zum Anfordern der Ausführung der Anforderung. In der
Rückruf-Nachricht übergibt
die Cartridge-Ausführungs-Engine 228 jeden
Parameter, der für
die Bearbeitung der Anforderung für die Instanz 260 nötig ist.
Solche Parameter können
zum Beispiel Passwörter,
Datenbank-Suchschlüssel
oder irgendwelche anderen Argumente für eine von der Instanz 260 ausgeführten dynamischen
Funktion aufweisen.
-
Die Instanz 260 führt dann
die Anforderung aus. Während
der Ausführung
der Anforderung durch die Instanz in Schritt 368, überwacht
der Lastverteiler 214 die Instanz zum Bestimmen des Auftretens
eines Fehlers in Schritt 370. Wenn der Lastverteiler 214 in
Schritt 370 einen Fehler entdeckt, ruft der Lastverteiler 214 die
entsprechende Cartridge-Ausführungs-Engine 228 in
Schritt 372 zum Abbruch der Instanz 260, welche den Fehler
hat, auf. Die entsprechende Cartridge-Ausführungs-Engine 228 wiederum
gibt einen Abschalt-Befehl über
die API an die fehlerhafte Instanz aus. Die dem Abschalt-Befehl
durch die Cartridge-Ausführungs-Engine 228 entsprechende
Instanz wird abgeschaltet, ohne irgendeinen anderen Prozess in irgendeinem
anderen Adressraum zu beeinflussen.
-
Wenn in Schritt 370 kein Fehler entdeckt
wird, empfängt
der Lastverteiler 214 eine Antwort von der Instanz 260 bei
Abschluss der Ausführung
in Schritt 374. Der Lastverteiler 214 sendet die Antwort
in Schritt 376 an den Listener 210, welcher an den Browser
mit der Antwort von der ausgeführten
Instanz 260 antwortet. Nach dem Ausführen der Instanz 260 hält der Lastverteiler 214 die
Instanz in Schritt 378 im Speicher, wie in Schritt 378 gezeigt,
zum Ermöglichen
der Ausführung
einer anschließenden
Anforderung.
-
Verteilte
Architektur des Web-Servers
-
Bezeichnenderweise kommunizieren
die verschiedenen Komponenten des Web-Anwendungs-Servers 280 untereinander
einen Kommunikations-Mechanismus benutzend, der von den Komponenten
nicht verlangt, dass sie im selben Adressraum oder-sogar auf derselben
Maschine ausgeführt
werden. Im gezeigten Ausführungsbeispiel
sind die Komponenten des Web-Anwendungs-Servers 280 zum
Kommunizieren mittels eines Object-Request-Brokers (ORB) 282 konfiguriert.
Object-Request-Broker
sind in "Common
Object Request Broker: Architecture and Specification (CORBA)" im Detail beschrieben.
Dieses und andere sich auf CORBA beziehende Dokumente können im
World Wide Web auf http://www.omg.org gefunden werden.
-
Während
die Ausführungsbeispiele
der Erfindung mit Bezug auf Kommunikationen mittels eines CORBA-gefälligen ORB
beschrieben werden sollten, können
andere Plattformübergreifende
Kommunikationsmechanismen benutzt werden. Die Komponenten des Web-Anwendungs-Servers
280 zum Beispiel können
alternativ miteinander durch Benutzen der Remote Procedure Calls
(RPC), einer UNIX-Pipe oder Microsoft COM kommunizieren.
-
Da verschiedene Komponenten des Web-Anwendungs-Servers 280 miteinander
mittels Benutzen eines Maschinenunabhängigen Kommunikations-Mechanismus
kommunizieren, gibt es keine inhärenten
Beschränkungen
mit Hinsicht auf wo die Komponenten lokalisiert sind in Bezug zu
jeder anderen. Listener 210, 216 und 222 zum
Beispiel können
auf derselben Maschine ausgeführt
werden oder auf drei komplett unterschiedlichen Maschinen, wobei
jedes ein unterschiedliches Betriebssystem besitzt. Ähnlich können der
Authentifizierungs-Server 252, der virtuelle-Pfad-Manager 250,
der Ressourcen-Manager 254 und der Konfigurations-Versorger 256 auf
derselben Maschine ausgeführt
werden oder auf vier verschiedenen Maschinen. Ferner müssen diese
vier verschiedenen Maschinen nicht irgendeine Überlappung mit den drei Maschinen, welche
die Listener 210, 216 und 222 ausführen, haben.
-
Die Cartridge-Ausführungs-Engines 228, 232 und 236 vereinigen
alle der nötigen
Logikelemente zum Kommunizieren mit den anderen Komponenten des
Web-Anwendungs-Servers 280 mittels des Object-Request-Brokers 282.
Deshalb ist die Lage der Cartridge-Instanzen selbst nicht inhärent durch
die Kommunikationsmechanismen beschränkt. Daher kann Instanz 260 auf
komplett unterschiedlicher Maschine und Betriebssystem als Lastverteiler
ausgeführt
werden, von denen sie die Anforderungen erhält. Ähnlich kann Instanz 260 auf
einer unterschiedlichen Maschine und einem unterschiedlichen Betriebssystem
als der Ressourcen-Manager 254 oder irgendeine der anderen
Komponenten des Web-Anwendungs-Servers 280 sein,
eingeschlossen Instanzen von anderen Cartridges, welche durch denselben
Web-Anwendungs-Server 280 verwaltet
werden.
-
Cartridge-Isolation
-
Bezeichnenderweise ist die Lage-Unabhängigkeit
die von den Cartridges genossen wird, die vom Web-Anwendungs-Server 280 benutzt
werden, mittels der Kommunikations-Logik der Cartridge-Ausführungs-Engine
erreicht und nicht mittels irgendeiner Benutzerprogrammierung in
den Cartridges selbst. Folglich müssen die Cartridges nicht speziell
zum Ausführen
in einer verteilten Anwendungs-Server-Umgebung entwickelt sein.
Cartridge-Entwickler sind dadurch von den Komplexitäten eines
verteilten Systems isoliert und können ihre Anstrengungen auf
die Logik konzentrieren, die mit den Aufgaben gekoppelt sind, für welche
die Cartridges entworfen sind.
-
Wenn um Beispiel der Inter-Maschinen-Kommunikations-Mechanismus ein Object-Request-Broker ist,
ist es für
alle Module, die durch den Object-Request-Broker kommunizieren,
nötig,
ihre Schnittstellen durch Benutzen einer Interface Definition Language
(IDL) zu definieren und sie müssen
inhärent
und auf gewissen Basisklassen aufgebaut sein. Diese und andere Schwierigkeiten
machen es relativ komplex Module aufzubauen, die zur Inter-Maschinen-Kommunikation
fähig sind.
Da Cartridge-Ausführungs-Engines
die Cartridges vom Object-Request-Broker isolieren, müssen sich
die Cartridge-Entwickler nicht nach diesen Beschränkungen richten.
Cartridge-Entwickler können
deshalb ihre Anstrengungen auf das Schreiben von Code zum Erfüllen der
speziellen Funktion konzentrieren, aufgrund deren Durchführung die
Cartridges aufgerufen werden.
-
Wie oben beschrieben wird ein Web-Anwendungs-Server 280 bereitgestellt,
der mehrere Instanzen von verschiedenen Cartridges zum Verarbeiten
einer Vielfalt von Benutzeranforderungen verwaltet. Jede Cartridge-Instanz
wird in einem separaten Speicherraum vom Listener ausgeführt, wodurch
die Sicherheitsprobleme, welche mit serverseitigen Plug-Ins verbunden
sind, vermieden werden. Ferner können
die Cartridge-Instanzen, die zum Verarbeiten der von einem Listener
empfangenen Browser-Anforderungen benutzt werden, auf komplett verschiedenen
Maschinen als die Listener ausgeführt werden. Dadurch wird die
Skalierbarkeit des Systems erhöht,
während
die Last auf jeder bestimmten Maschine reduziert wird.
-
Zusätzlich steuert der Web-Anwendungs-Server 280 auch
die Anzahl von Instanzen für
jede gegebene Cartridge. Daher werden serverseitige Ressourcen zum
Sicherstellen gesteuert, dass eine große Anzahl von Anforderungen
nicht irgendeine Maschine durch eine unkontrollierbare Erzeugung
von Instanzen überschwemmt.
-
Ferner wird auch der Ausführungsdurchfluss überarbeitet
durch Unterhalten einer minimalen Anzahl von ausführungsbereiten
Instanzen. Zusätzliche
Instanzen können
initiiert und im Speicher zum Ausführen folgender Anforderungen
unterhalten werden, im Gegensatz zum Beenden einer Instanz nach
einer einzelnen Ausführung
und dann Wiederladen der Cartridge in den Speicher zum Wiedererschaffen
einer Instanz zum Ausführen
einer folgenden Anforderung.
-
In der vorangegangenen Beschreibung
wurde die Erfindung mit Bezug auf spezifische Ausführungsbeispiele
daraus beschrieben. Dennoch ist es offensichtlich, dass verschiedene
Modifikationen und Änderungen
dazu gemacht werden können,
ohne vom breiteren Schutzbereich der Erfindung abzurücken. Die
Beschreibungen und Zeichnungen sind dementsprechend eher in einer
illustrierenden als in einer beschränkenden Weise zu sehen.