Performance-beeinflussende Dimensionen

      Performance-beeinflussende Dimensionen

          Performance-beeinflussende Dimensionen

              Performance-beeinflussende Dimensionen

                  Performance-beeinflussende Dimensionen

                      Performance-beeinflussende Dimensionen

                          Performance-beeinflussende Dimensionen

                              Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

                              Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

                              Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

                              Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

                              Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

                              Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

                              • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
                              • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
                              • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

                              Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

                              Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

                              Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

                              Interaktionen

                              Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

                              Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
                              <Rule id="1100028172564" rating="negative">
                                <DiscAtt cmp="unequal" type="category" value="action"/>
                                <DiscAtt cmp="unequal" type="medium" value="bild"/>
                                <DiscAtt cmp="unequal" type="category" value="scifi"/>
                                <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
                              </Rule>

                              darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

                              In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

                              Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

                              <aco:MetaInformation>....<aada:Logic>
                              <aada:Switch>
                              <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
                              <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
                              </aada:Logic>...</aco:MetaInformation>

                              Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

                              Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                              Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                              Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

                              Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

                              Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

                              Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

                              Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

                              Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

                              Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

                              Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

                              <map:global-variables>   
                              <skin>web/images/portal/</skin>   
                              <files>web/portal/</files>   
                              <trans>web/xsl/</trans>
                              </map:global-variables>

                              welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

                          Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

                          Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

                          Nutzerzahlen

                          Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

                          Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

                          Serverleistung

                          Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

                          Adaptivität der Anwendung

                          Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

                          • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
                          • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
                          • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

                          Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

                          Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

                          Dokumentengröße

                          Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

                          Interaktion

                          Interaktionen

                          Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

                          Regeln

                          Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
                          <Rule id="1100028172564" rating="negative">
                            <DiscAtt cmp="unequal" type="category" value="action"/>
                            <DiscAtt cmp="unequal" type="medium" value="bild"/>
                            <DiscAtt cmp="unequal" type="category" value="scifi"/>
                            <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
                          </Rule>

                          darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

                          Logiken

                          In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

                          Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

                          <aco:MetaInformation>....<aada:Logic>
                          <aada:Switch>
                          <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
                          <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
                          </aada:Logic>...</aco:MetaInformation>

                          Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

                          Verwendeter Interpret

                          Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                          Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                          Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

                          Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

                          Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

                          Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

                          Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

                          Zusammenfassung

                          Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

                          Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

                          Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

                          <map:global-variables>   
                          <skin>web/images/portal/</skin>   
                          <files>web/portal/</files>   
                          <trans>web/xsl/</trans>
                          </map:global-variables>

                          welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

                      Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

                      Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

                      Nutzerzahlen

                      Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

                      Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

                      Serverleistung

                      Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

                      Adaptivität der Anwendung

                      Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

                      • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
                      • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
                      • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

                      Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

                      Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

                      Dokumentengröße

                      Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

                      Interaktion

                      Interaktionen

                      Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

                      Regeln

                      Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
                      <Rule id="1100028172564" rating="negative">
                        <DiscAtt cmp="unequal" type="category" value="action"/>
                        <DiscAtt cmp="unequal" type="medium" value="bild"/>
                        <DiscAtt cmp="unequal" type="category" value="scifi"/>
                        <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
                      </Rule>

                      darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

                      Logiken

                      In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

                      Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

                      <aco:MetaInformation>....<aada:Logic>
                      <aada:Switch>
                      <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
                      <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
                      </aada:Logic>...</aco:MetaInformation>

                      Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

                      Verwendeter Interpret

                      Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                      Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                      Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

                      Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

                      Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

                      Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

                      Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

                      Zusammenfassung

                      Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

                      Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

                      Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

                      <map:global-variables>   
                      <skin>web/images/portal/</skin>   
                      <files>web/portal/</files>   
                      <trans>web/xsl/</trans>
                      </map:global-variables>

                      welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

                  Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

                  Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

                  Nutzerzahlen

                  Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

                  Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

                  Serverleistung

                  Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

                  Adaptivität der Anwendung

                  Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

                  • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
                  • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
                  • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

                  Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

                  Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

                  Dokumentengröße

                  Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

                  Interaktion

                  Interaktionen

                  Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

                  Regeln

                  Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
                  <Rule id="1100028172564" rating="negative">
                    <DiscAtt cmp="unequal" type="category" value="action"/>
                    <DiscAtt cmp="unequal" type="medium" value="bild"/>
                    <DiscAtt cmp="unequal" type="category" value="scifi"/>
                    <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
                  </Rule>

                  darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

                  Logiken

                  In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

                  Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

                  <aco:MetaInformation>....<aada:Logic>
                  <aada:Switch>
                  <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
                  <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
                  </aada:Logic>...</aco:MetaInformation>

                  Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

                  Verwendeter Interpret

                  Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                  Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

                  Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

                  Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

                  Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

                  Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

                  Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

                  Zusammenfassung

                  Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

                  Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

                  Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

                  <map:global-variables>   
                  <skin>web/images/portal/</skin>   
                  <files>web/portal/</files>   
                  <trans>web/xsl/</trans>
                  </map:global-variables>

                  welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

              Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

              Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

              Nutzerzahlen

              Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

              Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

              Serverleistung

              Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

              Adaptivität der Anwendung

              Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

              • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
              • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
              • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

              Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

              Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

              Dokumentengröße

              Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

              Interaktion

              Interaktionen

              Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

              Regeln

              Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
              <Rule id="1100028172564" rating="negative">
                <DiscAtt cmp="unequal" type="category" value="action"/>
                <DiscAtt cmp="unequal" type="medium" value="bild"/>
                <DiscAtt cmp="unequal" type="category" value="scifi"/>
                <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
              </Rule>

              darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

              Logiken

              In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

              Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

              <aco:MetaInformation>....<aada:Logic>
              <aada:Switch>
              <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
              <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
              </aada:Logic>...</aco:MetaInformation>

              Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

              Verwendeter Interpret

              Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

              Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

              Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

              Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

              Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

              Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

              Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

              Zusammenfassung

              Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

              Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

              Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

              <map:global-variables>   
              <skin>web/images/portal/</skin>   
              <files>web/portal/</files>   
              <trans>web/xsl/</trans>
              </map:global-variables>

              welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

          Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

          Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

          Nutzerzahlen

          Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

          Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

          Serverleistung

          Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

          Adaptivität der Anwendung

          Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

          • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
          • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
          • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

          Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

          Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

          Dokumentengröße

          Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

          Interaktion

          Interaktionen

          Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

          Regeln

          Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
          <Rule id="1100028172564" rating="negative">
            <DiscAtt cmp="unequal" type="category" value="action"/>
            <DiscAtt cmp="unequal" type="medium" value="bild"/>
            <DiscAtt cmp="unequal" type="category" value="scifi"/>
            <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
          </Rule>

          darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

          Logiken

          In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

          Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

          <aco:MetaInformation>....<aada:Logic>
          <aada:Switch>
          <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
          <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
          </aada:Logic>...</aco:MetaInformation>

          Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

          Verwendeter Interpret

          Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

          Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

          Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

          Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

          Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

          Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

          Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

          Zusammenfassung

          Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

          Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

          Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

          <map:global-variables>   
          <skin>web/images/portal/</skin>   
          <files>web/portal/</files>   
          <trans>web/xsl/</trans>
          </map:global-variables>

          welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

      Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

      Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

      Nutzerzahlen

      Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

      Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

      Serverleistung

      Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

      Adaptivität der Anwendung

      Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

      • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
      • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
      • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

      Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

      Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

      Dokumentengröße

      Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

      Interaktion

      Interaktionen

      Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

      Regeln

      Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
      <Rule id="1100028172564" rating="negative">
        <DiscAtt cmp="unequal" type="category" value="action"/>
        <DiscAtt cmp="unequal" type="medium" value="bild"/>
        <DiscAtt cmp="unequal" type="category" value="scifi"/>
        <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
      </Rule>

      darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

      Logiken

      In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

      Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

      <aco:MetaInformation>....<aada:Logic>
      <aada:Switch>
      <aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
      <aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
      </aada:Logic>...</aco:MetaInformation>

      Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

      Verwendeter Interpret

      Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

      Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

      Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

      Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

      Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

      Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

      Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

      Zusammenfassung

      Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

      Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

      Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

      <map:global-variables>   
      <skin>web/images/portal/</skin>   
      <files>web/portal/</files>   
      <trans>web/xsl/</trans>
      </map:global-variables>

      welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.

Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.

Nutzerzahlen

Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.

Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.

Serverleistung

Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.

Adaptivität der Anwendung

Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:

  • Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
  • Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
  • Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.

Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.

Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.

Dokumentengröße

Da in den meisten Pipeline-Transformatoren aus dem Request-Input zun&auml;chst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschr&auml;nkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verh&auml;ltnis grunds&auml;tzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.

Interaktion

Interaktionen

Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event- bzw. trainCDL4-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.

Regeln

Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
  <DiscAtt cmp="unequal" type="category" value="action"/>
  <DiscAtt cmp="unequal" type="medium" value="bild"/>
  <DiscAtt cmp="unequal" type="category" value="scifi"/>
  <DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>

darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.

Logiken

In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.

Sie werden durch den Tag <aada:Logic> eingeleitet, können if-Zweige, switch- bzw. trinary-Anweisungen enthalten und ebenfalls rekursiv auftreten.

<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>

Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic - Transformators (früher Adaption.xsl) statt.

Verwendeter Interpret

Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

Gegenüberstellung verschiedener XSLT-Interpreten auf verschiedenen Systemen. Sie zeigt Gregor Leistungsergebnisse, die durch den XSLTMark Benchmark im Vergleich mit anderen bekannten XSLTLoesungen für Java erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.

Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.

Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.

Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].

Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.

Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.

Zusammenfassung

Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.

Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.

Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form

<map:global-variables>   
<skin>web/images/portal/</skin>   
<files>web/portal/</files>   
<trans>web/xsl/</trans>
</map:global-variables>

welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.

top