Webseiten pflegen mit Groupware, Webseiten hosten mit Apache - der Hybridansatz

Um Inhalte von Webseiten zu pflegen, bietet sich eine Groupware geradezu an: die existierende Umgebung, der etablierte Client mit ausreichender Textfunktionalität, erweiterte Workflow-Funktionen und die Rechtestrukturen unterstützen die Aufgabenteilung optimal.

Doch keiner der drei etablierten Groupware-Server ist gleichzeitig ein guter Webserver: gegen den IIS spricht die Plattformabhängigkeit, gegen Lotus Domino die Kosten und die Performance, gegen Groupwise die Bedeutung. Doch wer verlangt, dass die technische Basis der Groupware gleichzeitig der produktive Webserver sein muss? Im folgenden soll erläutert werden, wie sich Groupware und Webserver kombinieren lassen, um das beste aus beiden Welten zu verbinden.

Warum ein Groupware Server als Webserver Nachteile gegenüber beispielsweise einem Apache Webserver haben muss, wird klar, wenn man betrachtet, womit der Server seine Zeit bei Webanfragen verbringt. Als Beispiel soll hier der Lotus Domino Server dienen, ähnliche Szenarien lassen sich für andere Produkte ebenso skizzieren.

Öffnen Sie mit dem Browser eine beliebige Seite - ein Dokument - Ihres Domino Servers, werden folgende Aktionen ausgelöst:

  • Seite öffnen
    In einem ersten Schritt werden aus der URL die Datenbank, die Ansicht und das Dokument abgeleitet und in der Datenbank geöffnet. Wird die Datenbank, die Ansicht oder das Dokument nicht gefunden, entsteht der g efürchtete 404- Fehler mit unterschiedlichen Erläuterungen, was genau nicht gefunden werden konnte.
  • Datenbankberechtigungen
    Nun muss zunächst geprüft werden, ob der Anwender - entweder als authentifizierter Nutzer oder als "Anonymous" - über mindestens Leserechte in der Datenbank verfügt. Reichen die Rechte nicht aus, erscheint ein Login-Prompt; wird hier mehrfach eine ungültige Name/Kennwort-Kombination eingegeben, entsteht ein Fehler 403.
  • Ansichtsberechtigungen
    Darf die Datenbank durch den Anwender geöffnet werden, wird geprüft, ob dies auch für die aufgerufene Ansicht zutrifft. Analog zu den Datenbankberechtigungen führen unzureichende Rechte zu einem Login-Prompt.
  • Dokumentberechtigungen
    Lotus Domino erlaubt die Vergabe von Berechtigungen auf Feldebene. Somit muss für das Dokument und die enthaltenen Felder geprüft werden, ob Anwender auch hier über mindestens Leserechte verfügt.
  • Maske öffnen
    Sind die Berechtigungen ausreichend, muss zu dem Dokument, das bis zu diesem Zeitpunkt mit HTML in der Regel noch nichts zu tun hat, ein Layout gefunden werden. Die so genannten Masken enthalten die Layoutvorschriften für Dokumente; sie können wahlweise HTML, native Layoutelemente Dominos oder eine Mischform enthalten.
  • Dokument und Maske mischen
    Die Inhalte des Dokuments müssen nun mit den Layoutvorschriften der Maske kombiniert werden, indem die Felder mit den Inhalten gefüllt werden und mögliche Aktionen im Open-Event der Maske ausgeführt werden, beispielsweise um Abhängigkeiten zwischen Feldern des Dokuments und nur zur Anzeige berechneten Feldern herzustellen. Enthält die Maske Fehler, die durch Domino nicht abgefangen werden können, entsteht ein sehr unangenehmer Serverfehler 500 - unangenehm deswegen, weil keinerlei weitere Informationen geliefert werden (außer einem Log-Eintrag) und die Fehlersuche entsprechend mühselig ist.
  • Übersetzung in HTML
    Im Anschluss muss die fertige Kombination aus Dokument und Layout in HTML übersetzt werden. Das kann recht schnell vonstatten gehen, wenn das Layout ausschließlich HTML und das Dokument nur einfache Feldtypen enthält, kann aber auch aufwändig sein, wenn das Dokument mehrere RichText-Felder und die Maske ebenfalls zu übersetzende Elemente beinhaltet.
  • HTML übertragen
    HTML übertragen
    Schließlich verfügt der Server über das, was der Browser erwartet: eine HTML-Seite. Diese wird via HTTP-Task an den Browser gesendet.
    Diese Aktionen sind bei jedem Aufruf eines Dokuments erforderlich. Zwar wird ein Teil der Informationen durch den Server im Cache zwischengespeichert und damit die Zugriffszeiten optimiert, dennoch ist eine gewisse Zeit und erst recht eine gewisse Prozessorleistung erforderlich.
    Experimente mit unterschiedlichen Masken und Dokumenten haben gezeigt, dass die Leistung eines Domino Servers schwer in möglichen Zugriffszahlen zu beziffern ist, weil die Grenzen des Servers stark von der Art der Elemente abhängig ist. Aber als Ergebnis lassen sich folgende Performance-begünstigende Aussagen ableiten:
  • dedizierte Masken für Web
    Der Domino Server verfügt zwar über die Möglichkeit, Masken, die für den Notes-Client entwickelt wurden, im Rahmen der Möglichkeiten HTMLs umzusetzen - das kostet aber Rechenzeit. Besser ist es, dedizierte Masken für beide Clients zu entwickeln und die Webmaske ausschließlich aus Pass-Thru-HTML aufzubauen. Das ist zwar zäh bei der Entwicklung, begünstigt aber die Performance der Übersetzung.
  • Verzicht auf RichText
    Das ist nicht immer möglich: schließlich ist RichText eine inhaltliche Anforderung und ein wesentliches Feature von Notes in Bezug auf die Anwender. Dennoch sollte in den Fällen, in denen Textfelder ausreichen und Formatierungen weder notwendig noch erwünscht sind, auf RichText verzichtet werden, denn die Übersetzung in HTML ist hier aufwändiger als bei Textfeldern.
  • @DBLookup / @DBColumn statt @DBSearch
    Diese Erkenntnis greift sehr tief in die Domino-Programmierung ein. Ein DBSearch durchsucht eine Datenbank nach bestimmten Kriterien. Dazu ist ein Zugriff auf die Daten erforderlich, einen Index gibt es gegebenenfalls nicht. DBLookup und DBColumn hingegen durchsuchen eine Ansicht, für die durch den Server der so genannte (gecachte) Ansichtsindex angelegt wird.
    Werden also Daten aus Dokumentsammlungen in Webseiten verwendet, bietet es sich an, die Obermenge als Vorauswahl in einer Ansicht zu definieren und zur Laufzeit ausschließlich auf diese Ansichten zuzugreifen.
Alternativ: Hybridmodus
Doch all diese Tricks bergen zum einen einen Mehraufwand auf Seiten der Entwicklung schaffen zudem zum Teil auch Unflexibilität. Zum anderen können sie das Performance-Problem zwar einschränken, aber nicht vermeiden: eine Domino-Website mit gesundem Traffic und dennoch guten Reaktionszeiten bleibt damit mit Hardwarekosten verbunden, die den Domino-Administrator neidisch zum Apache-Kollegen schielen lässt.
Das eigentliche Problem ist dabei aber nicht die Tatsache, dass so viele Aktionen für das Erstellen einer Seite erforderlich sind - schließlich sind Features wie die hohe Sicherheit und die annähernd uneingeschränkte Dynamik gewünscht. Die eigentliche Schwäche des Konzepts ist der Zeitpunkt dieser Aktionen und ihre Häufigkeit: Selbst Elemente einer Website wie Frameset, Navigator und Startseite durchlaufen beim Aufruf zur Laufzeit die beschriebenen Aktionen, obwohl sie sich seit dem letzten Aufruf (vor einer Zehntelsekunde ?) nicht geändert haben.
Für dynamische Webapplikationen, beispielsweise Extranet-Anwendungen, ist dieses Verfahren sinnvoll, weil sich ohnehin kaum zwei Seiten gleichen, wenn beispielsweise Händler ihre Lieferstati oder Außendienstmitarbeiter ihre Provisionen einsehen. Doch eine klassische Unternehmenswebsite besteht zuerst einmal aus einem großen Teil von Seiten, die anonymen Anwendern zugänglich sind und bei denen Performance in Hinsicht auf Akzeptanz eine große Rolle spielt. Für diese Seiten ist typisch, dass die Zahl der Zugriffe die Zahl der Änderungen deutlich übersteigt - ist dem bei Ihnen nicht so, heißt Ihr dringendstes Problem derzeit nicht Performance ...
Was liegt also näher, als die aufgeführten Aktionen nicht zum Zeitpunkt des Zugriffs, sondern bei jeder Änderung oder periodisch durchzuführen, sie quasi fertig zu "exportieren"? Zum einen reduziert sich damit aus den bereits angeführten Gründen die in Summe auszuführenden Aktionen, was wiederum eine Lastreduzierung des Servers mit sich bringt. Zum anderen passieren diese Aktionen nicht mehr zur Laufzeit, so dass die Seiten - wenn sie einmal berechnet sind - entsprechend schnell sind.
Da Lotus Domino und andere Groupware-Server diesen Modus nicht standardmäßig beinhalten, muss man sich Gedanken machen, welche Voraussetzungen eine Seite für einen solchen Mechanismus erfüllen muss:
  • Benutzerrechte
    Voraussetzung für den Export ist, dass die Zugriffsrechte auf alle beteiligten Elemente für "Anonymous" vorliegen. Lotus Domino kann seine Zugriffsstrukturen nicht auf Verzeichnisse mit HTML-Seiten anwenden, daher eignen sich vorerst nur Dokumente für "Anonymous" für den Export. Das betrifft aber zumindest bei Internetsites den Großteil der Seiten.
  • keine Echtzeit-Inhalte
    Eine zweite Bedingung ist naturgemäß, dass die Seite keine Echtzeit-Inhalte wie beispielsweise Echtzeitdaten aus anderen Systemen, z.B. Lagerbestände aus ERP-Systemen oder im Extremfall das aktuelle Höchstgebot einer Online-Auktion enthält.
    Hinzu kommt, dass einzelne Seiten Informationen über andere Dokumente enthalten können, beispielsweise eine Liste von Links zu den aktuellen Stellenanzeigen. In diesem Fall ändert sich der Inhalt der Seite, ohne dass die Seite selbst geändert wird - ein Fall, der berücksichtigt werden muss.
    Zusammenfassend lässt sich festhalten, dass es verschiedene Bedingungen gibt, die ein Dokument für den Export ungeeignet erscheinen lassen können - es ist somit sinnvoll, die Exportfunktion für jedes Dokument einzeln zu bestimmen, wenn dies auch für den Endanwender gegebenenfalls implizit geschieht, da er diese Entscheidung fachlich vielleicht gar nicht treffen kann und will.

Nun müssen alle entsprechend definierten Dokumente exportiert werden - dass heißt, dass die bereits aufgezählten Aktionen auf diese Dokumente angewendet werden müssen. Auf die Prüfung der Berechtigung kann verzichtet werden, wenn gesichert ist, dass nur Dokumente für "Anonymous" überhaupt das Exportflag führen können. Dies ist insofern sinnvoll, um die Last zum Zeit des kollektiven Exports zu reduzieren. Gegebenenfalls kann auf eine Validierung der Rechte sogar verzichtet werden, wenn die Zugriffsrechte auf anderer Ebene kontrolliert werden - doch dazu später.
Das Ergebnis wird jedoch nicht, wie zur Laufzeit, via HTTP-Task an einen Browser gesendet, sondern als fertige HTML-Seite im Filesystem des Servers abgelegt. So entsteht je nach Anteil der exportierten Seiten eine statische Kopie - ein "Schnappschuss" - der Site im Dateisystem.
Diese HTML-Seiten werden durch den Domino Server deutlich schneller gehostet, weil keinerlei dynamische Elemente mehr erforderlich sind - er verkommt zum statischen Webserver. Die mögliche Anzahl Zugriffe pro Sekunde auf eine Datei im Filesystem ist um den Faktor 2 höher als auf dieselbe Datei in einer Domino Datenbank. Diese Messung wurde anhand einer Grafikdatei durchgeführt, für deren Anzeige aus der Datenbank keinerlei Übersetzung in HTML erforderlich war - entsprechend höher wird der Performancevorsprung bei dynamisch berechneten Webseiten sein.

Dennoch erscheint der Gedanke, einen immerhin ziemlich teuren und nichtsdestotrotz performancehungrigen Groupware-Server als statischen Webserver einzusetzen, aus betriebswirtschaftlicher Sicht vergleichsweise unsinnig. Deswegen lässt sich der Exportgedanke noch einen Schritt verfeinern: Wenn der Domino Server die exportierten HTML-Seiten ohnehin in das Filesystem schreibt, kann er sie auch gleich in das Datenverzeichnis eines zweiten Webservers oder via FTP auf einen anderen Server übertragen. Er deligiert somit sämtliche exportierten, statischen Seiten an einen beliebigen anderen Webserver, beispielsweise an einen IIS, einen Apache oder auch einen Xitami (Freeware-Webserver mit gerade mal 150 KB Speicherverbrauch). Dieser kann dabei wahlweise auf der gleichen Maschine auf einem anderen IP-Port oder auf einer anderen Maschine mit einer eigenen IP-Adresse laufen.

Die Vorteile liegen klar auf der Hand: der Groupware-Server kann sich auf die dynamischen Seiten für geschlossene Benutzergruppen und Volltextsuche sowie den periodischen Export konzentrieren, während der statische Webserver das tut, wofür er optimiert ist - statische Websites hosten.
Treibt man das Spiel auf die Spitze, kann man die exportierten Seiten jetzt plötzlich mit Elementen ausstatten, die erst durch den Hybridserver interpretiert werden können, beispielsweise ASP: mit dieser Technologie kann der Domino Server nichts anfangen und exportiert somit die Anweisungen wie normalen HTML-Code mit. Wird die Seite auf einen IIS übertragen, kann dieser die darin enthaltene Intelligenz wieder ausführen. Inwieweit es sinnvoll ist, Dynamik mit zwei unterschiedlichen Technologien in der Site zu kombinieren, bleibt dahingestellt - möglich ist es jedenfalls. Zumindest im Interesse der Migration vorhandener ASP-Seiten auf eine Domino-Umgebung gewinnt man Zeit für die sukzessive Übernahme.
Darüber hinaus kann man beispielsweise die Verzeichnisse des Hybridservers durch die nativen Möglichkeiten des Servers mit Zugriffsrechten versehen. So lassen sich Seiten von Domino in ein zugriffsgeschütztes Apache-Verzeichnis exportieren - wenn auch die Rechte dann nicht mehr den Domino-Regeln gehorchen.

Doch dieser Ansatz birgt auch Nachteile: da für den Export die bereits erwähnten Voraussetzungen erfüllt sein müssen, besteht eine Site fast automatisch aus einer Mischung aus exportierten und dynamischen Seiten. Diese müssen untereinander verlinkt werden, beispielsweise muss die Volltextsuche, die ja auch über die Datenbankversionen der exportierten Seiten suchen kann, bei der Trefferübersicht zwischen exportierten und dynamischen Seiten unterscheiden und gegebenenfalls die IP-Adresse und/oder den Port der exportierten Elemente ergänzen. Die Verwaltung der Links wird somit ungleich komplexer und erfordert ein durchdachtes Konzept.
Auf Basis dieses Ansatzes wird derzeit ein Branchenportal realisiert, bei dem eine vorhandene AS/400 "nebenbei" für Export und Dynamik und ein Linux 2.4-System (mit Webserver im Kernel!) für das Hosting zuständig sein werden.
Ein ungewöhnlicher Ansatz birgt somit die Chance, das beste aus den Welten Groupware - verteilte, etablierte Umgebung, LDAP-konforme Rechtestrukturen, Dynamik, Integrationsmöglichkeiten etc. - und Webserver - Performance, Plattformunabhängigkeit, Lizenzkosten - zu kombinieren. Wenn auch der Aufwand aus Entwicklersicht hoch ist, überwiegen die Vorteile dieses Konzepts allein schon in Hinsicht auf Zukunftssicherheit: entwickeln oder kaufen Sie heute ein Web Content Management System für Lotus Domino, gewinnen Sie mit dem Hybridansatz die Reserve, die Sie bei unerwartetem Erfolg vielleicht brauchen!

Cookies erleichtern die Bereitstellung unserer Dienste. Mit Klick auf "Cookie zulassen" stimmen Sie der Nutzung unserer Dienste zu und erklären Sie sich damit einverstanden, dass wir Cookies verwenden. Hier finden Sie unsere Datenschutzerklärung

 

	object(Joomla\Registry\Registry)#52 (3) {
  ["data":protected]=>
  object(stdClass)#435 (84) {
    ["article_layout"]=>
    string(20) "uniorg:newsanpassung"
    ["show_title"]=>
    string(1) "1"
    ["link_titles"]=>
    string(1) "1"
    ["show_intro"]=>
    string(1) "1"
    ["info_block_position"]=>
    string(1) "0"
    ["show_category"]=>
    string(1) "0"
    ["link_category"]=>
    string(1) "0"
    ["show_parent_category"]=>
    string(1) "0"
    ["link_parent_category"]=>
    string(1) "0"
    ["show_author"]=>
    string(1) "0"
    ["link_author"]=>
    string(1) "0"
    ["show_create_date"]=>
    string(1) "0"
    ["show_modify_date"]=>
    string(1) "0"
    ["show_publish_date"]=>
    string(1) "1"
    ["show_item_navigation"]=>
    string(1) "0"
    ["show_vote"]=>
    string(1) "0"
    ["show_readmore"]=>
    string(1) "1"
    ["show_readmore_title"]=>
    string(1) "0"
    ["readmore_limit"]=>
    string(3) "100"
    ["show_tags"]=>
    string(1) "1"
    ["show_icons"]=>
    string(1) "0"
    ["show_print_icon"]=>
    string(1) "0"
    ["show_email_icon"]=>
    string(1) "0"
    ["show_hits"]=>
    string(1) "0"
    ["show_noauth"]=>
    string(1) "0"
    ["urls_position"]=>
    string(1) "0"
    ["show_publishing_options"]=>
    string(1) "1"
    ["show_article_options"]=>
    string(1) "1"
    ["save_history"]=>
    string(1) "0"
    ["history_limit"]=>
    int(10)
    ["show_urls_images_frontend"]=>
    string(1) "0"
    ["show_urls_images_backend"]=>
    string(1) "1"
    ["targeta"]=>
    int(0)
    ["targetb"]=>
    int(0)
    ["targetc"]=>
    int(0)
    ["float_intro"]=>
    string(4) "left"
    ["float_fulltext"]=>
    string(4) "left"
    ["category_layout"]=>
    string(6) "_:blog"
    ["show_category_heading_title_text"]=>
    string(1) "1"
    ["show_category_title"]=>
    string(1) "1"
    ["show_description"]=>
    string(1) "1"
    ["show_description_image"]=>
    string(1) "0"
    ["maxLevel"]=>
    string(1) "1"
    ["show_empty_categories"]=>
    string(1) "0"
    ["show_no_articles"]=>
    string(1) "1"
    ["show_subcat_desc"]=>
    string(1) "1"
    ["show_cat_num_articles"]=>
    string(1) "0"
    ["show_cat_tags"]=>
    string(1) "1"
    ["show_base_description"]=>
    string(1) "1"
    ["maxLevelcat"]=>
    string(2) "-1"
    ["show_empty_categories_cat"]=>
    string(1) "0"
    ["show_subcat_desc_cat"]=>
    string(1) "1"
    ["show_cat_num_articles_cat"]=>
    string(1) "1"
    ["num_leading_articles"]=>
    string(1) "1"
    ["num_intro_articles"]=>
    string(1) "7"
    ["num_columns"]=>
    string(1) "1"
    ["num_links"]=>
    string(1) "0"
    ["multi_column_order"]=>
    string(1) "0"
    ["show_subcategory_content"]=>
    string(1) "0"
    ["show_pagination_limit"]=>
    string(1) "1"
    ["filter_field"]=>
    string(4) "hide"
    ["show_headings"]=>
    string(1) "1"
    ["list_show_date"]=>
    string(1) "0"
    ["date_format"]=>
    string(0) ""
    ["list_show_hits"]=>
    string(1) "1"
    ["list_show_author"]=>
    string(1) "1"
    ["orderby_pri"]=>
    string(5) "order"
    ["orderby_sec"]=>
    string(5) "rdate"
    ["order_date"]=>
    string(9) "published"
    ["show_pagination"]=>
    string(1) "1"
    ["show_pagination_results"]=>
    string(1) "0"
    ["show_featured"]=>
    string(4) "show"
    ["show_feed_link"]=>
    string(1) "1"
    ["feed_summary"]=>
    string(1) "0"
    ["feed_show_readmore"]=>
    string(1) "0"
    ["show_page_heading"]=>
    string(1) "0"
    ["layout_type"]=>
    string(4) "blog"
    ["menu_text"]=>
    string(1) "1"
    ["page_title"]=>
    string(21) "UNIORG | Press Review"
    ["secure"]=>
    string(1) "0"
    ["page_description"]=>
    NULL
    ["page_rights"]=>
    NULL
    ["robots"]=>
    NULL
    ["page_heading"]=>
    string(21) "UNIORG | Press Review"
  }
  ["initialized":protected]=>
  bool(true)
  ["separator"]=>
  string(1) "."
}