Webcontainerdesign
Die Entwicklung eines Webcontainers beinhaltet viele Technologien auf verschiedenen Ebenen, wie das Wissen über die Kommunikationsschicht, das Wissen über die Programmsprachenebene usw., und ein verfügbarer Webcontainer ist ein relativ großes System, und es dauert lange, bis es klar erklärt wird. In diesem Artikel soll ein Webcontainer gestaltet werden, nur die Implementierungsideen diskutieren und nicht zu viele spezifische Implementierungen beinhaltet. Unterteilen Sie es in mehrere Module und Komponenten. Jedes Komponentenmodul ist für verschiedene Funktionen verantwortlich. In der folgenden Abbildung werden einige grundlegende Komponenten aufgeführt und jede Komponente eingeführt.
Schließen Sie eine Verbindung zum Empfänger an
Die Hauptverantwortung besteht darin, zuzuhören, ob es eine Client -Socket -Verbindung gibt und den Socket empfängt, und dann den Socket an den Task -Executor (Thread Pool) zur Ausführung übergeben. Lesen Sie ständig Sockets vom Boden des Systems, machen Sie so wenig wie möglich verarbeitet und werfen Sie sie dann in den Fadenpool. Warum die Notwendigkeit betonen, mit so wenig wie möglich umzugehen? Dies bezieht sich auf Probleme mit der Systemleistung, und eine übermäßige Verarbeitung wird den Durchsatz ernsthaft beeinflussen. Da es im Allgemeinen nur einen Empfänger gibt (ein Faden ist für den Sockelempfang verantwortlich), wird dies wahrscheinlich auf die Länge jedes Empfangsprozesses auswirken. Daher leistet der Empfänger nur sehr wenig und einfache Arbeiten, wobei nur wenige Zustandsvariablen, der Akkumulationsbetrieb des Durchflusssteuertors, den Empfangsbetrieb des ServersSocket, die Einstellung einiger Eigenschaften der empfangenen Sockel, die Aufnahme des empfangenen Sockels in den Fadenpool und einige Ausnahmeberechnungen beibehalten werden. Eine andere Logik, die lange Zeit dauert, wird an den Thread -Pool übergeben, z.
Verbindungsnummer Controller
Für eine Maschine hat der Gesamtverkehr von Zugriffsanforderungen einen Spitzenzeitraum und der Server hat eine physische Begrenzung. Um sicherzustellen, dass der Webserver nicht weggewaschen wird, müssen wir einige Maßnahmen ergreifen, um ihn zu schützen und zu verhindern. Der Datenverkehr muss hier etwas mehr über die Anzahl der Sockelverbindungen erläutert werden, die den Verkehr steuern, indem die Anzahl der Socket -Verbindungen gesteuert wird. Eine wirksame Methode ist die Übernahme der Durchflussregelung, die wie das Hinzufügen eines Tors zum Einlass des Flusses ist. Die Größe des Gate bestimmt die Größe des Flusses. Sobald der maximale Fluss erreicht ist, wird das Tor geschlossen und aufhört zu empfangen, bis ein Leerlaufkanal vorliegt. Zähler können mit dem AQS -Framework von JDK implementiert werden.
Sockelfabrik
Unterschiedliche Verwendung von Anlässen erfordern möglicherweise unterschiedliche Sicherheitsniveaus. Wenn zahlungsbezogene Transaktionen beispielsweise vor dem Senden verschlüsselt werden müssen, müssen die Informationen auch den Prozess der Schlüsselverhandlungen beinhalten, während in anderen gewöhnlichen Anlässen das Paket nicht verschlüsselt werden muss. Das Reflektieren der Anwendungsschicht ist ein Problem bei der Verwendung von HTTP und HTTPS.
Einfach ausgedrückt, bietet das TLS/SSL -Protokoll Authentifizierungsdienste für jede Kommunikation, um die Rechtmäßigkeit der Entitätsidentität dieser Sitzung zu authentifizieren. ② Verschlüsselungsdienste bereitstellen, und der starke Verschlüsselungsmechanismus kann sicherstellen, dass Nachrichten während der Kommunikation nicht entziffert werden. ③ Manipulationsddienste bieten, verwenden Sie den Hash-Algorithmus, um Nachrichten zu unterschreiben, und stellen Sie sicher, dass der Kommunikationsinhalt nicht durch Überprüfung der Signaturen manipuliert wird.
Das HTTP -Protokoll entspricht der Socket, während HTTPS SSLSocket entspricht. Wie man Sockets und SSLSockets generiert, wird der Socket -Fabrik übergeben.
Aufgabe Definer - Aufgabe
Definieren Sie die zu ausgeführten Aufgaben und teilen Sie dem Thread -Pool mit, welche Art von Aufgaben ausgeführt werden sollen. Die Aufgabe ist hauptsächlich in drei Punkte unterteilt: Verarbeitung von Steckdosen und Reaktion auf Kunden, Verringerung des Zählers der Verbindungszahl und Schließen der Steckdose. Unter ihnen ist die Verarbeitung von Socket die wichtigste und komplexeste. Es enthält das Lesen des zugrunde liegenden Socket -Byte -Streams, das Parsen der HTTP -Protokollanforderungsnachricht (Analyse der Anforderungslinie, Anforderungsheader, Anforderungsgremium und andere Informationen), das Erhalt des Pfades basierend auf der Anforderungslinienanalyse, um die Ressourcen des Webprojekts auf dem entsprechenden Host zu ermitteln, und das Zusammenstellen der HTTP -Protokollantwortnachricht gemäß den Verarbeitungsergebnissen und der Ausgabe des Clients.
Task -Executor
Ein Thread -Pool mit einer maximalen und minimalen Anzahl von Threads wird als "Task -Executor" bezeichnet, da der Thread -Pool als Starten mehrerer Threads angesehen werden kann, um eine Task -Warteschlange kontinuierlich zu erkennen, und sobald eine Aufgabe ausgeführt werden muss, wird er ausgeführt. Die maximale und minimale Anzahl der Thread -Grenze, die redundante Thread -Wiederherstellungszeitbeschränkung, die Ablehnungsaktion, die der Thread -Pool erfolgt, wenn die maximale Anzahl von Threads überschreitet, usw.
Nachrichtenlesen
Wird verwendet, um Pakete vom Client bis zum zugrunde liegenden Betriebssystem zu lesen und einen Puffermechanismus bereitzustellen. Kopieren Sie die Nachricht an Desbuf.
Nachrichtenausgabe
Wird verwendet, um Pakete zu schreiben, die von Webcontainern in das Betriebssystem verarbeitet werden und einen Puffermechanismus bereitstellen. Schreiben Sie die Nachrichtenausgabe über den Puffer in das Betriebssystem.
Eingabefilter
Bei diesem Lesevorgang wird eine zusätzliche Verarbeitung gewünscht, und diese zusätzliche Verarbeitung kann unter verschiedenen Bedingungen unterschiedlich durchgeführt werden. In Anbetracht der Programmentkopplung und -verlängerung werden Filter eingeführt. Erst nach dem Filtern von Operationen können wir Desbuf durch Filterschichten erreichen. Dieser Vorgang ist wie das Hinzufügen von Verarbeitungsstufen. Die entsprechenden Vorgänge werden nach dem Durchgang der Ebenen durchgeführt, und schließlich werden die Quelldaten an die Zieldaten abgeschlossen.
Ausgangsfilter
Es ähnelt der Eingangsfilterfunktion und wird bei der Meldungsausgabe verwendet.
Meldungsparser
Bietet die Möglichkeit, verschiedene Teile des HTTP -Protokolls zu analysieren.
Anfrage Generator
Gemäß der objektorientierten Idee werden die Attribute und Protokollfelder, die sich auf die Anforderung in jedem Anforderungsprozess beziehen, in ein Anforderungsobjekt abstrahiert. Es enthält drei Teile: Anforderungslinie, Anforderungsheader und Anfrage -Körperschaft. Welche Werte während der Verarbeitung benötigt werden, kann direkt aus dem Anforderungsobjekt erhalten werden. Bietet Komfort für die Implementierung von Servlet -Standards.
Antwortgenerator
Entsprechend der Anforderung ist ein Antwortobjektgenerator erforderlich. Es enthält drei Teile: Reaktionsreihe, Reaktionskopfzeile und Reaktionskörper. Die relevanten Werte im Verarbeitungsergebnis können direkt auf das Antwortobjekt eingestellt werden. Bietet Komfort für die Implementierung von Servlet -Standards.
Adresse Mapper
Ein Adress -Mapper ist ein Router, der Anfragen und Ressourcen. Ein angeforderter Zugriff wird nach dem Pfad zugeordnet, um die Ressource der Antwort auf den anfordernden Client zu finden.
Lebenszyklus
Um weiter zu modularisieren, verfügt der gesamte Container über viele Komponenten, die möglicherweise in unterschiedlichen Momenten unterschiedliche Ereignisse erfordern und einen Lebenszyklus erfordern, um alle Komponenten einheitlich zu verwalten. Beispielsweise werden das Start, die Stopp und das Herunterfahren aller Komponenten von der einheitlichen Verwaltung von Lebenszyklen getrennt, die das Management des Lebenszyklus dieser Komponenten erleichtern können. Ich hoffe, etwas vor und nach etwas in einem bestimmten Zustand zu tun? Fügen Sie einen Lebenszyklus -Hörer hinzu, um anmutig zu erreichen.
JMX Manager
Überwachung und Verwaltung des Systembetriebsstatus, der Serverleistung, Erfassung serverbezogener Parameter, JVM-Last, Webverbindungsnummer, Thread-Pool, Datenbankverbindungspool, Cache-Management, Konfigurationsdatei-Nachladen usw. kann eine remote visuelle Verwaltung mit hoher Echtzeitleistung liefern. Es bietet auch eine Lösung für die Verwaltung verteilter Systeme.
Webloader
Weblader wird verwendet, um Webanwendungsprojekte zu laden. Ein Webcontainer kann mehrere Webanwendungen enthalten. Um eine Isolation zwischen LIB und Servlet zu erzielen, muss ein anderer Klassenlader, Classloader, für jede Webanwendung verwendet werden, und diese Klassenlader sind keine Eltern-Kind-Beziehungen, um die Isolationseffekte der Klasse zu erzielen, dh die LIB einer Webanwendung wird von anderen Webanwendungen nicht verwendet.
Sitzungsmanager
Der Sitzungsmanager verwaltet hauptsächlich Sitzungen, darunter: ① SessionIDs generieren. Im Allgemeinen haben Cookies oder URLs keine JSESSIONID -Werte, und die Sitzung muss als Sitzungs -ID regeneriert werden. ② Viele Client -Sitzungen werden auf dem Server gespeichert. Bei Timeout -Sitzungen müssen Sie regelmäßig aufräumen, um sicherzustellen, dass der Serverspeicher nicht verschwendet wird. ③ Für einige wichtige Sitzungen können sie auf der Festplatte bestehen und können bei Bedarf in den Speicher geladen werden.
Log ausführen
Notieren Sie einige Warnungen, Ausnahmen und Fehler zur Laufzeit.
Zugriff auf Protokoll
Das Zugriffsprotokoll erfasst im Allgemeinen die zugeordneten Informationen des Kunden, einschließlich der Client -IP, der Anforderungszeit, der Anforderungsprotokoll, der Anforderungsmethode, der Anforderungs -Byte -Nummer, der Antwortcode, der Sitzungs -ID, der Verarbeitungszeit usw. Das Zugriffsprotokoll kann die Anzahl der Besucher, die Regeln für die Zugriffszeitverteilung, persönliche Hobbys usw. zählen, und diese Daten können Unternehmen helfen, Entscheidungen in ihren Betriebsstrategien zu treffen.
Sicherheitsmanager
Ein Webprojekt läuft auf einer Web -Container -Plattform, die wie ein Einbetten einer Anwendung auf eine Plattform zum Ausführen ist. Um das eingebettete Programm normal laufen zu lassen, muss die Plattform in der Lage sein, sicher und normalerweise zu laufen. Und um sicherzustellen, dass die Plattform nicht von eingebetteten Anwendungen beeinflusst wird, erreichen die beiden die Wirkung der Isolation in gewissem Maße. Beim Start -up wird die Richtliniendatei von -Djava.security.Manager -djava.security.policy == web.policy angegeben, die verschiedene Berechtigungen definiert.
Betriebsüberwachung und Fernverwaltung
Bietet eine Plattform, die den laufenden Status von Webcontainern in Echtzeit überwachen kann und aus der Ferne verwaltet werden kann.
Cluster
Es gibt im Allgemeinen zwei Arten von Clustern: ① Lastausgleichscluster, die im Allgemeinen einen bestimmten Verteilungsalgorithmus verwenden, um zur Verarbeitung gleichmäßig den Zugriffsverkehr an jede Maschine im Cluster zu verteilen. ② Clusterkommunikation mit hoher Verfügbarkeitscluster verbindet mehrere Maschinen. Diese Art von Cluster konzentriert sich mehr auf die Gewährleistung der externen Verfügbarkeit des gesamten Cluster durch automatische Schalt- oder Verkehrsübertragung, nachdem ein Gerät im Cluster fehlschlägt.
Im Allgemeinen sind Webanfragen aufstandslos und können direkt aufgehoben werden, aber die Sitzung beinhaltet Zustand und erfordert die Verwendung von Cluster -Kommunikationstechnologie, um Sitzungen zu kopieren. Verwandte Technologien umfassen Multicast und Unicast.
Servlet Motor
Die Servlet Engine verwendet Reflexion, um Objekte im Servlet und JSP in der Webanwendung zu generieren und in den Servlet -Objektpool zu setzen und die entsprechenden Methoden gemäß der tatsächlichen Situation aufzurufen. Die Webanwendung platziert die Geschäftslogikverarbeitung in der Dopost- oder Hundemethode. Wenn der Web -Container die Anforderung verarbeitet, wird sie gemäß der hier definierten Verarbeitungslogik verarbeitet, und auf den Antwortclient wird darauf reagiert.
JSP Compiler
Gemäß der Spezifikation wird JSP schließlich in die Servlet -Ausführung zusammengestellt, sodass die JSP -Datei gemäß der Spezifikation zusammengestellt werden muss. Der JSP -Compiler übersetzt tatsächlich die JSP -Syntax und verarbeitet sie nach der JSP -Syntax.
Ein Webcontainer enthält im Grunde die Funktionen der oben eingeführten Komponenten. Sie können einen Webcontainer erstellen, mit dem Ihr Web es gemäß der Implementierung jedes Komponentenmoduls durchführen kann.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!