Einführung - Microsoft

Werbung
Erstellen skalierbarer Dienste
(Engl. Originaltitel: Building Scalable Services)
Zusammenfassung
In diesem Whitepaper werden die Elemente vorgestellt, die beim erfolgreichen Entwerfen, Erstellen und
Betreiben sehr großer Internetdienste eine Rolle spielen. Die Daten basieren auf einer von Microsoft
durchgeführten internen Untersuchung 17 sehr großer Internetdienste. Im Zusammenhang mit diesem
Whitepaper wird ein sehr großer Internetdienst als ein Dienst definiert, für dessen Ausführung mehr als
50 Computer benötigt werden und der von mehr als 1.000.000 eindeutigen Benutzern genutzt wird.
Einführung
Aufgrund der schnell wachsenden Internetmärkte steht im IT-Bereich (Internet Technology) immer häufiger der
Dienstleistungsgedanke und nicht mehr nur das Produkt im Vordergrund. Von Internetdiensten wird mehr
erwartet als lediglich Produktfeatures; sie müssen die Features auch bereitstellen können, wenn Benutzer sie
anfordern und erwarten. Internetdienstanbieter müssen die Kundenansprüche und die Verwendungsmuster
kennen, um diesen Ansprüchen gerecht zu werden und ihre Dienste entsprechend anzupassen.
Bisher standen bei Systemuntersuchungen die Kosten und die Leistung im Vordergrund, während Verfügbarkeit,
Skalierbarkeit und Verwaltbarkeit weitgehend außer Acht gelassen wurden. Auch das Interesse von
Anwendungs- und Betriebssystementwicklern galt bisher den Features und der Leistung und weniger der
Verwaltung und Bereitstellung. Überraschenderweise zeigten sich Internetbenutzer sehr tolerant gegenüber
Systemen, die nicht über alle oder zumindest über eine große Anzahl von Features verfügten, solange deren
Zuverlässigkeit und eine schnelle Antwortzeit sichergestellt waren. Diese Einstellung ist vermutlich
symptomatisch für die Unausgereiftheit des Marktes und die Unbeständigkeit des Internets. Sie deutet darauf
hin, dass der Verwaltbarkeit und der Betriebsbereitschaft eine größere Bedeutung beigemessen werden sollte als
dem ständigen Hinzufügen neuer Features.
Wenn Internetdienstanbieter vor der Herausforderung stehen, einen sehr großen Internetdienst zu erstellen,
müssen sie sich zunächst mit der systeminternen Dienstqualität (Quality of Service, QoS) beschäftigen.
Internetdienste müssen immer betriebsbereit sein. Darin besteht ein großer Unterschied zu traditionellen
Computerumgebungen. Um eine Grundlage für das E-Business bilden zu können, müssen sie immer verfügbar
sein und zumindest eine gewisse Dienstqualität unterstützen.
Das Erstellen skalierbarer Systeme ist eine anspruchsvolle Aufgabe, und das Erstellen großer verlässlicher
Internetdienste stellt eine noch größere Herausforderung dar. Da eine permanente Betriebsbereitschaft und eine
gleichbleibende Antwortzeit äußerst wichtig sind, müssen Dienstanbieter beim Entwerfen die Stabilität
berücksichtigen. Stabile Systeme sollten eine sehr hohe Kapazität verarbeiten können und über besonders
zuverlässige Lastenausgleichssysteme verfügen. In der folgenden Liste sind die Faktoren aufgeführt, die beim
Erstellen eines großen Internetdienstes zu beachten sind:



Große Anzahl von Benutzern. Die kumulierten Zugriffsmuster mehrerer Millionen Benutzer können
von zufälligen Auffälligkeiten nicht unterschieden werden.
Inhärenter Parallelismus der Netzwerkaktivität. Ein Beispiel für inhärenten Parallelismus ist, dass
ein Front-End-Server eine E-Mail-Nachricht als HTML rendert, während bei einem SMTP-Server
(Simple Mail Transfer Protocol) für denselben Benutzer gleichzeitig eine andere E-Mail eintreffen
kann.
Ununterbrochene Internetaktivität. Jede Minute erreichen Tausende von E-Mails einen beliebigen
SMTP-Server und weitere Mails folgen.

Das Internet, die Konkurrenz und auch die Auslastung eines Dienstes ändern sich. Ständige
Änderungen machen die Veränderlichkeit und Verwaltbarkeit eines Dienstes erforderlich. Nach der
Markteinführung eines Dienstes muss dieser auf unbestimmte Zeit rund um die Uhr überwacht werden.
Zu den zusätzlichen Komponenten einer Internetdienstarchitektur zählen der Dateispeicher, die
Datenbankspeicherung (beispielsweise mithilfe von Microsoft® SQL Server™), Mechanismen für den
Datenbankzugriff [wie beispielsweise Open Database Connectivity (ODBC)], Einschränkungen bezüglich der
Netzwerkbandbreite und die Serverhardware (z. B. die Anzahl der CPUs und die Hardwareklasse). Nicht jeder
Dienst beinhaltet all diese Architekturkomponenten, aber bei einigen Diensten ist dies der Fall. Zukünftige
Dienste werden vermutlich alle Komponenten beinhalten müssen (bei einigen Dienste ist bereits jetzt eine
ausreichende Skalierbarkeit erforderlich).
Zusammenfassung der Dienstuntersuchung
Die während der ersten Untersuchung von 17 sehr großen Internetdiensten gesammelten Daten werden hier nicht
vollständig vorgestellt. Stattdessen wird zur näheren Ausführung der in diesem Whitepaper vorgestellten
Ergebnisse eine Zusammenfassung verschiedener architektonischer Grundlagen bereitgestellt. 1 Anderen
untersuchten, aber hier nicht beschriebenen Websites liegen ähnliche Infrastrukturen zugrunde.
Zu den untersuchten sehr großen Internetdiensten zählen u. a. folgende:
E-Mail-Dienst über das Internet. Bei MSN™ Hotmail™ handelt es sich um eine aus 15 Clustern
bestehende Website mit Zweistufenarchitektur, wobei jedes Cluster aus ca. 300 Front-End-Webservern
und 10 Back-End-Speichercomputern besteht. Jedes Cluster unterstützt 4-20 Millionen Benutzer. Der
gesamte Dienst besteht aus mehr als 6.000 Computern. Der Dienst wächst durch das Hinzufügen neuer
Cluster. MSN Hotmail verwendet DNS-Round Robin für den Lastenausgleich zwischen Clustern und
einen eigenständigen Lastenausgleich innerhalb der Cluster. Der E-Mail-Internetdienst MSN Hotmail
kann kurz gesagt in die folgenden vier Klassen von Computern unterteilt werden:
o



Front-End-Webserver. Dabei handelt es sich um statusfreie Webserver, die zum Anzeigen
der Benutzeroberfläche HTML verwenden. Diese Server führen auch ausgehende E-Mails aus.
o Benutzerdatenspeicher. Dabei handelt es sich um statusbehaftete Server, auf denen E-MailOrdner für bis zu zwei Millionen Benutzer gespeichert werden.
o Mitgliedscomputer mit Index Server. Es gibt statusfreie Server, die alle
Zuordnungsinformationen vom Benutzerkennwort bis hin zu Benutzerdatenspeichern
beinhalten.
o SMTP-Eingangsserver. Diese Server nehmen eingehende EMails an und speichern sie in dem
betreffenden Benutzerdatenspeicher.
Internetdienst für Nachrichten und Unterhaltung. Diese Website wird von 42 Front-EndWebservern bedient, von denen jeder Internetinformationsdienste (Internet Information Services, IIS)
mit Active Server Pages (ASP), Extensible Markup Language (XML), Windows Media Player (WMP)
und SQL Server ausführt. Bei diesem Dienst bestehen ca. 500 gleichzeitige Onlineverbindungen pro
Server. Der höchste Ausgabewert vom Server ist ca. 50-60 MB/s. Serverseitige ASP-Objekte speichern
häufig verwendeten Inhalt. Die Front-End-Server sind in sieben Cluster mit jeweils sechs Servern
aufgeteilt. Ein Lastenausgleich zwischen Clustern wird mithilfe von DNS-Round Robin erreicht;
innerhalb eines Clusters wird der Netzwerklastenausgleich über eine gemeinsam genutzte IP-Adresse
verwendet. Zwei Front-End-Computer mit SQL Server enthalten Onlineinhaltindizes, Bestenlisten und
Umfragen. Zwei Stagingserver und ein Server für die SQL-Replikation aktualisieren die gesamte
Website jede Stunde für jeden Front-End-Server.
Einzelhandel (E-Commerce). Dieser Dienst besteht aus 4 Komponenten: 11 statusfreien Front-EndWebservern, mittelstufigen Servern, 8 externen Back-End-Servern und 4 lokalen Back-EndDatenbankservern. Der Status der Verbindung wird auf dem Browser in einem Cookie verwaltet. Die
lokalen Datenbanken enthalten Benutzerprofile und andere benutzerspezifische Informationen. Der
Zugriff auf Datenbanken auf den Back-End-Servern erfolgt über mit SQL Server gespeicherte
Prozeduren. Back-End-Server stellen generische Dienste für die Front-End-Server bereit. Ein
Lastenausgleich wird durch das Verwenden des Netzwerklastenausgleichs erzielt.
Portal zu einer Internetdomänenpräsenz eines großen Unternehmens. Diese Site besteht aus sieben
Clustern mit jeweils sechs Computern. Jeder Server ist mit drei Netzwerken verbunden: dem Internet,
einem Verwaltungs-LAN und einem LAN für freigegebene Dienste. Die Netzwerklast wird zwischen



den Clustern mithilfe von DNS-Round Robin und innerhalb jedes Clusters mithilfe des
Netzwerklastenausgleichs ausgeglichen.
Instant Messaging-Dienst. Benutzer werden über eine persistente TCP-Verbindung mit diesem
Instant Messaging-Dienst verbunden. Es gibt sechzehn Benachrichtigungsserver, und die Clients
behalten eine persistente Verbindung zu einem der Benachrichtigungsserver bei. Zwei
Mitgliedscomputer mit Index Server dienen als globales Verzeichnis und weisen Datenspeichern
Benutzer zu. Alle Mitgliedscomputer mit Index Server nutzen eine gemeinsame IP-Adresse und jeder
dieser Server enthält das gesamte Benutzerverzeichnis. Fünf Switchboardserver dienen als Host für
Onlineverbindungen, und diese Server übertragen ihren Status an die Benachrichtigungsserver für den
Lastenausgleich.
Onlineunterhaltungsführer. Dieser Dienst umfasst drei Front-End-Server mit Microsoft InternetInformationsdienste (Internet Information Services, IIS), auf denen ein benutzerdefiniertes ISAPIRenderingmodul (Internet Server Application Programming Interface) ausgeführt wird. Front-EndServer sind sowohl mit dem Internet als auch mit einem lokalen publizierenden 100BaseT-LAN
verbunden. Die Last zwischen den Front-End-Servern wird mithilfe von DNS-Round Robin
ausgeglichen. Zwischen drei Computern der mittleren Stufe mit SQL Server und den Front-EndComputern mit IIS besteht eine 1:1-Beziehung. Der gesamte Seiteninhalt wird auf den Computern mit
SQL Server gespeichert. Ein vierter Computer der mittleren Stufe mit SQL Server speichert Daten, die
keinen Inhalt enthalten. Ein Stagingcomputer mit IIS und ein Stagingcomputer mit SQL Server stellen
Stagingspeicherplatz bereit.
Freigegebene Hostwebsite für kleine Unternehmen. Dieser Dienst befindet sich auf einem alle
Anzeigen- und Benutzerinformationen enthaltenen Oracle-Datenbankserver. Dieser Server umfasst
11 Front-End-Anzeigenserver zum Verarbeiten von Anzeigeninformationen und angeboten, einen
Server zur Verarbeitung der durch Klicken innerhalb eines Menüs weitergeleiteten Benutzeranfragen zu
Anzeigen, einen Server für die Anzeigenplanung, mehrere unterschiedliche Server für das
Abbilderstellen und das Protokollieren sowie 20 Anwendungsserver. Anwendungen beinhalten
Inventurtools (für den Verkauf), Tools zur Profilerstellung für die Site und zur Protokollarchivierung.
Jeder der untersuchten Internetdienste umfasst Front-End-Server, Back-End-Server und eine Form von
Lastenausgleich. In Abbildung 1 ist die allgemeine Topologie dieser Sites dargestellt.
Abbildung 1 Beispiel für die Topologie eines großen Internetdienstes
Die Kapazität dieser Dienste macht eine genaue Betrachtung der Architektur und der Vorgänge erforderlich.
MSN Hotmail wird zurzeit von 110 Millionen eindeutigen aktiven Benutzern genutzt und erhält täglich ca.
450 Millionen E-Mails. Noch vor zwei Jahren wurde der Internetdienst für Nachrichten und Unterhaltung täglich
von 100.000 eindeutigen Benutzern genutzt, heute sind es 2,5 Millionen eindeutige Benutzer täglich
(10 Millionen eindeutige Benutzer pro Monat). Innerhalb der ersten 36 Stunden nach der Markteinführung diente
der Instant Messaging-Dienst als Host für 50.000 Onlineverbindungen gleichzeitig. Inzwischen werden
regelmäßig über 1,5 Millionen aktive Verbindungen verwaltet. Bei Zahlen dieser Größenordnung lassen sich die
Schwierigkeiten beim Erstellen und Verwalten solch großer Internetdienste leicht absehen.
Zum Erstellen und Verwalten sehr großer Internetdienste müssen sich Entwickler, Architekten und
Administratoren auf folgende drei Bereiche konzentrieren: Verfügbarkeit, Skalierbarkeit und Verwaltbarkeit.
Verfügbarkeit
Internetdienste müssen immer verfügbar sein. Sie müssen Benutzern zur Verfügung stehen, und zwar
unabhängig vom Ausmaß eines eventuellen internen Fehlers. Dienstdesigner müssen bei der Planung das
Auftreten möglicher Fehler berücksichtigen. Wenn einzelne Komponenten ausfallen, sollte das System
zumindest teilweise funktionsfähig bleiben. Bei inkonsistentem Status sollten Komponenten schnell ausfallen: Je
schneller eine fehlerhafte Komponente ausfällt, desto schneller kann das übrige System den Fehler umgehen.
Benutzer erwarten, dass der Dienst funktionsfähig ist: Manchmal erwarten sie eine uneingeschränkte
Funktionsfähigkeit, und manchmal werden sie sich mit weniger zufrieden geben. Wenn beispielsweise ein EMail-Posteingang offline geschaltet ist, sollten betroffene Benutzer trotzdem auf eine E-Mail-Webseite zugreifen
und E-Mails senden können. Ein Homepagedienst kann eine Startseite rendern, auch wenn E-Mail-, Anzeigenund Börsentickerdienste ausfallen. Andererseits wurde im Zusammenhang mit einer der Einzelhandelswebsites
festgestellt, dass den Benutzern im Fall einer Unterbrechung der Verbindung zum Back-End-Server der Zugriff
vollständig verweigert werden sollte, anstatt sie den halben Kaufvorgang ausführen zu lassen, bevor dieser
unterbrochen wird. Um die Verfügbarkeit einplanen zu können, muss untersucht werden, wie sich Komponenten
auf die Benutzererfahrung auswirken. Darüber hinaus muss die optimale Verfügbarkeitsdauer für minimale
Dienste so geplant werden, das sie den Benutzern sinnvoll erscheint.
Beim Entwerfen und Testen von Systemen sollte das Ausfallen von Komponenten als Regelfall und nicht als
Ausnahme betrachtet werden. Systemdesigner müssen zwischen den Aspekten Verfügbarkeit und Kosten
abwägen. Es ist relativ einfach, durch einen Lastenausgleich auf statusfreien Front-End-Servern Redundanz zu
erstellen, aber das Spiegeln und Erstellen von Clustern für statusbehaftete Computer (besonders Back-EndServer) kann sich schwierig gestalten, vor allem wenn der Status in einem temporären Speicher gespeichert
wurde. Für den Ablauf kann es einfacher und kostengünstiger sein, eine Anwendung mit einer Fehlererkennung
zu versehen und den Sitzungszustand wiederherzustellen, wobei dies möglicherweise zu einer zulässigen
Verzögerung für die Benutzer führen kann. Sie sollten sich auf einen Datenserverausfall größeren Ausmaßes
vorbereiten, indem Sie innerhalb der Architektur Redundanz einrichten. Eine Möglichkeit ist das Spiegeln von
Daten auf mehreren Servern und das Verwenden von Stripe Sets, was der Funktionsweise des RAID-Verfahrens
(Redundant Arrays of Independent Disks) ähnelt.
Die Standardmethode zum Entwerfen von Kommunikationskomponenten für das Internet unterscheidet sich
maßgeblich von den traditionellen Modellen, bei denen ein LAN verwendet wird. In der Regel verwenden
Internetdienstkomponenten einfache socketbasierte Protokolle, wenn sie nicht ein vorhandenes Webprotokoll
verwenden können. Diese Protokolle sind zwar nicht alle so entworfen, dass sie nach einem Ausfall
wiederhergestellt werden können, aber sie sind bei einem Ausfall so schnell wie möglich wieder einsatzbereit.
Die im Zusammenhang mit diesem Dokument überprüften Dienste verwendeten keine komplexen Protokolle wie
RPC (Remote Procedure Call, Remoteprozeduraufruf) und DCOM (Distributed Component Object Model), weil
diese häufig die Umstände des Ausfalls verdecken.
Dem Betriebsteam sollten auch Testsuites als Teil der Plattform geliefert werden. Mithilfe der vom
Entwicklungsteam verwendeten Testsuites sollten regelmäßig die Fehlerfreiheit und die Leistung des Systems
überprüft werden. Viele Sites verfügen über eine ausgeblendete Webseite, die wichtige Features der Site
ausführt. Wird die ausgeblendete Seite angezeigt, werden dem Betriebsteam Probleme bezüglich der
Funktionalität oder der vom Benutzer wahrgenommenen Leistung gemeldet.
Datenspeicherung
Bei einer Site wird die Datenspeicherung für den Back-End-Server von zwei Servern verwaltet, die den
Microsoft Clusterdienst über eine Fibre Channel-Verbindung zu einem freigegebenen RAID5-Datenträgerarray
ausführen. Beim Ausfall eines einzelnen Servers wird die Verfügbarkeit durch das Servercluster sichergestellt
und beim Ausfall eines einzelnen Datenträgers durch das RAID-Array.
Die bei modernen Servern und Arrays bereitgestellte Datenträgertechnologie kann mögliche Datenträgerausfälle
vor dem Auftreten erkennen. Wenn ein Datenträgerausfall vom System vorhergesagt wird, kann der fehlerhafte
Datenträger im RAID5-Array ausgetauscht und ohne Einschränkungen des Dienstes für die Site ersetzt werden.
Während RAID5-Arrays mithilfe der integrierten Microsoft Windows NT® Server Enterprise Edition oder der
integrierten Windows® 2000 Advanced Server-Dienste in die Software implementiert werden können,
verwenden die untersuchten Sites zur Steigerung der Datenzugriffsleistung eine Hardwareimplementierung.
Auch die Offlinespeicherung ist bei der Datenwiederherstellung von Bedeutung.
Anmerkung Die Art des bei dieser Konfiguration verwendeten Dateisystems spielt eine wichtige Rolle. Alle in
dieser Architektur verwendeten Datenträger müssen so formatiert sein, dass sie das NTFS-Dateiformat
verwenden, denn es bietet eine größere Sicherheit und Datenintegrität als das FAT-Dateiformat.
Skalierbarkeit
Desktopanwendungen und Internetdienste verfügen über grundlegend unterschiedliche Skalierungsmodelle für
Einzelbenutzer. Die Entwickler von Desktopanwendungen wie Microsoft Office, Microsoft Flight Simulator und
Microsoft Visual Studio® liefern mehr CD-ROMs und skalieren so eine größere Anzahl von Benutzern. Die
Entwickler großer Internetdienste müssen ihre Server und die Software zur Unterstützung mehrerer Millionen
Benutzer physisch skalieren.
Die Skalierbarkeit eines Dienstes wird durch die Leistung einzelner Komponenten beeinflusst. Beispielsweise
verwendet ein Dienst auf den Front-End-Servern die größeren Festplatten nicht wegen des Speicherplatzes,
sondern wegen der durch die hochwertigen Diskettenlaufwerke sichergestellten geringeren Drehwartezeit. Bei
einer anderen Site wurde die durchschnittliche Antwortzeit von 32 Millisekunden auf 8 Millisekunden pro Seite
gesenkt, indem die vier am häufigsten abgefragten Seiten von einer ISAPI-Erweiterung (statt von ASP)
gerendert wurden.
Anmerkung Bei diesen Sites wird zur Steigerung der Geschwindigkeit sowie für eine größere Zuverlässigkeit
und eine verbesserte Funktionalität über ASP und ISAPI-Erweiterungen die Verwendung von ASP.NET
erwogen.
Skalierbarkeit wird häufig am besten durch einfache Lösungen erzielt. Aus der Sicht der parallelen
Datenverarbeitung könnten viele Webdienst als extrem parallel bezeichnet werden, d. h., die Daten werden
i. d. R. auf Einzelbenutzerbasis problemlos partitioniert (auch MSN Hotmail nutzt beispielsweise die Einfachheit
der E-Mail-Partitionierung auf Einzelbasis). Das Erstellen eines Dienstes, der die natürliche Partitionierung der
Domäne widerspiegelt, resultiert häufig in einem überraschend einfachen Modell, das eine außergewöhnlich gute
Skalierbarkeit und Leistung bietet.
Unabhängig davon, ob E-Mail-Daten nach Benutzerkonten und Chatrooms nach Themen unterteilt werden,
erfolgt die Datenzerlegung parallel und ist für gewöhnlich offensichtlich. Es ist wahrscheinlich, dass die
Granularität der Partitionierung durch die Entwicklung des Webs zunimmt (beispielsweise könnte sie sich von
der Einzelbenutzerbasis zur Communitybasis verschieben), aber viele Möglichkeiten für die
Datenpartitionierung und den parallelen Betrieb werden weiter bestehen. MSN Hotmail skaliert problemlos nach
Benutzerkonto und kann jede der vier Computerklassen unabhängig voneinander skalieren. Zurzeit besteht dieser
Dienst aus mehr als 5.700 Front-End-Servern und 150 Benutzerdatenspeichern. Benutzer werden regelmäßig
zwischen Datenspeichern migriert. Die Migration von Benutzern von einem Server auf einen anderen ist ein
gutes Beispiel für die dynamische Partitionierung, wobei ein einzelnes Postfach die kleinste Einheit der
Granularität darstellt.
Skalierungskonzepte
Internetbasierte Sites werden entweder durch vertikale Skalierung, d. h. durch das Ersetzen von Servern durch
größere Server, oder durch horizontale Skalierung, d. h. durch das Hinzufügen weiterer Server, vergrößert. Die
Sammlung aller Server, Anwendungen und Daten an einer bestimmten Site wird als Farm bezeichnet. Farmen
umfassen viele spezialisierte Dienste, wobei wiederum jeder dieser Dienste über eigene Anwendungen und
Daten verfügt (beispielsweise ein Verzeichnis, Sicherheit, HTTP, E-Mail, Datenbank und andere). Die gesamte
Farm wird als Einheit verwaltet und verfügt über gemeinsame Verwaltungsrichtlinien, Einrichtungen und ein
gemeinsames Netzwerk.
Die Fehlertoleranz der Farm wird dadurch sichergestellt, dass die Hardware, Anwendungen und Daten bei einer
oder mehreren geografisch verteilten Farmen dupliziert werden können. Eine solche Sammlung von Farmen
wird als Geoplex bezeichnet. Fällt eine Farm aus, werden Dienste von den übrigen Farmen bereitgestellt, bis die
ausgefallene Site repariert wurde. Geoplexe sind entweder aktiv-aktiv, d. h., die Last wird auf alle Farmen
verteilt, oder sie sind aktiv-passiv, so dass eine oder mehrere Farmen im Standbymodus verfügbar sind. Das
Unterstützen von zwei Datenzentren kann zu einer Verdoppelung der Betriebskosten führen, und im Hinblick auf
die Topologie des Internets sind die Vorteile der geografischen Verteilung für verteilte Benutzer fragwürdig. Die
sinkenden Preise für Netzwerkbandbreite ermöglichen die Realisierung kostengünstiger Alternativen zur
geografischen Verteilung. Aber abgesehen von finanziellen Erwägungen wird durch die verteilte Skalierung
auch die Zuverlässigkeit des Dienstes gefährdet. Für Dienste, die viele geografische Gegenden abdecken, ist die
Bereitstellung in einem einzelnen Datenzentrum aus praktischen Gründen u. U. nicht zu empfehlen. Auch
aufgrund anderer unerwarteter physischer Probleme kann die Notwendigkeit bestehen, Geoplexe einzurichten.
So verfügt z. B. eine Site möglicherweise nicht über die zum Ausführen der erforderlichen Computer an einem
zentralen Ort benötigte Elektrizitäts- und Kühlungskapazität.
Farmen können auf zwei Arten vergrößert werden, durch Klonen oder durch Partitionieren. Ein Dienst kann auf
vielen Replikationsknoten geklontwerden, wobei jeder Knoten über dieselbe Software und dieselben Daten
verfügt. Anforderungen werden dann an die einzelnen Mitglieder der durch Klonen entstandenen Gruppe
weitergeleitet. Die Sammlung von Klonen für bestimmte Dienste wird als zuverlässiges Array geklonter Dienste
(Reliable Array of Cloned Services, RACS) bezeichnet. Sowohl mithilfe von RACS als auch durch das Klonen
werden Skalierbarkeit und Verfügbarkeit erzielt. In der Regel kann ein Administrator einen ordnungsgemäß
entworfenen und auf Hunderten von Klonen ausgeführten Dienst verwalten.
RACS und das Klonen sind zwei ausgezeichnete Möglichkeiten zur Steigerung der Verarbeitungsleistung sowie
zur Vergrößerung der Netzwerkbandbreite und der Speicherbandbreite für eine Farm. Allerdings bietet sich
RACS ohne gemeinsame Datenträger, bei dem jeder Klon den gesamten Speicher lokal dupliziert, nicht zum
Vergrößern der Speicherkapazität an. Die Klone verfügen über identische Speicher, und alle Aktualisierungen
müssen auf die Speicher aller Klons angewendet werden. Deshalb eignet sich das Klonen nicht zur
Vergrößerung der Speicherkapazität. Tatsächlich ist das Klonen bei schreibintensiven Diensten problematisch,
denn alle Klone müssen alle Schreibvorgänge ausführen, so dass der Durchsatz nicht verbessert wird und zur
korrekten Ausführung der gleichzeitigen Aktualisierungen erhebliche Änderungen erforderlich sind. Klone
sollten vor allem bei schreibgeschützten Anwendungen mit geringen Speicheranforderungen implementiert
werden.
Eine Möglichkeit zur Senkung der Kosten und zur Verringerung der Komplexität geklonter Speicher ist das
Einrichten einer gemeinsam genutzten Speicherverwaltung für alle Klone. Dieser Entwurf eines RACS mit
gemeinsam genutzten Datenträgern wird häufig als Cluster bezeichnet und beinhaltet statusfreie Server, die
jeweils auf einen gemeinsamen Back-End-Speicherserver zugreifen. Bei diesem Entwurf muss der
Speicherserver zum Sicherstellen der Verfügbarkeit fehlertolerant sein. Er benötigt aber dennoch genaue
Algorithmen zum Verwalten von Aktualisierungen (beispielsweise eine Speicherentwertung, Sperrverwaltung
und Transaktionsprotokolle). Während das System heraufskaliert wird, kann der durch die Aktualisierung
entstehende Datenverkehr zu einem Leistungsengpass führen. Trotz dieser Einschränkungen bietet RACS mit
gemeinsam genutzten Datenträgern viele Vorteile. Dieser Entwurf würde über 20 Jahre lang gerne eingesetzt.
Partitionen erweitern einen Dienst, indem sie Hardware und Software duplizieren und die Daten auf alle Knoten
verteilen. Im Wesentlichen entspricht dies einem Klon ohne gemeinsam genutzten Datenträger, es sei denn, nur
die Software wird geklont. Die Daten werden auf alle Knoten verteilt. Durch das Partitionieren werden beim
Hinzufügen eines Knotens die Berechnungsleistung, Speicherkapazität, Speicherbandbreite und die
Netzwerkbandbreite des Dienstes erhöht. Die Sammlung von Partitionen für einen bestimmten Dienst wird als
zuverlässiges Array partitionierter Dienste (Reliable Array of Partitioned Services, RAPS) bezeichnet.
Idealerweise werden die Daten zum Ausgleichen der Speicher- und Berechnungslast beim Hinzufügen einer
Partition automatisch neu auf die Knoten verteilt. Für gewöhnlich verteilt die Anwendungsmiddleware die Daten
und die Arbeitsauslastung auf die Objekte. Mailserver verteilen diese beispielsweise auf die Postfächer, während
Vertriebsanwendungen sie eventuell auf die Benutzerkonten oder Produktfamilien verteilen. Die Partitionierung
sollte beim Hinzufügen neuer Daten und bei einer Änderung der Auslastung automatisch angepasst werden.
Da die Daten nur an einem Ort gespeichert werden, führt das Partitionieren nicht zu einer verbesserten
Verfügbarkeit. Fällt ein Datenträger oder der den Datenträger verwaltende Server aus, ist dieser Teil des
Dienstes nicht verfügbar - der Inhalt dieses Postfaches kann nicht gelesen, dieses Konto kann nicht belastet oder
dieser Benutzerdatensatz kann nicht gefunden werden. Anders als beim Klonen ohne gemeinsam genutzten
Datenträger, bei dem redundanter Speicher hinzugefügt wird, wird beim einfachen Partitionieren (und beim
Klonen mit gemeinsam genutzten Datenträgern) nur eine Kopie der Daten erstellt. Ein Geoplex kann vor diesem
Speicherverlust schützen, aber normalerweise wird der Speicher durch Duplex (RAID1) oder Parität (RAID5)
lokal geschützt, so dass die meisten Ausfälle vom Benutzer unbemerkt repariert werden.
Klone und RACS können für größtenteils schreibgeschützte Anwendungen mit niedrigen Konsistenz- und
Speicheranforderungen (weniger als 100 GB) verwendet werden. Webserver, Dateiserver, Sicherheitsserver und
Verzeichnisserver sind gute Beispiele für klonfähige Dienste. Geklonte Dienste erfordern das automatische
Replizieren von Software und Daten auf neuen Klonen und das automatische Weiterleiten von Anforderungen
zum Ausgleichen der Arbeitslast, zum Umgehen von Ausfällen und zum Erkennen reparierter und neuer Knoten.
Zusätzlich benötigen Klone einfache Tools zum Verwalten von Software- und Hardwareänderungen sowie zum
Erkennen und Reparieren von Ausfällen. Klone und RACS eignen sich nicht für Komponenten einer
Anwendung, die aufgrund ihres Freigabestatus in Verbindung mit häufig durchgeführten Aktualisierungen nicht
parallel ausgeführt werden kann.
Das Verwenden eines Klons mit gemeinsam genutzten Datenträgern kann einige dieser Probleme verringern,
aber irgendwann wird die Belastung des Speicherservers zu groß, so dass eine Partitionierung erforderlich wird.
Große und häufig aktualisierte Datenbankanwendungen sollten durch das Weiterleiten von Anfragen zu Servern
bedient werden, die zum Bedienen einer Datenpartition (wie beispielsweise RAPS) bestimmt sind. Dieses
Weiterleiten nach Affinität liefert einen besseren Überblick über die Daten und ermöglicht das Speichern von
Daten im Hauptspeicher ohne das erhöhte Risiko einer Speicherentwertung.
E-Mail, Instant Messaging, Enterprise Resource Planning (z. B. Systeme wie SAP und BAAN) und
Datensatzverwaltung sind beispielsweise Anwendungen, bei denen sich die Partitionierung von Daten und das
Weiterleiten nach Affinität positiv auswirken. Jede dieser Anwendungen kann problemlos partitioniert werden
und profitiert von der partitionierten, dezentralen Skalierung. Darüber hinaus können Datenbanksysteme von
parallel durchgeführten Suchvorgängen profitieren, bei denen eine Abfrage von mehreren Prozessoren auf
mehreren Festplatten parallel ausgeführt wird. Zur Sicherstellung der Verfügbarkeit müssen partitionierte
Systeme in irgendeiner Form gepackt werden, so dass der statusbehaftete Dienst (und sein Status) beim Ausfall
eines Knotens schnell zu einem zweiten Knoten migrieren können.
Partitionierte Systeme müssen die gleiche Verwaltbarkeit aufweisen wie geklonte Systeme. Abgesehen davon
muss die Middleware eine transparente Partitionierung und die Möglichkeit des Lastenausgleichs bieten. Dies ist
ein Dienst auf Anwendungsebene, der vom E-Mail-System (zum Migrieren von Postfächern zu neuen Servern),
von Datenbanksystemen (zum Teilen und Zusammenführen von Datenpartitionen) und anderer Middleware
bereitgestellt wird. Die Middlewaresoftware verwendet zum Erstellen eines Dienstes mit hoher Verfügbarkeit
den Failover-Mechanismus des Betriebssystems (Pakete). Die Dienste sind auch dazu konzipiert, das
Weiterleitungssystem zum Weiterleiten von Anfragen zu der entsprechenden Dienstpartition zu programmieren.
Die wichtigste Skalierungstechnik ist das Replizieren eines Dienstes auf vielen Knoten. Bei der einfachsten
Form der Replikation werden sowohl die Programme als auch Daten kopiert. Diese Klone ohne gemeinsam
genutzte Datenträger können ebenso leicht verwaltet werden wie eine Einzelinstanz, aber sie bieten sowohl
Skalierbarkeit als auch Verfügbarkeit (wie RACS). Klone ohne gemeinsam genutzte Datenträger eignen sich
nicht für große Datenbanken oder häufig aktualisierte Dienste. Für diese Anwendungen können Dienste
gepackten Partitionen zugeordnet werden. Als Pakete erhalten Partitionen eine hohe Verfügbarkeit, denn
fehlerhafte Partitionen auf anderen Knoten werden neu gestartet und haben dabei Zugriff auf den Speicher der
fehlerhaften Partition. Die Middleware hat die Aufgabe, die Verwaltung dieser Partitionen so einfach zu
gestalten wie die Verwaltung eines einzelnen Knotens (wie beispielsweise RAPS).
Server, Verbindungen und Netzwerk
Praktisch alle der überprüften Dienste verteilen ihren Dienst auf Front-End-Server und Back-End-Server. Die
Front-End-Server verarbeiten normalerweise eingehende Benutzeranfragen und erfassen, generieren oder lesen
Daten, rendern diese Daten in das HTML-Format und stellen anschließend eine Antwort für den Benutzer aus.
Für Dienste, die das Protokoll HTTP 1.0 unterstützen, wird eine TCP-Verbindung erstellt und für jede einzelne
Benutzeranfrage unterbrochen.
Der allgemeine Aufbau der untersuchten großen Internetdienste umfasst vier Komponenten: statusfreien
Lastenausgleich, statusfreie Front-End-Server, statusbehafteten Lastenausgleich und statusbehaftete Back-EndServer. Statusbehafteter Lastenausgleich wird fast ausnahmslos auf den Front-End-Servern bereitgestellt. Diese
Architektur und Bereitstellung zugunsten der Skalierbarkeit sind gut durchdacht.
Bei den meisten der untersuchten Sites haben die Front-End-Server den Status bezüglich der Verfügbarkeit der
einzelnen Back-End-Server und bezüglich der Verfahrensweise zum Zuordnen der bei einem Back-End-Server
eingehenden Benutzeranfragen beibehalten. Den Status bezüglich der Benutzeranfragen behalten sie jedoch nicht
bei. Beachten Sie den Unterschied: Ein Front-End-Server speichert den Status "Ich habe die Anfrage von
Benutzer A an Back-End-Server 3 gesendet" und nicht "Ich sende alle Anfragen der Benutzer A bis F an BackEnd-Server 3". Letzteres würde bedeuten, dass Front-End-Server ersetzt werden können, weil sie keine
anfrageabhängigen Informationen enthalten. Beachten Sie, dass eine bestimmte Transaktion (oder ein
bestimmter Dialog) u. U. viele Front-End-Server durchläuft, aber alle Front-End-Server werden die Transaktion
zu demselben Back-End-Server weiterleiten. Bei MSN Hotmail wird der Status des Lastenausgleichs auf einem
separaten Mitgliedscomputer mit Index Server gespeichert, weil der Status sehr groß ist: Ein Eintrag pro
Benutzer, durch den definiert wird, welcher Benutzerdatenspeicher die E-Mails der einzelnen Benutzer enthält.
Der größte Nachteil der vollständig statusfreien Front-End-Architekturmodelle besteht darin, dass der Status
entweder zum Client oder zum Back-End-Server übermittelt werden muss. Das Übermitteln des Status zum
Server setzt voraus, dass die Site das Anzeigen einer eindeutigen Kennung (oder einer Anmeldung) unterstützt
und über eine Statusdatenbank verfügt. Das Übermitteln des Status zum Client setzt voraus, dass der Status
entweder im URL eingebettet ist oder in einem Browsercookie transportiert wird. Das Verwenden von Cookies
zum dauerhaften Speichern von Benutzerprofilinformationen ist problematisch, weil Cookies nicht zwangsläufig
das unstete Verhalten der Benutzer unterstützen (Wechseln von einem Browser zum nächsten). Eine der Sites
verwendet Cookies erst nach dem Einrichten einer Sitzung und nicht als dauerhaften Mechanismus. Es herrscht
noch immer keine Einigkeit über Cookies und deren Verwendung. Cookies sind aus Datenschutzgründen zwar
nicht bedenklich, aber Dienstentwickler sollten sich der bekannten Bedenken und der Alternativen bewusst sein.
Back-End-Server sind i. d. R. statusbehaftet und werden zum Abrufen und zum Speichern von Daten verwendet.
Zu den Beispielen für Back-End-Komponenten zählen SQL- oder Oracle-Datenbanken und Dateispeicherserver.
Back-End-Dienste müssen auf Plattformen mit hoher Verfügbarkeit gehostet werden. Eine hohe Verfügbarkeit
kann entweder durch zentrales oder dezentrales Skalieren erzielt werden. Die Hardware der Back-End-Server
wird so ausgewählt, dass eine maximale Leistung erzielt wird, damit die Anzahl der kostenintensiven Server
verringert und das Einrichten großer Pools von Front-End-Servern ermöglicht wird. Endbenutzer kommunizieren
nur selten direkt mit Back-End-Servern.
Um skalieren zu können, müssen Dienste den Ablauf des internen Datenflusses verstehen. Einer der Gründe, die
eine Unterscheidung zwischen Front-End- und Back-End-Servern sinnvoll erscheinen lassen, ist die Tatsache,
dass der Front-End-Server den mit langsamen Clientverbindungen zusammenhängenden Leistungsengpass
auslagern kann und so eine höhere Parallelität unter den Back-End-Servern ermöglicht. Im Allgemeinen ist die
Impedanzübereinstimmung von Dienstkomponenten auf der Basis von Verbindungsmustern und der Bandbreite
ein wichtiger Aspekt des Internetdienstentwurfs. Die Front-End/Back-End-Serververbindung hat eine Wartezeit,
so dass die Front-End-Server ein Multiplexing für viele Anfragen ausführen können. Dieses Vorgehen wirkt sich
entscheidend auf die interne Netzwerktopologie aus. Zwischen einem Front-End-Server und dem entsprechenden
Back-End-Server können gleichzeitig viele Verbindungen bestehen.
Darüber hinaus spielt die Netzwerktopologie, einschließlich der Platzierung von Routern, Switches und
Subnetzen, hinsichtlich der Skalierbarkeit des Dienstes eine wichtige Rolle. Das Platzieren von Switches und
Subnetzen ist beim Minimieren der zwischen den Diensten erforderlichen Bandbreite und zum Erzielen der
maximalen Multicastleistung bei der Skalierbarkeit von großer Bedeutung. Einige Dienste verwenden Multicast
zum Verteilen von Anwendungen und Inhalt.
Lastenausgleich
Abgesehen von sehr kleinen Diensten sollte bei allen Diensten zum Verteilen der Last eingehender
Verbindungen auf die Front-End-Server ein Mechanismus für den Lastenausgleich vorhanden sein. Viele große
Internetdienste enthalten Teildienste, bei denen auch ein Lastenausgleich ausgeführt wird. Zusammen mit dem
Partitionieren ermöglicht der Lastenausgleich Skalierbarkeit.
Die Anforderungen für den Lastenausgleich und für das Weiterleiten sind auf jeder Stufe unterschiedlich. Auf
der obersten Stufe schaffen Lastenverteilungsschemas auf IP-Ebene einen guten Ausgleich, wenn eine große
Menge potenzieller Clients und Anfragen keine Affinität besitzen. Die mittlere Stufe verarbeitet die
Anfragesemantik und kann Daten erzeugen und spezielle Lastensteuerungsentscheidungen verarbeiten. Auf der
Datenstufe besteht die Schwierigkeit im Weiterleiten der Anforderung zu der entsprechenden Partition.
Derzeit existieren drei Standardmechanismen für den Lastenausgleich: Mehrere IP-Adressen (DNS-Round
Robin), eigenständige IP-Adresszuordnungen in Richtung virtuell-zu-tatsächlich und eingebettete IPAdresszuordnungen in Richtung virtuell-zu-tatsächlich.
Mehrere IP-Adressen (DNS-Round Robin)
Dies ist die DNS-Namensauflösung beim Übersetzen eines Domänennamens in eine IP-Adresse. Bei DNSRound Robin wird eine andere IP-Adresse mit jeder DNS-Auflösungsanforderung zurückgegeben (wenn in dem
DNS-Eintrag mehrere Einträge vorhanden sind).
Der Zweck von Round Robin besteht darin, zum Verteilen der Verbindungslasten mehrere HTTP-Server (mit
identischen Inhalten) zuzulassen. Round Robin ist nicht zufällig, auch wenn seine Auswirkungen zufällig
wirken. Round Robin erfolgt in einer Kette hintereinander, so dass die Antwortdatensatzsequenz bei jeder
Antwort um eine Stelle verschoben wird. Eine Adresse wird ausgegeben und an das Ende der Liste gesetzt, und
anschließend wird die nächste Adresse für die nächste Übersetzungsanforderung ausgegeben, so dass eine Art
Übersetzungsliste entsteht.
Viele Sites verwenden DNS-Round Robin zumindest für den Lastenausgleich auf oberster Ebene, weil DNS gut
auf angehaltene Systeme reagiert. Die Benutzererfahrung hat gezeigt, dass DNS funktionsfähig ist, weil
Benutzer bei einer langsamen Verbindung auf Aktualisieren klicken, so dass der Name erneut aufgelöst wird.
Auf diese Weise ermöglichen Benutzer letztendlich selbst den Ausgleich.
DNS-Round Robin hat gegenüber den anderen beiden Mechanismen den Vorteil, dass der Client den Server, mit
dem er kommuniziert, direkt identifizieren kann (anhand der IP-Adresse). Bei den anderen beiden Mechanismen
erkennt der Client nicht direkt die IP-Adresse des Servers, der möglicherweise die Anforderung bedienen wird
(weil dort vom Rand des Netzwerkes aus nachgeschaltet eine virtuell physische Zuordnung erfolgt). Dies hat
verschiedene Folgen, beispielsweise wird dadurch das Debuggen auf der aktiven Site schwieriger.
Eigenständige Lösungen
Es gibt verschiedene Unternehmen, die eigenständige Lösungen für den Lastenausgleich herstellen. Bei den
meisten dieser Lösungen handelt es sich um Switches oder Brücken mit zusätzlicher Software zum Verwalten
spezieller Weiterleitungen. Die eigenständige Lastenausgleichsmethode lernt die IP-Adressen aller mit ihr
verbundenen Server. Je nach Verfügbarkeit der Computer und je nach Ausgleichsalgorithmus nimmt die
Lastenausgleichsmethode alle eingehenden Pakete mit derselben IP-Zieladresse entgegen und schreibt sie um, so
dass sie die entsprechende IP-Adresse des ausgewählten Servers enthalten.
Eingebettete Lösungen: Microsoft-Netzwerklastenausgleich
Der Netzwerklastenausgleich von Microsoft Windows 2000 ist eine in Windows 2000 Advanced Server und
Windows 2000 Datacenter eingebettete Lastenausgleichslösung. Der Netzwerklastenausgleich erstellt eine
freigegeben virtuelle IP-Adresse (Virtual IP, VIP) für ein Cluster von Computern mit Windows. Der
Netzwerklastenausgleich gleicht eingehende TCP-Verbindungen zwischen den Mitgliedern des Clusters mithilfe
der virtuellen IP-Adresse aus.
Der Netzwerklastenausgleich ist ein NDIS-Paketfiltertreiber. Der Netzwerklastenausgleich befindet sich über
dem NDIS-Treiber des Netzwerkadapters und unter dem TCP/IP-Stapel. Jeder Computer im Cluster erhält alle
für die virtuelle IP-Adresse bestimmten Pakete. Der Netzwerklastenausgleich entscheidet bei jedem einzelnen
Paket, auf welchem Computer es verarbeitet werden soll. Wenn das Paket von einem anderen Computer im
Cluster verarbeitet werden soll, verwirft der Netzwerklastenausgleich das Paket. Wenn das Paket lokal
verarbeitet werden soll, wird es an den TCP/IP-Stapel weitergeleitet.
Auf jedem Computer erkennt der Treiber für den Netzwerklastenausgleich alle eingehenden Pakete, weil sich
alle Mitglieder des Clusters auf einem freigegebenen Netzwerksegment befinden. Im Wesentlichen wird jedes
Paket an jeden Computer übermittelt, und jeder Computer entscheidet, welche Pakete verarbeitet werden.
Der Netzwerklastenausgleich verwendet eine verteilte Hashfunktion, um zu ermitteln, welche Pakete auf einem
bestimmten Computer angenommen werden sollen. Der Netzwerklastenausgleich hostet Meldungen zum
Austauschtakt in beide Richtungen im Sekundentakt. Die Meldung zum Takt enthält einen Überblick über das
Clusters aus der Sicht des Hosts. Auf der Grundlage der Meldungen zum Takt erkennt jeder Host den Status
jedes Clustermitglieds. Jeder Host entscheidet unabhängig und auf der Grundlage der Hostkennung, der Anzahl
der im Cluster vorhandenen Hosts und der im IP-Header des Pakets enthaltenen Informationen, welche Pakete
angenommen und welche abgelehnt werden.
Tatsächlich partitioniert der Netzwerklastenausgleich den Speicherplatz auf dem IP-Client (durch Hashing) auf
alle verfügbaren Clusterhosts und lässt jeden Host einen Teil der Arbeitslast verarbeiten. Beim
Netzwerklastenausgleich werden die im Paket enthaltenen Informationen nicht geändert.
Durch das Verwenden einer MMC-Konsole kann der Systemadministrator jeden der Hosts aus dem Cluster
jederzeit entfernen bzw. zum Cluster hinzufügen.
Anwendungsentwurf
Internetdienste auf Anwendungsebene sind oft rekursiv aufgebaut und bestehen aus mehreren Diensten, die sich
auf vielen Computern befinden. Diese einfache Tatsache ist mit schwerwiegenden Auswirkungen verbunden.
Der Anwendungsentwickler ist dafür verantwortlich, der Hardware den geeigneten Code zuzuweisen und die
Kommunikationsfähigkeit des i. d. R. großen und komplizierten Computerclusters sicherzustellen. Wegen der
unterschiedlichen Computertypen und mehreren Instanzen jedes Typs muss der Entwickler auch die
Netzwerkverbindung berücksichtigen. Der Entwickler muss Kommunikationsmuster zwischen Computern sowie
den zum Ausgleichen der Computerlast und der internen/externen Netzwerkkapazität erforderlichen und auch
angestrebten Mechanismus berücksichtigen.
Da Dienste skaliert werden, ist auch die Datenpartitionierung zu bedenken. Bei einem weniger umfangreichen
Dienst mit nur einem Back-End-Server spielt die Verfahrensweise bei der Datenpartitionierung keine wichtige
Rolle. Da das System skaliert wird und die erforderliche Ausgaberate des Back-End-Servers die Ressourcen
eines einzelnen Computers übersteigt (z. B. CPU-Zyklen, Netzwerkbandbreite und Anzahl der
Datenträgerspindeln), besteht häufig die Notwendigkeit, eine naheliegende Lösung zum Partitionieren der Daten
zu finden. Viele der zurzeit entwickelten Dienste sind sehr parallel, d. h., Daten können problemlos partitioniert
werden. Der Entwickler überlegt sich nicht nur, in welcher Weise Daten partitioniert werden können und
müssen, sondern auch, wie auf die Daten zugegriffen wird. Zudem entwirft er die Topologie für die Verbindung
zwischen den die Anforderungen verarbeitenden Front-End-Computern und den Back-End-Computern. Der
Entwickler muss darauf achten, dass er nicht Netzwerkverbindungen zwischen allen Front-End- und allen BackEnd-Computern erstellt. Ein solches Netz kann, je nach Verwendung, positiv oder negativ bewertet werden.
Wenn der Dienst jedoch über Active Data Objects (ADO) in ASP auf Computer mit SQL Server zugreift, wird er
für jede HTTP-Anforderung Verbindungen zwischen den Front-End- und Back-End-Computern öffnen und
unterbrechen. In diesem Fall hätte ein solches Netz selbstverständlich schwerwiegende Folgen.
Der Entwickler muss nicht nur ermitteln, in welcher Weise die Datenpartitionierung angesichts der aktuellen
Erweiterung der Back-End-Server vorzunehmen ist, sondern auch Vorbereitungen für zukünftige Erweiterungen
und neue Versionen treffen. Zu diesem Zeitpunkt muss der Entwickler eine Art virtuelle Ressourcenverwaltung
(Virtual Resource Manager, VRM) zur Verfügung stellen oder erstellen, damit zwischen den logischen Daten
und der physischen Partition ein gewisses Maß an indirekter Steuerung vorliegt. Wenn neue Back-End-Server
online geschaltet werden, muss der Entwickler zur Wiedergabe der neuen Datenpartitionierung die virtuelle
Ressourcenverwaltung anpassen. Aufgrund dieser neuen Partitionierung müssen vermutlich die auf einem oder
mehreren Back-End-Geräten gespeicherten Daten zu anderen Back-End-Geräten migriert werden. Der
Entwickler muss die Migration entweder direkt im Dienst vornehmen oder entsprechende Supporttools
bereitstellen.
Da ein Dienst mit der Zeit größer und wichtiger wird, wird den kleinsten Einzelheiten bezüglich der Leistung
immer mehr Beachtung geschenkt. Da jeder einzelne Computer für eine bestimmte Funktion des Dienstes
eingesetzt wird, wird die Aufmerksamkeit des Entwicklers immer stärker auf die einzelnen Vorgänge in den
Computern gelenkt. Sind bezüglich der Leistung Veränderungen zu beobachten? Sind bei einem Computer
Aspekte zu beobachten, die zu Problemen führen können? Werden auf diesem Computer nicht benötigte Dienste
oder Prozesse ausgeführt? Wird die Leistung bestimmter Anwendungen und untergeordneter Anwendungen
durch die Dienste verbessert oder verschlechtert? Sie sollten daran denken, dass eine Unterkomponente auf einer
großen Anzahl von Computern ausgeführt werden kann. Bei MSN Hotmail haben beispielsweise mehr als
5.700 Front-End-Computer dieselbe Aufgabe. Die Kosten für eine zusätzliche Optimierung werden auf alle
Computer verteilt, auf denen die Anwendung oder der Dienst ausgeführt wird.
Ebenso wie die Anzahl der Komponenten des Dienstes steigt auch die Wahrscheinlichkeit eines
Komponentenfehlers. Aufgrund der verteilten Struktur wird ein Teil des Dienstes wahrscheinlich betriebsbereit
bleiben, auch wenn eine Funktion (oder eine lediglich eine Teilmenge der Benutzergemeinde bedienende
Funktion) nicht betriebsfähig ist. Der Entwicklers kann die partiellen Ausfälle auswerten. Unter
Berücksichtigung von partiellen Ausfällen muss der Entwickler Fehler und/oder die fehlende Verfügbarkeit von
untergeordneten Diensten (oder Infrastrukturdiensten) beim Schreiben von Komponenten besonders
berücksichtigen und sorgfältig behandeln. Ausfälle sollten von allen externen Komponenten möglichst sorgfältig
behandelt werden, und dabei sollten auf keinen Fall neue Fehler verursacht werden, die sich wiederum deutlich
auf den Benutzer auswirken würden.
Fertige, konfigurierbare Lösungen werden im Allgemeinen gegenüber benutzerdefiniertem Code bevorzugt. Das
Design eines Clusters sollte nach Möglichkeit so angepasst werden, dass optimierte Hardware oder Software
eingesetzt werden kann und kein benutzerdefinierter Code geschrieben werden muss. Hardwareswitches werden
häufig aus folgenden Gründen bereitgestellt: Sie sind zuverlässig, vertraut, vorhersehbar und können problemlos
und ohne negative Konsequenzen in ein Netzwerk eingebracht werden. Bei den untersuchten Sites würde eine
Lösung den Vorzug erhalten, bei der ein ganzes System aus fertigen, vorkonfigurierten Anwendungen erstellt
wird. Obwohl Code eine sehr allgemeine Lösung darstellt, bedarf er für gewöhnlich einer größeren
Betriebskoordination als die einfache konfigurationsgesteuerte Lösung. Gleichermaßen wird bei vielen Sites aber
auch eine fertige Statusverwaltung für die Benutzerprofile und die Inhaltsverwaltung angestrebt. Das
Serveranwendungsmodell wurde in vielen bekannten, kommerziellen Internetsites anderer Unternehmen
erfolgreich eingesetzt.
Wenn das Verwenden von benutzerdefiniertem Code nicht umgangen werden kann, ist es empfehlenswert, sich
beim Entwerfen an bestimmten Aspekten zu orientieren. Dazu gehört z. B., ob tatsächlich ein allgemeines
Problem auf einer gemeinsamen Plattform vorliegt oder ob die Situation dem objektorientierten Programmieren
entspricht, bei dem eine Klassenbibliothek einfach nicht auf eine sehr große, ausfallgefährdete Domäne skaliert
werden kann. Lösungen, die zunächst einfach erscheinen, können sehr schnell kompliziert werden. Mehrere
gleichzeitige HTTP-Verbindungen eines Benutzers können entweder kostenintensive Warteschlangen oder
Sperren erforderlich machen. Front-End-Server und SMTP-Server können statusbehaftet werden und den
Lastenausgleich dadurch sehr kompliziert gestalten. Schließlich können HTTP-Verbindungen von sehr kurzer
Dauer sein: HTTP 1.0-Clients werden bei jeder Seiten- oder Elementanforderung neu verbunden. ActiveX®Steuerelemente können aufgrund der großen Unterschiede zwischen den Clients beim Debuggen Probleme
erzeugen. Daher ist DHTML in einigen Fällen die bessere Lösung, weil es so strukturiert ist, dass kompatible
Clients ordnungsgemäß heruntergestuft werden.
Das Skalieren der Netzwerkverbindung von Front-End-Computern mit SQL Server stellt eine enorme
Herausforderung dar. Computer mit SQL Server werden bei einer SQL-Replikation, in deren Verlauf eine hohe
Anzahl von Transaktionen durchgeführt wird, schnell überlastet. Folgende Probleme sind bei einem Computer
mit SQL Server oder einem anderen Datenbanksystem zu erwarten und einzuplanen:




Irrtümliches Löschen wichtiger Daten.
Einfügen "problematischer" Daten. (Daten, die eigentlich gar nicht hätten eingefügt werden sollen.)
Programmgesteuerte Beschädigung von Daten. (Daten, in die von einer Anwendungskomponente
absichtlich Fehler eingefügt wurden oder die von den Komponenten absichtlich unbrauchbar gemacht
wurden.)
Daten, die Anwendungseinschränkungen verletzen. (Daten, die zum System in korrekter Weise
hinzugefügt wurden, die aber von einer oder mehreren Anwendungskomponenten nicht verarbeitet
werden können.)
Durch diese Probleme kann der Verarbeitungsprozess unterbrochen werden, auch wenn die zur Verarbeitung
erforderliche Hardware vollständig verfügbar ist. Abgesehen von diesen Problemen kann sich eine RogueTransaktion (beispielsweise ein schlecht gestalteter Bericht, der während des Generierens wichtige
Anwendungsdaten sperrt) so negativ auf das System auswirken, dass die Anwendung durch die Ausführung der
Transaktion stark beeinträchtigt wird, auch wenn Hardwareressourcen für die Ausführung zur Verfügung stehen.
Um den Bedenken bezüglich dieser Daten und dem seltenen Fall eines vollständigen Clusterausfalls
vorzubeugen, sollten für das die Transaktionen verarbeitende Cluster Daten- und Protokollsicherungen
durchgeführt werden. Eine vollständige Sicherung der Anwendungsdatenbank sollte jede Nacht erfolgen,
während es sich empfiehlt, Protokollsicherungen alle 15 Minuten auszuführen. Die Daten- und
Protokollsicherungen sollten fortwährend auf einem im Standbymodus bereitgestellten Server angewendet
werden. Der Server sollte sich auf demselben Netzwerksegment befinden wie das die Transaktion verarbeitende
Cluster, und er sollte für den Fall schwerwiegender Datenprobleme über die zum Behandeln der Anwendungslast
erforderlichen Hardwareressourcen verfügen.
Die Datenbank ist ein universelles Repository, auf das häufig zugegriffen wird. Zentralisierte Datenbanken
können bezüglich der Netzwerkverbindungen und der Bandbreite Probleme verursachen. Es ist sinnvoll, die Zeit
und Arbeit zu investieren, eine verteilte Datenbank mit hoher Verfügbarkeit zu erstellen. In einer
Dienstarchitektur hostet jede Dienstgruppe für globale Anforderungen ihre eigene Datenbank mit einem
Aggregator für höhere Schichten. Diese Architektur maximiert die Unabhängigkeit einer Dienstgruppe und
verbessert die Skalierbarkeit des Dienstes als Ganzes.
Freigegebene Adressraumdienste können beim Verwenden von benutzerdefiniertem Code sehr anfällig sein.
Während das Debuggen einzelner Threads auf einem Onlineserver schwierig oder sogar unmöglich sein kann,
sind isolierte Prozesse stabil und können problemlos debuggt und neu gestartet werden. Sowohl Threads als auch
Prozesse befinden sich auf einer zu niedrigen Ebene, um clusterweite Parallelität darzustellen, weil dabei viele
Computer beteiligt sind. Daher schließen Dienste Synchronisierung häufig direkt in ihre Infrastruktur ein.
Bei einem der Internetdienste wurde ASP vermieden, weil der Eindruck entstand, dass das Modell die
Verwaltung der Objektlebensdauer und die Verwaltung des Status2 komplizierter gestaltete. Derartige Probleme
können im Allgemeinen durch eine gute Programmierung vermieden werden. Probleme im Zusammenhang mit
Schleifen, umfangreicher Datenbankberechnung (wie beispielsweise Minimum, Maximum und Sortierung) und
einem erhöhten Datenbankzugriff sollten möglichst vermieden werden.
Die Speicherverwaltung ist beim Rendern vieler Seiten von zentraler Bedeutung. Unabhängig von anderen
Änderungen bleibt die maximale Anzahl von Seitenfehlern konstant, die vom Computer pro Sekunde behandelt
werden können. Zur Verbesserung der Leistung sollte vor dem Auftreten des nächsten Seitenfehlers möglichst
viel Arbeit erledigt werden. Weitere Informationen zur automatischen Speicherverwaltung finden Sie unter
ASP.NET und im .NET Framework (englischsprachig).
Die an einem Standort befragten Designer erwarten, dass Anwendungen ausfallen. Sie entwerfen getreu dem
Grundsatz: Wenn eine Anwendung heruntergefahren werden muss, muss dies schnell geschehen, und sie muss
schnell wieder verfügbar sein - sie sollte nicht in einem nicht reagierenden Zustand beibehalten werden.. Der
Dienst-Manager von Windows 2000 startet ausgefallene Dienste automatisch neu. Bei einer der Sites wurde
versucht, bei einem Ausfall den bestmöglich herabgestuften Dienst bereitzustellen. Wenn beispielsweise ein
untergeordneter Dienst nicht in eine Datenbank schreiben kann, stellt er die im schreibgeschützten Modus
erforderliche Funktionalität bereit. Vorgänge nutzen schreibgeschützte Vorgänge, um Onlinesicherungen der
Benutzerdatenbank zu ermöglichen. Die Homepage rendert alle enthaltenen Informationen, damit der Server
nicht HTML-Informationen im Zusammenhang mit Schlagzeilen einschließt, falls beispielsweise
Nachrichtenschlagzeilen nicht verfügbar sind.
Die meisten Dienste können Fehler selbstständig beheben. Wenn beispielsweise der E-Mail-Dienst erkennt, dass
der Nachrichtenindex mit keiner der Nachrichten übereinstimmt, erstellt er den Index automatisch neu.
Anwendungsaktualisierungen
Ein webbasierter Dienst muss durchgehend ausgeführt werden, d. h., eventuelle Herabstufungen des Dienstes
dürfen für den Kunden nicht sichtbar sein. Selbst eine kurzzeitige Unterbrechung der Verfügbarkeit pro Monat
kann vom Kunden als zu starke Herabstufung wahrgenommen werden. Außer bei einem Update des
Betriebssystems sollte der Server beim Aktualisieren einer Anwendung immer weiter ausgeführt werden. Eine
Möglichkeit besteht darin, Server hinter Lastenausgleichsgeräten zu platzieren und sie zum Aktualisieren und
zum Warten auszuschalten.
Es gibt zwei Arten von Anwendungsaktualisierungen: Inhalts- und Codeaktualisierungen. Sowohl bei Inhalts- als
auch bei Codeaktualisierungen ist es wichtig, den Dienst nicht anzuhalten. Durch Inhaltsaktualisierungen werden
nur Datendateien geändert, und zwar i. d. R. die Dateien, die ermitteln, was dem Benutzer auf dem Bildschirm
angezeigt wird. Inhaltsaktualisierungen werden nach einem eigenen Zeitplan ausgeführt.
Für Aktualisierungen kann kein Rolloutprozess direkt ausgeführt werden, wenn die Daten vor Ort aktualisiert
werden. Sie können auch befristet sein. Die Aktualisierungen werden zusammen mit Batchaufträgen für die
Aktualisierung, die zum gewünschten Zeitpunkt ausgelöst werden, auf den Servern an einem Stagingstandort
ausgeführt. Die befristete Aktualisierung wird verwendet, wenn es für die Integrität einer Anwendung eine Rolle
spielt, dass die gesamte Site gleichzeitig aktualisiert wird. Dies kann jedoch beim Aktualisieren von mehreren
Tausend Servern innerhalb eines einzigen Netzwerkes nicht erreicht werden. Da bei Benutzereingriffen für
gewöhnlich viele Mausklicks ausgeführt werden, sollte ein Benutzer nicht zwischen verschiedenen
Codeversionen (bei denen verschiedene Front-End-Server beteiligt sind) vor und zurück springen. Dies könnte
zu Problemen wie der Inkonsistenz im Format bis zu (offensichtlich) halbimplementierten neuen Features
führen.
Hinweis Eine gute Lösung dieses Problems sollte beinhalten, dass Benutzer, deren Besuch der Site vor der
Aktualisierung mit Version x begonnen hat, während des Besuches weiterhin zu Servern mit Version x geleitet
werden. Neue Benutzer werden zur Version x+1 geleitet.
Die Markteinführung einer neuen Version eines Dienstes und der untergeordneten Komponenten ist mit Risiken
verbunden. Das gleichzeitige Bereitstellen neuer Komponentversionen für den Rolloutprozess ist sehr wichtig.
Im Fall eines Fehlers sollte jede neue Bereitstellung auch wieder rückgängig gemacht werden können. Zudem
sollte eine inkrementelle Rolloutstrategie vorliegen, die in Echtzeit angepasst werden kann. Bei vielen Sites
werden für umfassende Aktualisierungen gleichzeitige physische Vorgänge verwendet. Die neue Version eines
Dienstes wird auf neuer Hardware parallel zum vorhandenen Dienst bereitgestellt. Zur Aktivierung des neuen
Dienstes wird entweder ein DNS- oder ein Routerswitch verwendet. In anderen Sites werden Aktualisierungen
auf derselben Hardware in parallelen Verzeichnisstrukturen ausgeführt.
Da das Überwachen von Änderungen beim Verwalten einer auf allen Stufen konsistenten Site eine wichtige
Rolle spielt, sollte ein Stagingserver bereitgestellt werden. Der Stagingserver dient als Speicherort für die
bereitgestellte Website sowie für SQL-Skripts oder andere Skripts. Der Stagingserver wird zwischen der
Entwicklung/Test-Site und der Produktionsumgebung platziert. Das Entwicklungsteam entwirft, erstellt und
testet Websiteinhalte in einer überwachten Testumgebung, bis diese Inhalte als für die Produktionsumgebung
geeignet angesehen werden. Diese Daten werden anschließend an einen Stagingserver gesendet, auf dem die
Freigabe für die Produktionsumgebung überwacht wird. Nach der Aktualisierung eines Clustercontrollers mit
neuem Inhalt vom Stagingserver verwendet der Controller zum Replizieren der Inhalte auf die Mitgliedsserver
des Clusters einen Mechanismus für die Inhaltsreplikation.
Verwaltbarkeit
Bei allen großen Internetdiensten bestehen im Zusammenhang mit dem Betrieb und der Wartung bestimmte
Risiken. In jeder Instanz verwendet der Dienst verschiedene identisch konfigurierte Computer. Bei einer solchen
Architektur besteht die Notwendigkeit, dass alle standardmäßigen Systemverwaltungsfunktionen, einschließlich
des Betriebssystems und der Anwendungsaktualisierungen, sehr schnell, zuverlässig, remote verwendbar und
nicht interaktiv sind sowie in Skriptform vorliegen können. Der Administrator kann sich nicht mit allen
Computern gleichzeitig beschäftigen. Das Integrieren der Verwaltung mehrerer Server bedarf einer konsistenten,
umfassenden und durchdachten Lösung. Ziel ist es, alle Computer als ein Aggregat zu verwalten. Dies gilt
gleichermaßen für die Anwendungsverteilung und die Systemoptimierung.
Die meisten Aufgaben werden pro Website, pro Postfach, pro Benutzer, pro Kunden und nicht pro Knoten
ausgeführt. Da Web- und Objektdienste sehr CPU-intensiv sind, ist es verständlich, warum die meisten Websites
für diesen Teil des Dienstes kostengünstige Klone verwenden. Ein weiterer Vorteil besteht darin, dass
Warensoftware wesentlich leichter zu verwalten ist als die traditionellen Dienste, die besondere Fähigkeiten der
Betreiber und Administratoren voraussetzen.
Bei dieser Art von Diensten bestehen hinsichtlich der Architektur keine Größeneinschränkungen.
Erwartungsgemäß wächst eine Internetsite immer weiter, und eingebaute Beschränkungen, die anfangs zu hoch
erscheinen, reichen irgendwann nicht mehr aus und müssen mithilfe von Ressourcen neu festgelegt werden, die
zum Steigern der Siteleistung dienen. Als MSN Hotmail von Microsoft erworben wurde, existierten 9 Millionen
Konten, inzwischen sind es über 110 Millionen Konten. Während der Standarddatenfluss im Wesentlichen
unverändert ist, sind bezüglich der Skalierung der Software- und Hardwarearchitektur entscheidende
Änderungen vollzogen worden.
MSN Hotmail besteht aus mehreren Modulen, wobei jedes Modul in verschiedenen Duplikaten vorliegt und
beinahe unbegrenztes Skalieren möglich ist. Die Front-End-Webserver beinhalten die gesamte Logik der
Benutzeroberfläche und einen Teil der Unternehmenslogik. Der Großteil dieser Server führt bei jedem
Mausklick irgendeinen Generierungscode für Seiten aus. Einige Server bedienen statischen Inhalt. Die
Verwaltung dieser Server verwendet dieselben Methoden wie die Front-End-Server. Die Anzahl der Front-EndServer beläuft sich auf über 5.700, die alle identisch konfiguriert sind. Für die Verwaltung der Site ist es wichtig,
dass die Server im Wesentlichen identisch sind. Hinsichtlich der Hardware gelten andere Regeln - nach dem
Einrichten der Hardwarekonfiguration ist es einfacher, Rollouts von Kopien ausführen, als ein neueres Modell zu
qualifizieren.
Bei einem solchen Umfang werden die Systemkosten durch verschiedene Dinge beeinflusst. Das Hinzufügen
eines VGA-Monitors oder eines zweiten Netzwerkadapters zu einem Server oder das Anschließen eines seriellen
Kabels an einen Server ist für einen einzelnen Computer möglicherweise sehr kostengünstig. Beim Erwerb
Tausender derartiger Geräte handelt es sich jedoch bereits um eine bedeutende Investition, für die überzeugende
Gründe vorliegen sollten. Bei einem Dienst war das serielle Netzwerk für die Out-of-Band-Verwaltung für jeden
Anschluss teurer als das Netzwerk für den 100 Mbit/s umfassenden Inhalt.
Remoteverwaltung
Das Verhältnis von Administratoren zu Servern war bei den untersuchten Sites im Normalfall sehr gering
(beispielsweise war bei einer Site ein Administrator jeweils für 250 Computer zuständig). Ein Modell mit einem
Verhältnis von 1:1 ist nicht realisierbar. Abgesehen davon ist das Verwaltungspersonal häufig geografisch von
den Computern getrennt. Deshalb muss alles außer der physischen Installation und der Reparatur automatisch
erfolgen und mit einer Remoteverwaltung ausführbar sein. Im Allgemeinen sollten Computer sich selbst
überwachen und Fehler beheben. Entweder bedienen sie Seiten, oder sie sind nicht aktiv. Wenn die Anzahl der
nicht aktiven Computer einen gewissen Schwellenwert übersteigt (i. d. R. 5-10 % eines Clusters), ergreift ein
Administrator einfache Schritte, um den Computer zu reparieren. Oft ist es einfacher (und kostengünstiger), neue
Abbilder der Computer zu erstellen oder diese zu ersetzen, als das Problem vollständig zu diagnostizieren.
Nach dem Aufbau und dem Verkabeln eines Computers kann das Betriebspersonal einen Start ohne Diskette
ausführen, ein aktuelles Betriebssystem sowie Anwendungssoftware laden und den neuen Computer zum Dienst
hinzufügen. Der Computer selbst wird danach nur noch angerührt, wenn bei einer der Hardwarekomponenten ein
Fehler auftritt oder wenn er zu einem späteren Zeitpunkt gegen ein neueres Modell ausgetauscht wird. Vorgänge
unterliegen einer Remoteüberwachung, d. h., die gesamte Verwaltung erfolgt über Remoteshells und das
Erstellen von Skripts. Aktualisierungen werden mithilfe von Tools zur Softwarereplikation gleichzeitig an alle
aktiven Computer weitergeleitet. Featureaktualisierungen werden inkrementell angewendet.
Zum Verwalten einer großen Site muss das Verwalten aller Komponenten von einer einzigen Remotekonsole aus
möglich sein, wobei RACS und RAPS als Entitäten behandelt werden sollten. Alle Geräte und Dienste sollten
Ausnahmeereignisse generieren, die von einem automatischen Operator gefiltert werden. Die Betriebssoftware
behandelt normale Ereignisse, fasst sie zusammen und hilft dem Operator beim Verwalten von
Ausnahmeereignissen wie dem Nachverfolgen des Reparaturprozesses und dem Verwalten des Farmwachstums
und der Entwicklung. Die Betriebssoftware erkennt die Fehler und koordiniert die Reparatur.
Die Herausforderungen wachsen exponentiell, wenn die Anfrageverarbeitung sich auf mehrere funktionelle
Stufen erstreckt. Automatische Vorgänge vereinfachen das Verwalten der Farm, aber bei der Sicherstellung der
Siteverfügbarkeit spielen sie eine noch wichtigere Rolle. Das Automatisieren verringert die Anzahl manueller
Verfahrensweisen und vermindert das Risiko eines Operatorfehlers. Bei der Software und auch bei den
Hardwarekomponenten müssen Onlinewartung und Ersetzungen zugelassen sein. Tools zum Unterstützen der
Bereitstellung neuer Softwareversionen und für das Staging (Vorbereiten) innerhalb einer Site werden benötigt,
damit der Aktualisierungsprozess geregelt verläuft. Dies gilt sowohl für die Anwendungs- als auch die
Systemsoftware. Einige große Internetsites stellen wöchentlich oder sogar täglich Anwendungsänderungen
bereit.
Für den Remotezugriff auf Computer können Terminaldienste verwendet werden. Andere
Remoteverwaltungskonsolen wie Virtual Network Computing (VNC), eine Remotekonsole von AT&T, oder PCAnywhere ermöglichen Remotedebuggen und Remotevorgänge von nahezu jeder Plattform.
Skripterstellung, Leistungsüberwachung und Optimierung
Beim Verwalten einer Site mit mehreren Tausend Computern sind Tools, bei denen eine Skripterstellung
möglich ist, gegenüber einem GUI-Tool (Graphical User Interface, grafische Benutzeroberfläche), bei dem dies
nicht möglich ist, zu bevorzugen. Bei der Messaginginfrastruktur der Internetdienste ist diese Bewertung
besonders offensichtlich. Nur eine der besuchten Sites verwendet das computerübergreifende DCOM
(Distributed Component Object Model). Sogar Sites, die Kommunikationsmuster wie den Remoteprozeduraufruf
(Remote Procedure Call, RPC) und proprietäre Software verwenden, verwenden das einfache Weiterleiten von
Nachrichten. Befehlszeilentools haben den Vorteil, dass sie sofort skriptfähig sind. In einigen Fällen können
auch für Tools ohne Befehlszeile Skripts erstellt werden, wie beispielsweise für Windows Scripting Host.
Bei Sites mit Hunderten von Computern sind Filter-, Warn- und Visualisierungstools ein absolutes Muss. Bei
einem Schwellenwert von mehr als ein paar Dutzend Computern sind Visualisierungstools zum Filtern von
Auffälligkeiten, zum Erkennen wichtiger Ereignisse und zum Beurteilen des Servicestatus erforderlich. Zudem
sind geeignete Messtools wichtig. Ein Administrator muss jedes Ereignis protokollieren können, aber u. U. muss
er die Ereignisdaten ändern, wenn sich die Anforderungen ändern. Einige der Selbsttest- und
Überwachungsfeature der Server werden von benutzerdefinierten Vorgängen (i. d. R. Skripts) und in
vordefinierten Intervallen ausgeführt. Diese Intervalle können Zeiträume von einer Minute bis zu einer Woche
umfassen.
Bei den untersuchten Internetdiensten werden umfassendes Protokollieren und zählerbasiertes Überwachen und,
soweit möglich, Remoteverwaltung verwendet, um eine permanente Verfügbarkeit sicherzustellen und Daten zur
Verbesserung der Infrastruktur bereitzustellen. Neben der Remoteverwaltung wird bei diesen Sites auch
Remoteüberwachung verwendet. Die Leistungsüberwachung erfolgt entweder durch Serverabfragen oder
automatisch. Auf jedem Server steht für dieses Überwachen ausreichend freier Netzwerkplatz zur Verfügung, so
dass der primäre Vorgang nicht beeinträchtigt wird.
Der Entwickler muss Laufzeitinstrumentation hinzufügen. Die Quellen für die Daten der Laufzeitinstrumentation
dienen zwei unterschiedlichen Zwecken: dem Unterstützen der Zustandsüberwachung des aktuellen Systems und
dem Nachvollziehen des Systemverhaltens während tatsächlicher Onlinevorgänge. Ein besseres Verständnis des
aktuellen Systems erhöht die Möglichkeit einer Verbesserung der Implementierung. Bei den erfolgreichsten
Diensten wurden umfassende Überwachungs- und Protokollierungsfunktionen in die Architektur integriert.
Integrierte Verwaltungsfunktionen
Das Integrieren aller Schichten der Dienstentwicklung und -verwaltung hat drei wichtige Vorteile. Zum einen
werden so verschiedene Abwehrschichten für die Sicherheit und die Fehlertoleranz geboten. Zum anderen liefert
es umfassende Optimierungsmöglichkeiten, da Probleme dort gelöst werden können, wo es am einfachsten ist.
Wenn eine Lösung nicht das gewünschte Ergebnis liefert, kann das Problem häufig auf einer anderen
Systemschicht behoben werden. Zudem wird durch das Integrieren das Teamgefühl gestärkt, denn das gesamte
Team arbeitet zusammen. Probleme können leicht und ohne die Hilfe Dritter gelöst werden.
Die folgenden Zitate aus einer der Sites stehen als Beispiele für den Umgang mit Entwicklung und Vorgängen:


"Die Anwendung kann sich nicht selbst schützen, deshalb fügen wir Schutz (in Form von
Paketfilterung) auf der Netzwerkschicht hinzu. Der Host kann sich möglicherweise selbst schützen,
falls beim Host jedoch ein Fehler auftritt, muss der Netzwerkschutz vorhanden sein."
"Die softwaregestützte Methode für den Lastenausgleich bietet uns grundlegendes Dienstrouting. Unser
Netzwerkteam wird größtenteils Switches zur Netzwerkstruktur hinzufügen, um das vorhandene
Dienstrouting zu erweitern."
Der monitorlose Betrieb bei diesen Systemen und die Tatsache, das sie an einem Remotestandort stehen, hat
einen großen Einfluss auf die Verwaltung der Systeme. Monitorloser Betrieb bedeuten, dass jede direkte
Interaktion über eine Remotesitzung (Telnet oder Terminaldienste) erfolgt. Es ist keine Person zum Erkennen
eines wichtigen Dialogfeldes auf der Konsole vor Ort, und nicht einmal ein STOP-Fehler ist offensichtlich. Der
Remotebetrieb beinhaltet, dass der Zugriff auf einen Computer mit bestimmten Kosten verbunden ist. Die Sites
werden häufig von beauftragten Unternehmen bedient, deren Aufgabe sich darauf beschränkt, ausgefallene
Server zu ersetzen und auf Anfrage Neustarts auszuführen. Auch wenn es möglich ist, einen Monitor und eine
Tastatur an ein ausführendes System anzuschließen, stellt dies doch eine Ausnahme dar.
Personal
Bei der Einführung einer großen Internetsite werden vor allem Architekten und Entwickler mit fundierten
Kenntnissen in verteilter Datenverarbeitung benötigt. Zum Sicherstellen einer hohen Verfügbarkeit reicht auch
eine große Anzahl von Entwicklern und Architekten nicht aus, nur besonders fachkundiges Betriebspersonal
kann diese Verfügbarkeit sicherstellen. Beim Entwickeln eines großen Internetdienstes spielen die
Anforderungen, die durch die betriebsbedingten Einschränkungen an den Dienst gestellt werden, eine ebenso
wichtige (oder vielleicht sogar eine größere) Rolle wie die durch die Endbenutzer gestellten Anforderungen.
In der Umgebung der dedizierten PC-Hardware, in der eine große Anzahl von Ressourcen zur Verfügung steht,
haben Entwickler sich häufig weniger um eine leichte Handhabung als um für den Endbenutzer erkennbare
Anwendungsfeatures bemüht. Bei einem Internetdienst spielen eine unkomplizierte Verwaltung, eine einfache
Handhabung bei der Konfiguration sowie permanente Statusüberwachung und Fehlererkennung eine ebenso
wichtige Rolle wie alle anderen Anwendungsfeatures. Deshalb müssen Entwickler den Kontext, in dem ein
Dienst bereitgestellt und ausgeführt wird, vollständig verstehen.
Andererseits muss das Betriebspersonal alle Partitionierungsschemas, Verwaltungstools und
Kommunikationsmuster verstehen, die für den Dienst und dessen Laufzeitpräsenz im Web charakteristisch sind.
Da in erster Linie die Betreiber für die Aufrechterhaltung des Dienstes sorgen, sind sie diejenigen, die sich am
häufigsten an die Entwickler wenden. Es muss unbedingt bekannt sein, dass Entwickler Code und Betreiber den
Prozess erstellen. Ebenso wie für einen Dienst gute Entwickler benötigt werden, sind zum Erstellen geeigneter
Prozesse auch gute Betreiber erforderlich. Der Code ist zwar die wichtigste Komponente der Produkte, aber die
wichtigste Komponente der Dienste sind die Prozesse.
Je größer ein Unternehmen wird, desto wichtiger wird das genaue Dokumentieren von Prozessen und
Prozeduren, die von Tools unterstützt werden. In einer Produktionsumgebung spielen Kommunikation und
Koordination eine sehr wichtige Rolle. In den meisten Fällen ist eine unsachgemäße Handhabung (meistens
aufgrund von Kommunikationsproblemen) der häufigste oder zweithäufigste Grund der für den Kunden
offensichtlichen Dienstausfälle.
Betreiber sind nicht nur Kunden, sie müssen auch eng mit den Entwicklern zusammenarbeiten. Das
Betriebspersonal muss nicht nur an der Entwicklung, sondern auch an der Bereitstellungsplanung des Dienstes
beteiligt werden. Während die Entwickler den Dienstcode erstellen, erstellen die Betreiber (manchmal
gemeinsam mit den Entwicklern) die Prozesse, durch die die permanente Funktionsfähigkeit des Dienstes
ermöglicht wird. Oberstes Ziel der Entwickler sollte es sein, die Arbeit der Betreiber zu erleichtern
Bei den größten und erfolgreichsten der für das vorliegende Whitepaper untersuchten Dienste sind die Betreiber
intensiv an der Produktentwicklung beteiligt. Die Betreiber probieren Feature häufig schon in ein oder sogar
zwei Vorabversionen vor der eigentlichen Softwareversion aus. Mindestens in einem Fall beurteilten die
Betreiber die Skalierbarkeit eines bestimmten Features als unzureichend, lange bevor die Entwickler zu dem
gleichen Ergebnis gelangten.
Die Dienstarchitektur sollte von den Betreibern nicht nur oberflächlich verstanden werden. Bei zwei Sites haben
die Betreiber den Dienst während eines ernsten Betriebsproblems wiederholt aufrechterhalten, da sie ihre
Kenntnisse in Bezug auf die Systemarchitektur einsetzen konnten. Dabei wurden Features teilweise in einer
Weise genutzt, die von den Entwicklern gar nicht vorgesehen war.
Auswahl des Betriebssystems für den Server:
Windows 2000 Server
Während anfangs keiner der untersuchten Internetdienste zur Verwendung von Windows 2000 entwickelt wurde,
wurde bei all diesen Diensten zu einem späteren Zeitpunkt der Großteil der oder sogar alle Server entsprechend
aktualisiert oder nach Windows 2000 migriert (MSN Hotmail führt Windows 2000 auf den Front-End-Servern
aus). Wenn Windows 2000 als Basisbetriebssystem für besonders große Internetdienste verwendet wird, wird für
eine optimale Leistung das Deaktivieren nicht benötigter Dienste und das Installieren möglichst weniger
Optionen empfohlen.
Bei der Entwicklung von Windows stehen viele Ressourcen zur Verfügung. Windows weist mit hoher
Wahrscheinlichkeit eine größere Komplexität als die freien Unix-Verteilungen auf und bietet bei korrekter
Verwendung eine effektive Lösung. (Die Herausforderung besteht darin, den Administratoren dies verständlich
zu machen.)
Die Entwicklungsplattform von Windows 2000, insbesondere Visual Studio, bietet gegenüber anderen
Plattformen einen großen Vorteil. Die Leistungsfähigkeit von Visual Studio auf FreeBSD ist besonders hoch,
obwohl auch Solaris und Linux einige leistungsfähige Tools beinhalten. Auch die hervorragende
Entwicklungsplattform hat einen positiven Einfluss auf den Betrieb. Windows 2000 bietet wohl auch eine
bessere Überwachungsinfrastruktur als die eher elementaren Tools zum Erstellen von Ereignisberichten und zur
Leistungsüberwachung von UNIX. Windows 2000 bietet eine Reihe leistungsstarker integrierter Features zur
Ereignisprotokollierung und Leistungsüberwachung. Beachten Sie, dass diese mit Bedacht verwendet werden
sollten, denn besonders die Ereignisprotokollierung verursacht Personal- und Systemkosten, die berücksichtigt
werden sollten.
Mithilfe besserer Tools für die Entwicklung und das Debuggen können Features schneller entwickelt werden und
Leistungsengpässe schneller und besser erkannt werden. Im Allgemeinen sind die für die Entwicklung der
MSN Hotmail-Site zuständigen Mitarbeiter wesentlich zufriedener und produktiver, wenn sie zur Erstellung der
Codebasis für die Front-End-Server eine moderne interaktive Entwicklungsumgebung verwenden. Sie berichten,
dass Sie das Verwenden des WindDBG-Debuggers (im Lieferumfang von Windows 2000 enthaltener Debugger
für Betriebssysteme) in einer aktiven Site zum Nachverfolgen und Diagnostizieren von auftretenden Problemen
in Echtzeit als effektiver bewerten, als beispielsweise GDB an einen vorübergehenden CGI-Prozess anzuhängen
oder den Befehl printf zum Debuggen zu verwenden. Entwickler kamen zu dem Ergebnis, dass sie Fehler nun
innerhalb weniger Minuten und nicht erst nach Tagen identifizieren und beheben können. Durch das Verwenden
von IceCAP und Quantify können Entwickler und Betreiber die Leistung optimieren und tatsächlich
nachvollziehen, was der Code bewirkt, und haben somit eine bessere Kontrolle.
Das Installieren von UNIX auf einem PC ist insofern schwieriger, als ein besseres Wissen bezüglich der
Hardware erforderlich ist. Einer der Vorteile der Verwendung kommerzieller, vorkonfigurierter Betriebssysteme
besteht darin, dass die gesamte Verifizierung der Treiber bereits abgeschlossen ist. Es kann problemlos bestätigt
werden, dass die Hardware keine offensichtlichen Schwierigkeiten mit dem Betriebssystem hat und dass sie
daher bedenkenlos bereitgestellt werden kann. Auch im Hinblick auf die Leistung und die Kosten ist die
Verwendung von Windows 2000 Server zu empfehlen. Das CGI-Modell mit nur einem Prozess pro Socket ist
nicht besonders effektiv. Durch das Verschieben zu einer Anwendung mit mehreren Threads wird der Durchsatz
der einzelnen Computer wesentlich verbessert, und dadurch kann die Anzahl der Computer pro Site verringert
werden.
Einer der wesentlichen Gründe, die für das Verschieben zu Windows 2000 sprechen, ist die
Internationalisierung. Windows 2000 enthält eine systemeigene Unterstützung des Unicode-Zeichensatzes, so
dass zum Unterstützen mehrerer Sprachen keine Codeseiten oder andere Problemumgehungen benötigt werden.
Die in Windows 2000 verfügbaren Softwaretools, die verschiedene lokalisierte Lösungen liefern, sind
vermutlich weiter entwickelt als die meisten UNIX-Systeme. Besonders bei Internetdiensten ist es wichtig, dass
das Lokalisieren von Sites unkompliziert und effektiv ist.
Beim Einrichten oder Aktualisieren einer großen Internetsite müssen Betreiber viele Computer gleichzeitig
bereitstellen. Dazu werden Abbilder der Software benötigt. Im Lieferumfang von Windows 2000 Server ist das
Dienstprogramm Sysprep enthalten, durch dessen Verwendung das Vorbereiten von Abbildern des
Betriebssystems vereinfacht wird. Nachdem mithilfe von Sysprep ein Abbild erstellt wurde, kann dieses unter
Verwendung von Ghost, ImageCast oder der Remoteinstallationsdienste (Remote Installation Services) verteilt
werden.
Schlussfolgerungen
Beim Verlagern des Interesses vom Produkt zu dienstleistungsorientierten Märkten müssen Entwickler und
Architekten ihre Einstellung ändern und sich vor allem auf die Verwaltbarkeit, Skalierbarkeit und Verfügbarkeit
konzentrieren. Die wichtigste Veränderung hinsichtlich der Einstellung und Vorgehensweise beim Erstellen und
Verwalten sehr großer Internetdienste ist die Erkenntnis, dass Internetdienste immer verfügbar sein müssen.
Durch diese Tatsache wird alles beeinflusst, von den anfänglichen Entwurfskriterien bis hin zu langfristigen
Aspekten im Zusammenhang mit der Verwaltung.
Weitere Informationen
Weitere Informationen zu den in diesem Whitepaper vorgestellten Technologien finden Sie in folgenden
Ressourcen:











Scalability Terminology: Farms, Clones, Partitions, and Packs: RACS and RAPS (englischsprachig)
Introducing Windows 2000 Clustering Technologies (englischsprachig)
Windows Clustering Technologies: Cluster Service Architecture (englischsprachig)
Network Load Balancing Technical Overview (englischsprachig)
Cluster Service and Load Balancing Products from Industry Partners (englischsprachig)
Internet Information Services 5.0 Technical Overview (englischsprachig)
Application Services Technical Overview (englischsprachig)
Microsoft Windows DNA Building Web Solutions (englischsprachig)
Monitoring Reliability and Availability of Windows 2000-based Server Systems (englischsprachig)
Windows DNA-Architekturmodell: Eine skalierbare Geschäftsobjektarchitektur mit höchster
Verfügbarkeit oder Architectural Design: A Scalable, Highly Available Business Object Architecture
(englischsprachig)
Microsoft SQL Server Home Site (englischsprachig)
Danksagung
Für die technische Beratung und das zur Verfügung gestellte Quellenmaterial danken wir:




Galen Hunt, Researcher, Microsoft Research
Steven Levi, Senior Researcher, Microsoft Research
David Brooks, Program Manager, US-BED Server OS
Jeremy Doig, Operations Manager, MSN Hotmail
Für Auszüge aus ihrem Dokument "Scalability Terminology: Farms, Clones, Partitions, and Packs: RACS and
RAPS" (englischsprachig) danken wir:




Bill Devlin, Group Manager, US-PACE
Jim Gray, Distinguished Engineer, Microsoft Research
Bill Laing, Architect, Microsoft Enterprise Server Products
George Spix, Architect, Microsoft Enterprise Server Products
© 2001 Microsoft Corporation. Alle Rechte vorbehalten.
Die in diesem Dokument enthaltenen Informationen stellen die behandelten Themen aus der Sicht der Microsoft
Corporation zum Zeitpunkt der Veröffentlichung dar. Da Microsoft auf sich ändernde Marktanforderungen
reagieren muss, stellt dies keine Verpflichtung seitens Microsoft dar, und Microsoft kann die Richtigkeit der hier
dargelegten Informationen nach dem Zeitpunkt der Veröffentlichung nicht garantieren.
Bei diesem Dokument handelt es sich um ein vorläufiges Dokument, das ausschließlich zu Informationszwecken
dient. MICROSOFT SCHLIESST FÜR DIESES DOKUMENT JEDE GEWÄHRLEISTUNG AUS, SEI SIE
AUSDRÜCKLICH ODER KONKLUDENT.
Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Unabhängig von
der Anwendbarkeit der entsprechenden Urheberrechtsgesetze darf ohne ausdrückliche schriftliche Erlaubnis der
Microsoft Corporation kein Teil dieses Dokuments für irgendwelche Zwecke vervielfältigt oder in einem
Datenempfangssystem gespeichert oder darin eingelesen werden, unabhängig davon, auf welche Art und Weise
oder mit welchen Mitteln (elektronisch, mechanisch, durch Fotokopieren, Aufzeichnen usw.) dies geschieht.
Microsoft Corporation kann Inhaber von Patenten oder Patentanträgen, Marken, Urheberrechten oder anderem
geistigen Eigentum sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments
gewährt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderem geistigen Eigentum,
es sei denn, dies wurde ausdrücklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation
vereinbart.
© 2001 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, Windows, Windows NT, ActiveX, Hotmail,
SQL Server und Visual Studio sind entweder eingetragene Marken oder Marken der Microsoft Corporation in
den USA und/oder anderen Ländern.
Weitere in diesem Dokument aufgeführte Produkt- oder Firmennamen können geschützte Marken ihrer
jeweiligen Inhaber sein.
Microsoft Corporation • One Microsoft Way • Redmond, WA 98052-6399 • USA
0601
1 Aufgrund der schnellen Veränderungen im Zusammenhang mit Internetdiensten sind die in diesem Dokument
genannten Zahlen zum Zeitpunkt der Veröffentlichung möglicherweise nicht mehr aktuell.
2 Bei der Verwendung von ASP.NET treten diese Probleme nicht auf.
Herunterladen