Open Source im professionellen Einsatz
Newsletter abonnieren
HEFTARCHIV | NEWS | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO

Partner-Links:
Yatego Shopping
Notebook Themenwelt
 
Yatego Deutschlands größte Shoppingmall. Über 8500 Shops, und 3 Mio Artikel.
Alle Bestseller, Gutscheine
und Shopping Tops.

Firewall bei Mercateo kaufen.

Ein Preisvergleich bei Hardware lohnt sich.

Sie suchen günstige Laptops? Schauen Sie doch mal bei Preisvergleich.org, Preisvergleich.eu, Preisvergleich.ch und Preisvergleich.at vorbei.

Linux Jobs

Job offers Netherlands


user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2007  »  11  »  LAMP mal ohne AMP  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

© DavidQ, photocase.com

Performante Webapplikationen in C++ entwickeln

LAMP mal ohne AMP

von Mathias Kettner
Erschienen im Linux-Magazin 2007/11

Webanwendungen bestehen üblicherweise aus einem Dreigespann von Interpreter-Sprache, Datenbank und Server - unter Linux meist in Form von LAMP (Linux, Apache, MySQL, PHP/Perl/Python). Dieser Artikel schildert, wie der Autor mit C++ ein leistungsfähigeres Konzept umgesetzt hat.

Die Frage drängt sich gelegentlich auf, wie es sein kann, dass viele selbst einfache Programme trotz aktueller Hardware so langsam sind? Seit 1982 der beliebte 8-Bit-Computer C-64 auf dem Markt erschien, sind 25 Jahre Mooresches Gesetz vergangen. Derzeit gehandelte Prozessoren sind sicherlich um den Faktor 50 000 schneller als die von damals. Bei der gefühlten Geschwindigkeit der Software stellt sich aber eher das Gefühl eines Rückschritts ein.

Die Klasse der Webanwendungen zum Beispiel: Ist es wirklich unumgänglich, dass ein Benutzer mehr als 20 Sekunden warten muss, um beispielsweise die Startseite von Ebay zu erhalten (bei DSL mit 6 MBit/s)? Auch Open-Source-Software ist von solchen Auswüchsen nicht verschont geblieben. Wenn E-Groupware - eine an sich sehr schöne Groupware-Lösung auf LAMP-Basis - den Eingangsordner einer Mailbox anzeigt (die ersten 20 Einträge), braucht sie dafür teilweise 10 Sekunden, obwohl der IMAP-Daemon auf demselben Server läuft. Das bedeutet für den dabei verwendeten AMD-Prozessor mindestens zehn Milliarden teils 64-bittige Rechenoperationen. Bei einer Ergebnisseite von 200 KByte sind das immerhin 50 000 CPU-Befehle pro Byte der fertigen HTML-Seite - auch wenn der Vergleich etwas hinkt.

C++ statt Skripte

Es ist ja verständlich, dass heute niemand mehr Software-Entwicklung in handoptimierter Maschinensprache bezahlen will. Aber mit einem aktuellen Compiler ist C++ fast genauso schnell. Wenn man jetzt noch auf das langwierige Speichern von Daten in einer SQL-Datenbank verzichtet und alle Daten einfach im Hauptspeicher hält, dann müsste es doch machbar sein, mit nicht allzu großem Aufwand eine sehr schnelle Webanwendung zu entwickeln.

Nach diesen Überlegungen und einem guten Maß an Neugier reifte ein konkretes Konzept für die Umsetzung der Idee "LAMP ohne AMP" (LOA), die dieser Artikel vorstellt. Praktisch ist die Idee in der Tauschzone-Site [1] umgesetzt, einer kostenlose Tauschplattform für Waren und Dienstleistungen, die seit Januar 2007 online ist und sich seitdem stetigen Zulaufs erfreut (Abbildung 1)


Abbildung 1: Bei der Tauschzone hat der Autor die hier vorgestellten Programmiertechniken angewandt.

Datenhaltung

Der erste und wichtigste Schritt bei LOA ist, sich möglichst genau über die Daten Gedanken zu machen, um die es gehen soll. Immerhin muss das Programm ja alle Daten quasi von Hand im Hauptspeicher verwalten, und zwar in Form von C++-Objekten. Listing 1 zeigt ein Beispiel für den fiktiven Datensatz eines Tauschzone-Artikels mit einer eindeutigen ID, einem Titel, einer Beschreibung, einem Preis in der Tauschwährung und einem Anbieter.

Listing 1: Artikeldatensatz,
exemplarisch

01 class Article
02 {
03     unsigned    _id;
04     string      _title;
05     string      _description;
06     unsigned    _price;
07     User       *_owner; // direkter Zeiger auf Besitzer
08 
09 public:
10     // Konstruktor
11     Article(unsigned id, char *title, char *descr,
12             unsigned price, User *owner);
13 
14     // Zugriffsfunktionen (hier gekürzt)
15     char *title()       { return _title.c_str(); };
16     setTitle(char *t)   { _title = t; };
17 
18     // Persistenz: Binärdarstellung in Datei schreiben
19     streamToFile(int fd);
20 };

Listing 2: Datensatz
anlegen

01 // Datentypen von Indizes:
02 
03 std::map<id, Article *>         _articlesById;
04 std::set<Article, less_than_cheap> _articlesByPrice;
05 
06 Engine::createArticle(char *title, char *descr,
07                    unsigned price, User *owner)
08 {
09     unsigned id = nextArticleId();
10     Article *art = new Article(id, title, descr, price, owner);
11 
12     // ID-Index einfügen
13     _articlesByID.insert(make_pair(id, art));
14 
15     // Index für billigste Artikel pflegen
16     _articlesByPrice.insert(art);
17 }

Wichtig dabei ist, sich Gedanken darüber zu machen, wie man die richtigen Datensätze schnell finden kann. Sind mehrere Millionen Datensätze eines Typs linear zu durchsuchen, um den gewünschten Satz zu finden, dann ist die wertvolle Rechenzeit schnell verschwendet. Daher muss jeder Zugriff über eine Indexstruktur gehen, die ein schnelles Auffinden des gewünschten Datensatzes ermöglicht. Dabei braucht jede Art des Zugriffs eine eigene Struktur.

Die Tauschzone verwaltet zunächst einmal Benutzerdaten. Jeden Benutzer speichert sie als C++-Objekt, das Datenfelder für Anmeldename, Passwort, E-MailAdresse und andere Angaben besitzt. Wenn nun ein Surfer in der Anmeldemaske Name und Passwort eingibt, muss die Software aus allen Benutzern den richtigen Datensatz anhand des Anmeldenamens finden. Damit dies effizient geschieht, können die Benutzer zum Beispiel in einem binären Suchbaum gespeichert sein, der den Anmeldenamen als Schlüssel verwendet.

Die Implementierung eines solchen Baums bietet die Bibliothek STL (Standard Template Library) in Form der Klassen »set« oder »map«. Bei 100 000 Benutzern sind bei einer linearen Suche im Schnitt 50 000 Vergleiche notwendig. Bei Verwendung eines Binärbaums, der ausreichend balanciert ist, genügen maximal log2 100 000, also 17 Vergleiche.

Sie können diesen Artikel als PDF für 99 Cent kaufen. Klicken Sie dazu einfach auf eine der beiden Bezahloptionen Paypal oder ClickandBuy.


Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Gefüttert Groupware mit dem VoIP-Telefon
Vollautomatik Pentesting mit Metasploit und dem Autopwn-Modul
Tooltipps Werkzeuge im Kurztest
Konservierungsmittel Objektdatenbank Db4o für Java und Mono
Dateien im Kosmos Das verteilte Dateisystem Kosmos-FS
Edler Tropfen? Open-Source-Groupware Group-E von Endo7
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Anbindung OpenCms an Liferay Portal

Liferay Portal ist heute nicht nur die breiteste, sondern auch funktional umfassendste Entwicklung im Open Source Portalumfeld. Es eignet sich in Unternehmen als prozessorientiertes und integratives Enterprise Portal mit hervorragenden Collaboration-Funktionen. Teilweise stößt jedoch das in Liferay integrierte CMS an seine Grenzen, insbesondere bei der Publikation umfangreicher Informationsmengen. Aus diesem Grund hat comundus eine Anbindung des Web CMS OpenCms an Liferay realisiert. In dieser Kombination wird Liferay Portal zu einem vollwertigen Publishing-Portal mit sämtlichen Funktionalitäten, die heute von einem CMS erwartet werden.

Kommentare (2)
von
sinseq,
11.10.2009 17:46
Seitenaufbau
Also der Seitenaufbau ist beeindruckend. Ich habe es unter Opera (Mac OS X) ausprobiert. So etwas wünsch ich mir für viele andere Seiten, z.B. ebay!
von
Martin,
07.10.2009 23:48
Na, nicht wirklich ein optimaler Ansatz :-(
LAMP also ohne alles, sogar der Apache wird in C++ nachgebildet. Da stehen mir die Haare obgelich der möglichen Sicherheitslücken zu Berge!

Und ganz im Ernst: Der Seitenaufbau der genannten Tauschseite ist echt langsam! Und dann wurde bei den Bildern nicht mal ihre Größe angegeben, so dass zu Problemen beim Rendering kommt.

Das Ego des Autors in allen Ehren - aber so kann und sollte (!) das in KEINEM Fall in der Praxis eingesetzt werden!
 

Impressum |Datenschutzerklärung  | Mediadaten  | © 2010Linux New Media AG
Linux New Media Websites
Deutschland: [Admin-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Linux Technical Review] [Ubuntu User]
Europa: [EasyLinux Polen] [Linux Magazine Polen] [Linux Magazine Spanien]
International: [Linux Magazine International] [Linux Pro Magazine] [Ubuntu User] [Linux Magazine Brasilien] [EasyLinux Brasilien]