White Paper: cpIApp
Manfred Rebentisch
June 18, 2006
Kurzbeschreibung
Dieses Dokument beschreibt das Internet Application Framework von COMPARAT,
mit dem performante, sichere und ressourcenschonende Anwendungen
für Internet oder Intranet entwickelt werden
können.
cpIApp ist eine Bibliothek und ein
Apache-Modul für die direkte Integration mit dem
Apache Webserver der Apache-Foundation.
A COMPARAT Technical White Paper
Manfred Rebentisch
Juni 2005, Juni 2006
Das Copyright zur Verbreitung dieses Dokuments liegt bei der
COMPARAT Software-Entwicklungs-GmbH
Prießstraße 16
23558 Lübeck
Telefon: 0451/4795660, Fax: 0451/4795662
E-Mail: info@comparat.de
Der Autor Manfred Rebentisch ist
Geschäftsführer und Chef-Entwickler
bei COMPARAT. Er ist unter mrebentisch@comparat.de direkt
erreichbar.
Einleitung
Das Internet Application Framework cpIApp ist eine Entwicklung
der COMPARAT Software-Entwicklungs-GmbH. Mit dem cpIApp
können Software-Entwickler äußerst
performante, effiziente und sichere Serveranwendungen
für Internet-Applikationen erstellen.
cpIApp besteht aus zwei C-Bibliotheken und einem Modul
für den Apache-Webserver. Eine Internet-Anwendung
wird als Bibliothek erstellt und vom Apache-Modul eingebunden.
Mit cpIApp lassen sich Plattformen wie Wikis (z.B.
http://de.wikipedia.org/), Community-Sites (z.B.
http://www.xing.com), E-Shops und Spezialsysteme entwickeln. Auch
einfache Anwendungen und Websites können damit
entwickelt werden, zum Beispiel unsere eigene Website
http://www.comparat.de (seit Juli 2005).
Vorteile und Besonderheiten
Das cpIApp ist vollständig in 'C' programmiert, mit einem C++-Interface für Web-Anwendungen.
Entgegen dem Trend, PHP oder Java für
Internet-Applikationen einzusetzen, wurde cpIApp
bewußt auf folgende Leistungsmerkmale getrimmt:
- Höchste Ausführungsgeschwindigkeit für die Request-Verarbeitung.
- Minimaler Ressourcenverbrauch auf dem Server, damit tausend und
mehr Anfragen pro Sekunde gleichzeitig bearbeitet werden
können.
- Höchste Sicherheit gegen Hackerangriffe und
Bedienungsfehler.
- Flexible Anpassung an heterogene IT-Landschaften (z.B.
Integration von alten Legacy-Anwendungen).
- Schnelle Entwicklung von Internet-Applikationen (vergleichbar
mit Java oder PHP).
- Unterstützung mehrsprachiger Anwendungen durch
XML-Attribute für den Webdesigner, durch eine
Sprachentext-Datenbank und einem C-Objekt zur Behandlung der
Sprachvarianten im Quellcode.
- Trennung von Webdesign und Technik.
- Unterstützung aller Datenbank-Systeme durch ein
einfaches Modulkonzept.
- Schnelle und einfache Installation des Systems.
COMPARAT hat diese Ziele erreicht und kann hoch komplexe
Geschäftsanwendungen mit diesem Framework
implementieren.
In cpIApp ist ein automatisches Sessionmanagement integriert. Eine Session
kann über ein Cookie identifiziert werden, aber mit
einem Handgriff kann auch eine URL-basierte Session-Behandlung
umgesetzt werden. Auf Wunsch kann hier restriktiv eingegriffen
werden, um zum Beispiel die Zahl der Sessions pro Client-IP-Adresse
zu begrenzen.
Auch eine Benutzer- und
Rechteverwaltung ist bereits integriert. Benutzer
können sich registrieren, anmelden und
abhängig von persönlichen oder
Gruppen-Rechten agieren.
cpIApp unterstützt auch AJaX (Asynchronous
Javascript and XML, siehe
http://xulplanet.com/references/objref/XMLHttpRequest.html).
AJaX wird vom Browser eine http-Anfrage an den Server geschickt.
Der Server, also unsere cpIApp-Anwendung, schickt Daten
zurück (egal ob XML oder in anderer Form), die noch
während der Formularbearbeitung durch den Benutzer
sichtbar gemacht werden können. Für
diese Verarbeitung von Anfragen gelten hohe
Sicherheitsansprüche und eine andere Art der
Ausgabe (aus Server-Sicht).
Der Quellcode steht unter der GPL und teilweise
zusätzlich unter der Apache Lizenz. Er wird dem
Kunden immer mitgeliefert. Der Kunde kann aber auch eine andere
Lizenz erwerben.
Nachteile von cpIApp
cpIApp ist technisch eher mit serverseitigen Java-Programmen
vergleichbar, weniger mit PHP. Auch Java-Programme
müssen auf einem Server installiert werden. Das
cpIApp-Apache-Modul kann mit jedem
VirtualHost
installiert werden. Jeder Host hat seinen eigenen Speicherbereich
(shared memory). Das Modul muß vom Webmaster
installiert werden und kann nicht einfach auf einem Multihostsystem
(wo Kunden ihre Homepage lagern) von einem Kunden installiert
werden. Das Modul muß zum Zielsystem passen, also
muß ein Binary für die richtige
Distribution vorliegen oder es muß aus den Quellen
compiliert werden. Nach einer Installation oder Aktualisierung
eines cpIApp-Moduls muß dem Apache-Webserver ein
reload Befehl gegeben werden, damit die dynamischen
Bibliotheken sowie die Sprachentexte und Templates neu geladen
werden.
Die Software
Die Integration der Anwendung als Modul in den Apache-Server hat
vor allem drei Vorteile:
- größtmögliche Ausführungsgeschwindigkeit,
- Nutzung der Sicherheit und
- Nutzung der großen Verbreitung des Apache-Servers.
Unsere C-Software nutzt Techniken des Apache-Servers
für Sicherheit und Speicherverwaltung. So werden
alle Templates und Sprachentexte in einem Shared-Memory Bereich
verwaltet, der für alle Instanzen (Prozesse,
Threads) einer cpIApp-Anwendung gemeinsam im Zugriff liegt. Wenn
die Templates zum Beispiel 500 Kilobyte Shared-Memory
benötigen, dann können tausend parallele
Prozesse laufen und brauchen dennoch nur diese 500 Kilobyte. Je
nach Anwendung benötigt eine Requestverarbeitung
zwischen 10 und 100 Kilobyte zusätzlich,
für einige Millisekunden. Bei 100 Kilobyte
benötigen 1000 gleichzeitige Requests also lediglich
100 Megabyte im Speicher.
Die cpIApp-Module und Anwendungen werden über
Variablen in den Apache-Konfigurationsdateien konfiguriert.
Einmal eingerichtet, braucht nach einer
größeren Änderung der
Software nur ein reload durchgeführt
werden.
Unsere C-Bibliotheken Std3000C und cpIApp sind keine der
üblichen Bibliotheken. In Ihnen stecken fast zwanzig
Jahre Programmier-Erfahrung. Das Wissen aus C++, Java, PHP,
ObjectPascal, Eiffel und ObjectiveC mit ihren objektorientierten
Konzepten sind in die Programmierung der Bibliotheken
eingeflossen.
Die Std3000C und die cpIApp Bibliotheken verwenden eine Technik,
die wir C-Objects oder C-Classes nennen. Damit haben wir Probleme
isoliert und die zur Lösung benötigten
Daten gekapselt. Strukturen werden zu Behältern
für Daten und Methoden. In der C-Programmierung
verlangt dies eine konsequente Einhaltung von Regeln und
Standards.
Die berühmt-berüchtigen buffer overflows gibt es nicht mit diesen
beiden Bibliotheken und auch nicht mit dem Apache-Modul. Auch
andere Fehler dürften selten sein: das ganze Konzept
ist mit der Maßgabe, ein fehlertolerantes Verhalten
umzusetzen, entwickelt worden. Für Programmierer
gibt es zahlreiche Vereinfachungen und Erleichterungen, mit deren
Hilfe zusätzlich Fehler verhindert werden. Eine
Analyse und Dokumentation gefundener Fehler hilft,
zukünftige Fehler zu vermeiden.
Die cpIApp-Bibliothek enthält Techniken und
Methoden, die in der C-Programmierung nicht üblich
sind. So werden Templates (HTML, Scripte), die ineinander
verschachtelt werden und Platzhalter oder zu
übersetzende Sprachen-Texte beinhalten, nicht im
Speicher hin und her kopiert. Sie bleiben stattdessen in ihrem
Shared Memory Bereich und werden über verkettete
Listen so verbunden, daß ein neuer
zusammenhängender Text ausgegeben werden kann.
Diese Methode alleine macht die Bibliothek für die
Requestverabeitung enorm effizient - es gibt keine schnellere
Methode.
Wir erleben täglich, wie schnell und einfach sich
Anwendungsaufgaben implementieren lassen und das auch noch mit
Spaß an der Arbeit.
Manfred Rebentisch 2006-06-18