Übersicht Web (Site) Engineering (WebE) Vorlesung 8: Serverseitige Verarbeitung P.Reiß, B. Schiemann Lehrstuhl für Informatik 8 Universität Erlangen-Nürnberg 08. 12. 2009 Server allgemein Statisch vs. dynamisch SSI PHP CGI 1 / 37 2 / 37 Server allgemein Definition Server Web(S)E Server allgemein Ablauf: Anfrage/Antwort Zur Erinnerung: Ein Web(S)E Server ist ein Programm, das eine Socketverbindung bereitstellt, per Internet o.ä. Requests erhält, verarbeitet und Antworten generiert und ausliefert. Festlegung bzw. Spezialisierung zur allgemeinen Definition: Netzwerk Internet o.ä. System Programm Dienst einzelne Serverinteraktion Client: eindeutig bestimmte Anfrage einer Ressource (URL) Server: Auswertung der Anfrage Lokalisierung/Generierung der Ressource Bearbeitung Übertragung an Client Client: Interpretation, Darstellung, Speicherung, Ausführung,... 3 / 37 4 / 37
Server allgemein Server: Funktionale Sicht Servertypen 1. Warten auf Anfragen 2. Interpretieren der Anfragen 3. Bearbeiten der Anfragen 4. Beantworten der Anfragen Start on Request Metaserver überwacht Ports Bei Anfrage wird zugehöriger Server gestartet Weiterleitung der Anfrage Nach Bearbeitung Beendigung inetd bzw. xinetd Permanenter Betrieb Start bei Systemstart Unix: /etc/init.d/ Windows: Services 5 / 37 6 / 37 Servertypen: Nebenläufigkeit Codebeispiel: Server ohne Nebenläufigkeit Nicht nebenläufige Server Öffnen eines Sockets Client-Verbindung Socket belegt Nur eine Verbindung auf einmal Nicht für echte Server geeignet #! / usr / bin / python from socket import s = socket ( AF_INET, SOCK_STREAM) s. bind ( (, 50007)) s. l i s t e n ( True ) conn, addr = s. accept ( ) p r i n t Connected by, addr while True : data = conn. recv (1024) i f not data : break conn. send ( data ) conn. close ( ) 7 / 37 8 / 37
Nebenläufigkeit II: Echte Nebenläufigkeit Nebenläufigkeit III: Multi-Thread Getrennte Verarbeitung pro Verbindung Vor allem dann vorteilhaft, wenn Multiprozessor-Server vorhanden Häufiges Warten auf Ressourcen Komplexere Architektur Verwaltung der Verarbeitungsstränge! Öffnen eines Sockets Client-Verbindung: Starten eines neuen Threads Übergabe der Verbindung Hauptprogramm bereit für neue Verbindungen Mehrere (gleichzeitige) Verbindungen möglich 1 Thread pro Verbindung Leichter Zugriff auf globale Daten 9 / 37 10 / 37 Multi-Thread: Codebeispiel Multi-Thread: Codebeispiel II public class TCPServer { public s t a t i c void main ( S t r i n g [ ] args ) { t r y { ServerSocket ss = new ServerSocket (50007); while ( true ) { Socket cs = ss. accept ( ) ; Connection c = new Connection ( cs ) ; catch ( IOException IOE ) {... class Connection extends Thread { DataInputStream i n ; DataOutputStream o u t ; Socket s ; public Connection ( Socket aclientsocket ) { t r y { s = aclientsocket ; i n = new DataInputStream ( s. getinputstream ( ) ) ; o u t = new DataOutputStream ( s. getoutputstream ( ) ) ; this. s t a r t ( ) ; catch ( IOException IOE ) {... 11 / 37 12 / 37
Multi-Thread: Codebeispiel III Nebenläufigkeit IV: Multi-Prozess public void run ( ) { t r y { S t r i n g data = i n. readutf ( ) ; out. writeutf ( data ) ; s. close ( ) ; catch ( EOFException EOFE ) {... catch ( IOException IOE ) {... Öffnen eines Sockets Client-Verbindung: Starten eines neuen Prozesses (fork) Übergabe der Verbindung Hauptprogramm bereit für neue Verbindungen Mehrere Verbindungen möglich 1 Prozess pro Verbindung 13 / 37 14 / 37 Nebenläufigkeit V: Thread-/Prozess-Pools Thread-Pool: Codebeispiel [Com] Nachteile der Multi-Thread/Multi-Prozess-Verbindung: Verwaltungsoverhead Starten der Threads/Prozesse Überwachung der Threads/Prozesse Verzögerung der Verarbeitung Bereithalten von Threads/Prozessen: Pools Bei Serverstart werden im Pool befindliche Instanzen gestartet Verteilung der Clients auf Instanzen Pools dynamisch erweiterbar ThreadPool (Jakarta Commons): / / l e t s s t a r t with 5 threads ThreadPool threadpool = new DefaultThreadPool ( 5 ) ; / / l e t s use a s p e c i f i c Runnable Runnable sometask =... ; threadpool. invokelater ( sometask ) ; / / l e t s j u s t wrap up some code i n a Runnable threadpool. invokelater ( new Runnable ( ) { public void run ( ) { someobject. dosomeslowthing ( ) ; ) ; 15 / 37 16 / 37
Übersicht Attribute für den Serverentwurf Anzahl der Clients, Anfragen Anzahl der Clients, Anfragen Komplexität der Anfragen, Antworten (Roh)Datenmenge Variabilität der Daten, Konfiguration Zuverlässigkeit Grundsystem Sicherheit Situation: 1. Viele Clients gleichzeitig 2. Hohe Anfragerate Skalierbarkeit Lastverteilung (Load Balancing) Sessions (?) Parallelität (Netz, Prozesse) 17 / 37 18 / 37 Komplexität der Anfragen, Antworten (Roh)Datenmenge Situation: 1. Analyse der Anfragen schwierig (Parsing) 2. Zusammenstellen der Antwort rechenintensiv Shallow-Parsing (Templates, NLP-NLG Techniken) Lastverteilung (1+ Host/Tier) Multi-Thread- und Multi-Prozess-Lösungen Situation: Antwort benötigt hohe unbearbeitete Datenmenge SAN oder NAS Einbettung von Teillösungen von anderen Servern (z.b. <img />) Rückmeldung an den User Netzwerkperformance! 19 / 37 20 / 37
Variabilität der Daten, Konfiguration Zuverlässigkeit Grundsystem Situation: 1. Konfiguration zur Laufzeit 2. Das CMS -Problem Gracefull Restarts des Servers Konfigurationsmanagement (Backup, Rollback,... ) Content-Caching vs. neu auslesen Session- und Usermanagement Templates gegen Komplexität Situation: 1. Möglichst hohe Uptime 2. Upgrades (Sicherheit, Hardware,... ) Speicherverwaltung, -löcher, Garbage Collection Hotplug an JEDER Stelle vs. Kosten OS: Tauschbare Kernel, Virtualisierung,... Robuste Basisserver (z.b. Apache) 21 / 37 22 / 37 Sicherheit Statisch vs. dynamisch Statisch vs. dynamisch Situation: 1. Sicherheitsrelevante Daten in der Applikation 2. Clients, Protokolle, evtl. Lückenquellen Verschlüsselung, Transaktionen vs. Performance Protokolllücken durch weitere Schichten schliessen Ausschluss von Clientversionen (bestimmte Browser) Pluginmöglichkeiten: Virenscanner, Malware-Erkennung,... Statisch: Anfrage nach Datei Lokalisieren und ausliefern Dynamisch: (Teile der) Antwort vor Auslieferung generiert Datenbankabfragen (cf. Tier-Architektur) Spezielle Aufbereitung Sessions 23 / 37 24 / 37
SSI SSI Server Side Includes Server Side Includes II Erweiterung existierender HTML-Seiten durch dynamisch generierten Inhalt Direktiven in HTML-Kommentaren Auswertung der Seiten vor Auslieferung Ersetzen des Inhalts der Direktiven Beispiel Apache [Apa]: mod_include installieren und aktivieren Allgemeine Syntax: <!--#element att=val att2=val2... --> Zeit ausgeben: <!--#config timefmt="%a %B %d, %Y" --> Today is <!--#echo var="date_local" --> Gemeinsamer Footer: <!--#include virtual="/footer.html" --> 25 / 37 26 / 37 PHP PHP PHP (Hypertext Preprocessor) PHP II PHP is a server-side HTML embedded scripting language. Kontrollstrukturen, getypte Variablen, Arrays, Stringfunktionen Implementierungen für verschiedene Webserver Einfache Integration von Systemfunktionen, Dateizugriffsfunktionalität Stringmanipulation Datenbankzugriff Medientypen (Manipulation von Bildern, Erzeugung von PDF,... ) Syntax ähnlich zu C, Perl, Java In HTML-Syntax eingebettet ( PHP-Tags ) Beispiel: <?php i f ( $a==10) {?> <b>a i s t 10 </b> <?php else {?> <b>a i s t n i c h t 10 </b> <?php?> 27 / 37 28 / 37
CGI CGI (Common Gateway Interface) Servlets Format zum Datenaustausch zwischen serverseitigen Programmen (Skripts) und aufrufenden Clients Schnittstelle stellt den Skripts zur Verfügung: Umgebungsvariablen (z.b. SERVER_NAME) Weiterleitung von Ein- und Ausgaben Verarbeitung von HTTP-GET und HTTP-POST (Formularwerte und Aufrufparameter) Beliebige Programmiersprache (C, C++, v.a. Perl) CGI-Programm wird jeweis separat gestartet (eigener Prozess) Hohe Serverlast FastCGI Programme am Server Web-Server verfügt über JVM, Interpretation des Bytecode im Server (Java) Generierung von HTML durch Servlets Bibliotheken Anfrage- und Antwortobjekte,, Sessionverwaltung 29 / 37 30 / 37 Java Server Pages Active Server Pages Antwort von SUN auf Microsofts ASP Java-Syntax Kombination der Skript- und Servlet-Idee JSP-Compiler erzeugt Java-Quellcode Kompilation in Bytecode Aufruf eigener oder externer Java-Klassenbibliotheken (Beans) (Mögliche) Trennung von Darstellung und Logik Programmierung und HTML-Design Counter Bsp. von [uia05] <% Dim fs, getcounterfile, makecounttmpfile, CounterHits Set f s = Server. CreateObject ( " S c r i p t i n g. FileSystemObject " ) CounterFile = Server. MapPath ( " counter. t x t " )... CounterHits = CounterHits + 1 makecounttmpfile. WriteLine ( CounterHits ) makecounttmpfile. Close... response. w r i t e ( CounterHits ) %> 31 / 37 32 / 37
ASP.NET [Gmb05] ActiveX [Cor05] Nächste Version ASP In.NET Framework eingebettet MS IIS integriert Speichermanagement Managed Code Klassenbibliothek (vgl. java.net) Web Forms vs. XForms Komplementär zu.net Ansatz Controls: Zugriffsvermittlung zu COM(+), DCOM Einbettung der Windows- und Officeobjekte z.b. Bearbeitung eines Excel Dokuments auf dem Server Serverseitig für: 1. Thin -Servers 2. Weiterverarbeitung auf dem Server 33 / 37 34 / 37 Technik Zusammenfassung Server allgemein Allgemein verbreitete Lösung Technik : 1. Server sendet Keks -Datei 2. Client speichert diesen transparent 3. Interessante Daten (Mailadresse, SessionID,... ) Sicherheitsproblem: 1. Default-Einstellungen der Browser 2. Cookie-Zwang auf Webseiten Statisch vs. dynamisch SSI PHP CGI 35 / 37 36 / 37
Vielen Dank Für Ihre Aufmerksamkeit! Fragen? Apache. Apache Tutorial: Introduction to Server Side Includes. http://httpd.apache.org/docs/1.3/howto/ssi.html. Apache Jakarta Commons. Commons Threadpool. http: //jakarta.apache.org/commons/sandbox/threadpool/. Microsoft Corporation. COM: Component Object Model Technologies. http://www.microsoft.com/com/default.mspx, 2005. Microsoft Deutschland GmbH. Webanwendungen mit ASP.NET. http://www.microsoft.com/germany/msdn/library/ net/aspnet/webanwendungenmitaspnet.mspx, 2005. 1 und 1 Internet AG. 1 und 1 WebHosting FAQ. 37 / 37 37 / 37 http: //faq.1und1.de/hosting/search/go.php?t=n39116, 2005. 37 / 37