Montag, 18. März 2013

Speed - die Grenze des Wachstums einer Site

Wer sich aufmerksam und im Detail die Meldungen aus dem Google Forum Crawling, Indexierung und Ranking anschaut der weiß das es der Wunsch vieler Webseitenbetreiber ist möglichst zu wachsen und im Ranking nach oben zu kommen.

Das ist bei über 240 Millionen Domains weltweit so eine Sache.

Wachstum bedeutet im Klartext viele Besucher zu haben.

Bei weiterer Betrachtung diverser Domains die damit ein Problem haben muss man feststellen das die meisten rein technisch überhaupt nicht in der Lage sind zu wachsen.

Sie können nur ganz wenige Request's im Bereich 3 bis 40 pro Sekunde bedienen - d.h. kommen mehr hat man die magische Grenze von einer Sekunde überschritten dann laufen einem die Besucher weg.

Wir stellen also eine natürliche Begrenzung fest.

Das Problem haben natürlich auch alle Großanbieter wie Google oder Amazon.

Die aber begegnen dieser Sache mit gewaltigen Serverfarmen und Einzelservern mit gewaltiger Rechenleistung.

Das kann aber der normale Anbieter einer Website überhaupt nicht leisten bzw. bezahlen.

Was er aber machen kann ist es sein Web zu checken.
Interessant ist es zu sehen wie auf einem Testserver die gesamte Applikation reagiert - also Server, Web Programmierung nebst Inhalte.

Und das macht man mit enorm hoher Last.

Ein typisches Ergebnis sieht man hier:

ab -k -n 50000 -c 100 -g server1.txt http://localhost/cmsms/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software: Apache/2.2.22
Server Hostname: localhost
Server Port: 80

Document Path: /cmsms/
Document Length: 14486 bytes

Concurrency Level: 100
Time taken for tests: 1202.303 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 0
Total transferred: 747900000 bytes
HTML transferred: 724300000 bytes
Requests per second: 41.59 [#/sec] (mean)
Time per request: 2404.606 [ms] (mean)
Time per request: 24.046 [ms] (mean, across all concurrent requests)
Transfer rate: 607.48 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 7
Processing: 142 2404 834.3 2289 8723
Waiting: 135 2236 789.1 2128 8233
Total: 145 2404 834.3 2289 8723

Percentage of the requests served within a certain time (ms)
50% 2289
66% 2468
75% 2587
80% 2671
90% 2968
95% 3544
98% 5599
99% 6263
100% 8723 (longest request)



Um die Gesamtzahl der Zugriffe abzuliefern benötigt dieses System geschlagene 1202 Sekunden.
50% der Aufrufe werden in über 2,2 Sekunden pro Aufruf erledigt.

Damit ist vollkommen klar - dieses System ist weniger gut geeignet um Wachstum zu sichern und die Zeiten überragen die magische 1 Sekunde - Grenze bei weitem.

Und so macht man es mit anderen Systemen auf dem gleichen Testserver und siehe da - es gibt erstaunliche Unterschiede.

Hier z.B. ein anderes System:
ab -k -n 50000 -c 100 -g server2.txt http://localhost/porg/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software: Apache/2.2.22
Server Hostname: localhost
Server Port: 80

Document Path: /porg/
Document Length: 23799 bytes

Concurrency Level: 100
Time taken for tests: 19.010 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 0
Total transferred: 1210150000 bytes
HTML transferred: 1189950000 bytes
Requests per second: 2630.25 [#/sec] (mean)
Time per request: 38.019 [ms] (mean)
Time per request: 0.380 [ms] (mean, across all concurrent requests)
Transfer rate: 62167.99 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 1 38 6.5 37 88
Waiting: 1 38 6.5 37 87
Total: 3 38 6.5 37 88

Percentage of the requests served within a certain time (ms)
50% 37
66% 39
75% 40
80% 41
90% 45
95% 49
98% 56
99% 63
100% 88 (longest request)

Dieses System wickelt die gleiche Anzahl von Anfragen komplett in 19 Sekunden ab - 50% aller Anfragen werden in nur 37 Millisekunden bedient.

Das sind Leistungen bei denen man auch auf normalen Webservern noch sehr lange die technische Chance von Wachstum hat.

Es ist also technisch weniger die Frage was man als Inhalte setzt sondern  wie man sie hervorzaubert.

Speedprogrammierung  ist keine einfache Sache - es gehört eine Menge Erfahrung dazu um solche Leistungen zu schaffen.

Tödlich für Leistungen sind insbesondere


  • Templateengines
  • Modulsysteme mit erheblichen Überbau
  • Module die sich gegenseitig bedingen
  • Zu wenig SQL und dafür umso mehr PHP
Nun kann es ja nicht jeder.
Solche Anwender sollten sich die Mühe machen diverse mögliche Titel auf Speed und Verwendbarkeit genau mit dieser Benchmarkmethode zu prüfen.
Macht man es nicht ist der Weg zu Wachstum u.U. verbaut - nachträgliche Änderungen sind meist enorm aufwendiger als eine ganze Serie von Vorabtest's.

Hier einmal das Ergebnis von einigen CMS Titeln:



Mit solchen Benchmarks wird es also bereits im Vorwege vollkommen klar welche Systeme bestenfalls für unbedeutende private Webpräsenzen einsetzbar sind aber nie für gewerbliche wo es darauf ankommt auf keinen Fall wegen mangelnder Technik einen Wachstum zu verhindern.


Keine Kommentare: