Nein, das ist kein Tippfehler. Mein Netzwerk ist zu schnell. Doch, wirklich. Es ist nämlich schneller, als das beim Kunden. Noch nicht klar? Na gut, von vorne:

Ich arbeite in meinem aktuellen Projekt an einer Rich Client Anwendung mit einer Hibernate Datenbank Anbindung. Alles funktioniert bisher mit akzeptabler Performance, ohne das wir dafür viel getan hätten. Aber das ist auch kein Wunder, wir entwickeln auf einer Entwicklungsdatenbank, auf der für jeden Entwickler ein eigenes Schema existiert. Die Test bzw. Spieldaten sind recht übersichtlich, und wir haben eine standard LAN Verbindung (vermutlich 100MBit/s) zu der Datenbank. Da muss schon ordentlich etwas schief laufen, damit man Performanceprobleme bekommt.

In der Realität werden die Verhältnisse jedoch ganz anders aussehen. Die Datenmenge wird erheblich größer sein, die Anzahl User höher und das Netzwerk langsamer. Da stellt sich natürlich die Frage: haben wir doch ein Performanceproblem? Und wenn ja wo? Wie so oft gibt es verschiedene Strategien, die man verfolgen kann.

Sehr beliebt: Man sucht sich einen Teil der Anwendung, der aussieht als könnte er ein Performanceproblem haben, und bastelt so lange daran herum, bis es so aussieht als hätte er jetzt keins mehr. Sehr praktisch. Man kann sich immer einreden, was tolles geleistet zu haben, denn es wird niemand das Gegenteil beweisen können.

Anstrengender: Man misst die Performance unter realen oder wenigstens realistischen Bedingungen, tuned an den Stellen, an denen es Probleme gibt und misst ob man Erfolg hatte. Wichtig: Nur weil man denkt, man könnte eine Aktion, die 0,1 Sekunden dauert auf die halbe Zeit reduzieren, ist dies kein Grund weiterzutunen. Für die meisten Aktionen sind 0,1 absolut ausreichend.

Bleibt ein Problem woher nimmt man die realistische Umgebung? Bei großen Projekten sollte im Budget eine entsprechende Testumgebung mit eigenen Servern und Clients enthalten sein. Unser Projekt ist nach internationalen Maßstäben klein und schnuckelig, also muss die Lösung preiswert sein. Daten in größerem Umfang in ein Testschema zu bringen ist nicht wirklich ein Problem. Last zu erzeugen ist mit ein paar Entwicklerrechnern auch ganz praktikabel, aber das Netzwerk? Wie bekommt man ein Netzwerk langsam? Man könnte natürlich versuchen, auch im Netzwerk Traffic zu erzeugen, bis die verfügbare Bandbreite schrumpft, aber das ist nicht wirklich durchführbar.

Unsere Lösung lautet Traffic Shaper XP bzw. Bandwidth Controller (ist nach meiner Information das gleiche). Es erlaubt die Bandbreite von einzelnen Verbindungen eines Rechners zu limitieren (eine Verbindung wird über Protokoll, Richtung, Quell Port, Quell Host, Ziel Port und Ziel Host identifiziert). Es gibt eine 30Tage Trialversion, die fälschlicher Weise als Freeware bezeichnet wird. Mit dieser habe ich die Verbindung von meinem Rechner zur Datenbank und wieder zurück gedrosselt, und konnte so zumindest grob feststellen, wie sich unsere Anwendung verhält, wenn die Netzwerkverbindung nicht gar so üppig ist. Die Standardversion für 10 Rechner kostet auch weit unter 100Euro und sollte daher für kein Entwicklerteam ein Problem darstellen.

Falls ihr das gleiche Problem habt, aber zusätzliche oder andere Anforderungen habt, z.B. nicht unter Windows arbeitet, sucht nach Bandwidth Management, Package shaping, oder Bandwidth throtteling. Bei Wikipedia gibt es eine ganze Reihe von Artikeln zu diesen Themen mit Links zu Anbietern. Falls jemand etwas noch günstigeres findet, lasst es mich wissen.

Tipp: Nicht vergessen die Netzwerkdrossel nach dem Test zu deaktivieren, sonst wird die Arbeit ziemlich schleppend weitergehen.