17.03.2006, 18:32 Uhr

Webserver mit ­modularer Architektur

Microsofts Webserver IIS7 hat vor allem auch für Entwickler viel Neues zu bieten. Dazu gehört insbesondere die Komponenten-basierte Architektur, dank der man sich die Funktionalität seines Webservers ganz nach seinem Gusto zusammenstellen kann.
Microsofts Webserver hat eine bewegte Geschichte hinter sich. Früher waren Lücken im Server unter anderem die Hauptursache für den legendären Wurm «Code Red». In späteren Versionen hat sich aber die Sicherheits-Statistik deutlich verbessert; für IIS 6 (Teil von Windows 2003) gab es bis dato nur eine Hand voll Lecks. Die neue Version Internet Information Services 7 (kurz: IIS7) wird als Teil von Windows Vista sowie der Server-Variante, die mit Codenamen immer noch «Longhorn» heisst, ausgeliefert werden. Mit einem Erscheinungstermin gegen Ende 2006 darf noch gerechnet werden, auch wenn die ersten Spekulationen besagen, dass es durchaus 2007 werden könnte. Im Rahmen eines (nicht öffentlichen) Beta-Programms gibt es aber bereits eine erste Version zu bestaunen; zahlreiche Weblogs und Artikel wecken zudem Interesse auf mehr. Dieser Artikel stellt auf Basis der Vista-Builds 5270 und 5308 einige interessante Features des neuen Servers vor. Bis zur endgültigen Version kann sich dabei immer noch etwas ändern, wenngleich Microsoft auch in Anbetracht des Zeitplans wohl keine grösseren Experimente mehr wagen kann.

Abschied von der Metabase

Die wohl spektakulärste Neuerung im IIS7 ist die neue Konfiguration. Die Metabase ist quasi tot, alle Einstellungen werden in einem XML-Format gespeichert, das bereits von ASP.NET bekannt sein dürfte: die web.config wird jetzt auch vom Webserver verwendet. Damit ist eine komplette Serverkonfiguration per XML möglich. Das erleichtert auch die toolbasierte Konfiguration des IIS. Ebenfalls bringt das Vorteile fürs Deployment: Da in der Datei web.config alle interessanten Informationen stehen können, ist ein echtes XCOPY-Deployment möglich. Doch XML hin oder her, beim IIS 7 dabei ist auch ein neues Konfigurationstool, das (natürlich) in .NET geschrieben worden ist und per GUI die Server-Verwaltung ermöglicht. Zudem wird man IIS7 auch über die neue Version 3.0 der Management Console (MMC) verwalten können. Diese wurde optisch aufgepeppt und bietet eine ganze Reihe von kontextsensitiven Hilfen für die Serverkonfiguration (Screen 1).
Diese enge Integration von IIS 7 und ASP.NET kann zu interessanten Szenarien führen. Alle HTTP-Anfragen landen jetzt an einem Fleck, egal ob es sich dabei um verwalteten Code handelt (also eine ASP.NET-Anwendung) oder nicht (HTML, ASP, PHP usw.). So ist es jetzt möglich, dass HTTP-Handler (in verwaltetem Code) nicht nur ASP.NET-Anfragen behandeln, sondern allgemein alle Anfragen. Also kann der IIS etwa eine PHP-basierte Anwendung hosten, diese aber per ASP.NET Forms Authentication absichern. Der PHP-Interpreter handhabt also die PHP-Dateien, während ASP.NET beziehungsweise der IIS überprüfen, ob der Benutzer korrekt eingeloggt ist und im Zweifel eine Umleitung auf das Login-Formular (diesmal in ASP.NET) durchführen.
Baukastensystem
IIS6 ging bereits in die Richtung, dass man einzelne Komponenten dazuschalten oder deaktivieren konnte, um sowohl den Speicher-Footprint des Servers möglichst gering halten zu können und um weniger Angriffsmöglichkeiten zu bieten. IIS7 besteht jetzt auch vom Dateien-Gesichtspunkt her aus einzelnen Komponenten, sodass eine Abschaltung eines Features auch tatsächlich weniger Daten in den Speicher lädt. Das wirkt sich auch auf die Performance aus. Ein Server, der nur statische Inhalte anbietet, benötigt sicherlich kein ASP.NET oder andere serverseitige Spielereien, sondern muss den Fokus auf Performance legen. IIS7 ermöglicht eine solche Spezialisierung des Webservers und die damit einhergehende Anpassung an das konkrete Szenario, in der dieser zum Einsatz kommt.
ISAPI wird übrigens weiterhin unterstützt (alleine schon der Kompatibilität zu älteren Versionen wegen), doch gilt es als veraltet. Erweiterungen können prinzipiell in verwaltetem .NET-Code geschrieben werden, was ein einheitliches Programmiermodell sowohl für die Extensions als auch die (ASP.NET-)Website erlaubt. Es ist sogar möglich, feste Bestandteile (Module) des IIS mit eigenen Komponenten zu ersetzen. Ein klassisches Beispiel aus einer der ersten IIS7-Präsentationen bei der letztjährigen PDC ist beispielsweise die Entwicklung einer eigenen Verzeichnisanzeige, wenn es kein Standarddokument (etwa Default.aspx) gibt. Für diese Kern-Moduls ist C++ anzuraten (Grafik unten).
IIS 7 wurde komplett modularisiert. Anhand der einzelnen Module wird man künftig die Funktionalität des Webservers auf die eigenen Bedürfnisse abstimmen können. Gerade bei neuer Funktionalität ist der Anreiz sehr gross, etwas auszuprobieren, was Fehler geradezu hervorruft. Aus diesem Grund gibt es beim IIS7 eine Reihe von neuen Möglichkeiten der Fehlersuche, etwa zum Tracing (Hand in Hand mit den neuen Tracing-Features von ASP.NET). Der aktuelle Zustand des Servers kann in Echtzeit eingesehen werden, sowohl für den IIS insgesamt als auch spezifisch für Anwendungspools, Anwendungen bis hinunter zu einzelnen Websites. Diese Informationen sind ebenfalls im XML-Format verfügbar, einer automatisierten Weiterverarbeitung und Visualisierung steht damit nichts mehr im Wege.

Was zu beachten ist

Ein Nachteil des IIS7 ist schon jetzt offensichtlich: Er wird nur für Windows Vista und Longhorn Server verfügbar und nicht für ältere Windows-Versionen. Die neuen Features erfreuen Administratoren und Entwickler gleichermassen: Das Server-Management wird einfacher, seine Anpassung und Erweiterbarkeit auch. In Hinblick auf Performance lassen sich zum momentanen Status noch keine konkreten Aussagen machen, das wird erst ein Lasttest mit der endgültigen Version zeigen. Die Möglichkeit, nicht benötigte Funktionalität (die in eigenen DLL liegt) abzuschalten, lässt aber auf ein gutes Ergebnis hoffen. Bis dahin gibt es immerhin schon eine vorläufige Dokumentation: den Operations Guide [1], die Technical Reference [2], die Administration Reference [3] und das Extensibility SDK [4].
Christian Wenz


Das könnte Sie auch interessieren