Facebook
Twitter
Google+
Kommentare
6

Schnell. Schneller. Am schnellsten?

In Laufe eines Projektes kommt man immer wieder in die Situation zwischen zwei Möglichen Implementierungen unterscheiden zu müssen. Da Technologie-Evaluierung eine gern gesehene Abwechslung zum manchmal eintönigen Programmieralltag, vertieft man sich häufig in diese Aufgabe.

Wird die Untersuchung gewissenhaft durchgeführt, startet man häufig mit einer Matrix, die mit relevanten Qualitätskriterien gefüllt werden. Häufig ist einer der ersten Punkte, die dort auftreten Geschwindigkeit, da es für ein System wichtig ist schnell zu reagieren und dem Benutzer ein angenehmes Nutzungsgefühl zu gewährleisten. Ein großer Fehler, der bei einer solchen Evaluierung häufig gemacht wird ist das Denken in Vergleichen. Technologie 1 ist schneller als Technologie 2. Aus diesem Grund ist Technologie 1 besser als Technologie 2. Richtig. Zumindest wenn es rein um die Performance geht. Nehmen wir mal ein konkretes Beispiel. Wir betrachten zwei Webserver, der eine kann 6.000 statische Anfragen pro Sekunde abarbeiten, der andere bis zu 10.000. Ist die zweite Technologie besser als die erste? Ja, auf die Performance bezogen sicherlich. Betrachtet man das Szenario ein wenig genauer, muss man noch mal einen Schritt zurückrudern.

Genau wie in sehr vielen anderen Problemen der Softwareentwicklung  spielt hier das Anforderungsmanagement eine wichtige Rolle. Der Projektverantwortliche hat die Aufgabe die nicht-funktionalen Anforderungen zu definieren. In den meisten Fällen wird die Forderung an die statischen Anfragen pro Sekunde unter 6.000 liegen. In unserem fiktiven Projekt nehmen wir 1.000 als Richtwert.

Vergleicht man jetzt die beiden Webserver, so wird klar, dass sie mit ihrer Geschwindigkeit beide in Frage kommen. In der aufgestellten Evaluierungsmatrix darf also nicht der Punkte der Geschwindigkeit aufgeführt sein, sondern die Frage „Schnell genug?“ mit ja oder nein muss beantwortet werden. Die tatsächliche Geschwindigkeit darf als Fußnote natürlich notiert sein. Wichtig hierbei ist, dass einem klar wird, dass somit andere Qualitätskriterien wie Wartbarkeit, Erlernbarkeit oder Erweiterbarkeit nun einen höheren Stellenwert gewinnen. Wahrscheinlich sollte man jedem Informatiker nach dem Studium oder der Ausbildung einen Zettel mit „Habt ihr an die Anforderungen gedacht?“ in die Hand drücken, um ihm sein Leben zu erleichtern.

Diese Art zu Vergleichen ist nahe verwandt mit dem „You ain’t gonna need it“-Paradigma, da man Optimierungen, die derzeit nicht notwendig sind auch nicht mit in die Messung einbezieht.

Solche Entscheidungen gilt es aber nicht zu treffen, wenn es um den Einkauf von Software geht, sondern auch wenn man die Eigenimplementierung vorzieht. Einen großen Wert auf Geschwindigkeit zu legen ist sicherlich keine schlechte Eigenschaft eines Softwareentwicklers, doch muss einem klar sein, dass Optimierung oft nicht ohne einen gewissen Preis zu erhalten ist. Wie überall im Leben ist es so, dass wenn man sich sehr stark auf eine Thema konzentriert andere hinten über fallen. In den Performance-Fällen ist es häufig die Wartbarkeit oder Erlernbarkeit, die zuerst in Vergessenheit gerät.

Warum ist dies schlimm? Jeder Programmierer hat sicherlich seine eigene Prioritätenliste, was Anforderungen an den eigenen Code angehen. Bei vielen steht Geschwindigkeit an erster Stelle, diese Entwickler vergessen aber sehr häufig, dass Hardware um einiges günstiger ist, als das Gehalt eines Mitarbeiters. Die Rechnung, die einen nach einer solchen Performanceoptimierung serviert wird ist einfach. Die Anzahl der Server, die eingespart werden muss in Verhältnis stehen zu dem Mehraufwand, den ein Entwickler benötigt um das System zu warten oder weiterzuentwickeln. Meist ist es nämlich doch günstiger einen zusätzlichen Server aufzubauen, um damit Performance zu gewinnen, als das vorhandene System zu beschleunigen.

Diese Regeln gelten solange man in einem eigenen Projekt arbeitet, man also Herr seiner Anforderungen ist und die Skalierung des Systems selber übernehmen kann. Findet man sich im Produktkontext wieder, sieht die Welt anders aus. Hier geht es um Alleinstellungsmerkmale der Software, die man verkaufen will und schneller zu sein als die Konkurrenz ist sicherlich ein wichtiges Kaufkriterium. Ich gehe aber davon aus, dass die meisten Webentwickler in Projekten und nicht an Produkten arbeiten.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

6 Comments

  1. „Bei vielen steht Geschwindigkeit an erster Stelle, diese Entwickler vergessen aber sehr häufig, dass Hardware um einiges günstiger ist, als das Gehalt eines Mitarbeiters.“

    Ist genial! Danke, Nils. Jetzt kann ich die Gedanke weiter kommunizieren. Am besten finde ich ein Konzept eines Produktkontextes. Ich habe immer gefüllt, dass Performance soll nicht an sich betrachtet werden, sondern Projektbezogen.

    Reply
  2. “Bei vielen steht Geschwindigkeit an erster Stelle, diese Entwickler vergessen aber sehr häufig, dass Hardware um einiges günstiger ist, als das Gehalt eines Mitarbeiters.”

    Die Aussage ist prinzipiell – wenn auch abstrakt betrachtet – natürlich vollkommen richtig. Logischerweise vervielfachen sich die Kosten dann aber auch mit der Zeit und ansteigenden Nutzerzahlen.

    Ich selbst bin allerdings immer noch der Meinung dass viel zu wenige Web-Entwickler ausreichende Kenntnisse über die server-seitige Optimierung ihrer Anwendungen mitbringen. Allerdings ist es anders herum meistens ähnlich dass sehr viele Server-Admins sich zu wenig mit den eigentlichen Anforderungsprofilen ihrer laufenden Web-Anwendungen beschäftigen. Dabei gibt es doch schon länger recht einfache Möglichkeiten mit Hilfe des Webservers, Datenbankservers, APC, Memcache, etc. Optimierungen zu fahren, welche sich transparent zur Anwendung verhalten und keine kostspieligen Änderungen am Code verlangen.

    Reply
  3. Hi, Markus!

    Wenn die Möglichkeiten, wie du sagst, recht einfach sind, kannst du evtl. auf die ein bisschen eingehen? Oder weiterführende Links anbieten?

    Das Thema ist echt spannend!

    Reply
  4. “Bei vielen steht Geschwindigkeit an erster Stelle, diese Entwickler vergessen aber sehr häufig, dass Hardware um einiges günstiger ist, als das Gehalt eines Mitarbeiters.”

    Finde ich sehr pauschal, und leider immer häufiger sehr Falsch, da es eine Milchmädchen-Rechnung ist. Die leider sehr häufig gemacht und von vielen Jungs in unserer Branche auch so kommuniziert werden.

    Beispiel:

    Entwickler brauch sagen wir mal 3 Monate um die Performance optimal zu machen. Gehe ich von den Kosten für einen externen Entwickler aus, bei ca. 70 € die Stunde und 160 Stunden im Monat, komme ich so auf Kosten von ca. 34.000 €.

    Jetzt kann ich natürlich nur das Blech rechnen im Rechenzentrum,… sagen wir mal 2 Server mehr. Wären so 2.000 € pro Blech im günstigsten Fall, .. also wäre ich bei 4.000 € gegen 34.000 €. Soweit ist das schön,… Was aber leider nur ca. 10% der Kosten sind, denn da wäre ja noch das Housing, und der Traffic. Bei den Zahlen, 1000 Anfragen die Sekunde, kann ich mal locker 2000 € im Monat für Housing und Traffic rechnen. Bisher war da noch kein Admin dabei. Für den können wir sicher auch nochmal so um die 200 € – 500 € pro Monat rechnen für Monitoring, Wartung, Deployment anpassungen etc.

    Heist unterm strich, nach gerade mal 14 Monaten, war der Entwickler günstiger.

    Die Rechnung wäre also in dem Fall:
    max. Kosten Dev = (Server Kosten + Betriebskosten + Administration) * Monate die die Anwendung laufen soll.

    Gruß

    Chris

    Reply
  5. @Chris: Ja da hast du Recht, ich hätte noch mal deutlich sagen sollen, dass ich mich da auf laufende Kosten beziehe, vielleicht sollte ich noch einen Abschnitt dazuschreiben, um das klarzustellen.

    Reply
  6. Ich denke auch dass viele Entwickler nicht wissen, was beispielsweise die Auswirkungen von nicht optimierten SQL-Queries oder auch reinen Loops sind. Hardware ist günstiger als Man-Power, das ist richtig. Manche Features kann man mit „gängigen“ Technologien (z. B. Thema „Suche“ über SQL) allerdings nur schwerlich durch reine Hardware adäquat performant gestalten. Hier gilt es aus meiner Sicht über den Tellerrand zu schauen. Und da sehe ich momentan Elasticsearch oder Solr (zum Thema „Suche“) und HHVM an erster Front.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen