Verteilte Strukturen – worauf man achten sollte

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Cluster, Load Balancing, Staging, Serverfarmen, Skalierbarkeit – wenn’s um Performance und Optimierung geht, findet man schnell Schlagworte und gute Konzepte. Dass das Verteilen von Lasten auf mehrere Server aber nicht nur Vorteile bringt und manchmal gar nicht nötig ist, liegt irgendwie auf der Hand. Wann sollte man also an Lastverteilung denken und was ist dabei zu beachten?

Bei der Erstellung eines umfangreichen Konzepts für ein Content Management System bin ich auf ein paar Antworten gestossen, die ich recht hilfreich finde.

  • Können Sie Verteilung vermeiden, indem sie sich auf eine einzelne Plattform beschränken? Das senkt das Entwicklungsrisiko und vereinfacht den Betrieb des Systems. Verteilung heisst immer höhere Komplexität und mehr Fehlerquellen. Und was bei Fehlern gilt – diejenigen, die nicht entstehen können, lassen sich am besten eliminieren -, sollte auch hier Gültigkeit haben. Verteilen nicht, weil man's kann, sondern weil's nicht anders geht.
  • Verteilen Sie so, dass Verarbeitungsprozesse "nahe" bei den betroffenen Daten ablaufen. Das kann den Netzwerkverkehr reduzieren und Performance verbessern.
  • Entwerfen Sie möglichst stabile Schnittstellen. Aufgrund der Abhängigkeiten zwischen Client und Server ist dieser Aspekt wichtiger als bei nichtverteilten Systemen.
  • Reduzieren Sie die Menge der zu übertragenden Daten. Versuchen Sie auf die Übertragung komplexer Objektstrukturen zu verzichten. Führen Sie stattdessen möglichst schlanke Transfer Object ein. Solche Transfer Objects repräsentieren einen Extrakt aus einem Objekt (oder einer Objektstruktur). Mit Ihrer Hilfe reduzieren Sie die Anzahl von entfernten Funktions- oder Methodenaufrufen.
  • Fassen Sie zusammengehörende Funktions- und Methodenaufrufe in Prozessobjekten zusammen.
  • Entscheiden Sie sich beim Entwurf eher für eine höhere Serverbelastung als für höheren Datentransfer. Erstens können Sie mit zusätzlicher Server-Hardware viel erreichen. Zweitens gibt es beim Entwurf und der Implementierung von Server-Programmen mehr Optimierungspotential als beim Dateitransfer.
  • Berücksichtigen Sie bei der Verteilung den Unterschied zwischen Objekten, die es nur einmal gibt (echte Entitäten), und solchen, von denen mehrere Instanzen parallel existieren können. Versuchen Sie, die Verteilung von Entitäten zu vermeiden. Wenn Sie Entitäten unbedingt verteilen müssen, so stellen Sie deren Einzigartigkeit sicher. Ansonsten kann es hier zu Inkosistenzen kommen.
  • Erzeugen Sie Objekte so spät wie möglich, nämlich erst dann, wenn Sie wirklich benötigt werden. Lassen Sie verteilte Komponenten nicht "auf Vorrat" arbeiten. Weichen Sie von dieser Regel nur bei Objekten ab, die das System auf jeden Fall benötigt.