Framework’o evoliucija (jis vis greitesnis ir funkcionalesnis)

Viskas prasidėjo labai labai seniai… Kai music.lt buvo perrašomas iš pagrindų. Reikėjo framework’o. Jis atsirado. Tobulėjo… Išsiplėtė… Tada jis tapo ir www.erdves.info pagrindu.

Visoje šioje istorijoje taip pat rastume kokius 4 radikalius framework’o perrašymus…
Galų galiausiai teko atsisveikinti su PHP4 ir pereiti prie PHP5… Viskas tiesiog tobulėjo :) Ir dabar yra tai, kuo aš džiaugiuosi! :)

Bet, manau, viską reiktų pagrįsti faktiškai… Taigi leidžiame apachebench ir žiūrime:

1. Pirmiausiai bandysime www.erdves.info. Čia panaudota gan sena framework’o versija (praktiškai ta pati sukasi ir ant dabartinio music.lt). Manau, kad ~ metų senumo.. O gal senesnė. Kodas 2x trumpesnis nei dabar, sisteminių modulių irgi mažiau. Mažiau dinamiškumo, OOP yra PHP4 stiliaus. Pažiūrėkime:

%ab -n 500 http://www.erdves.info/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.erdves.info (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: www.erdves.info
Server Port: 80

Document Path: /
Document Length: 22302 bytes

Concurrency Level: 1
Time taken for tests: 167.882618 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 11341500 bytes
HTML transferred: 11151000 bytes
Requests per second: 2.98 [#/sec] (mean)
Time per request: 335.765 [ms] (mean)
Time per request: 335.765 [ms] (mean, across all concurrent requests)
Transfer rate: 65.97 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 276 334 106.8 318 1869
Waiting: 236 284 92.2 271 1609
Total: 276 334 106.8 318 1870

Percentage of the requests served within a certain time (ms)
50% 318
66% 324
75% 330
80% 335
90% 400
95% 507
98% 621
99% 758
100% 1870 (longest request)

2. Dabar bandome savaitės senumo kodinę bazę. Sistema gan stipriai išplėsta: nauji moduliai, daugiau dinamiškumo ir automatizacijos. Gan nemažai PHP5 OOP kodo, tad suderinamumo su PHP4 nebėr. Žiūrime:

%ab -n 500 http://dev.erdves.info/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking dev.erdves.info (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: dev.erdves.info
Server Port: 80

Document Path: /
Document Length: 1439 bytes

Concurrency Level: 1
Time taken for tests: 103.749254 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 921000 bytes
HTML transferred: 719500 bytes
Requests per second: 4.82 [#/sec] (mean)
Time per request: 207.499 [ms] (mean)
Time per request: 207.499 [ms] (mean, across all concurrent requests)
Transfer rate: 8.67 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 1
Processing: 179 206 33.4 197 553
Waiting: 177 204 33.2 195 550
Total: 179 206 33.4 197 553

Percentage of the requests served within a certain time (ms)
50% 197
66% 199
75% 201
80% 205
90% 243
95% 278
98% 317
99% 327
100% 553 (longest request)

3. O dabar panaudojam overloading’ą… :) Sisteminiai moduliai loadinami tik tada ir tik tada, kai jie yra reikalingi (t.y. yra bandomi panaudoti). Žinoma, kažką panašaus galima buvo padaryti su PHP4 ir papildomomis funkcijomis, bet tada būtų buvę mažiau patogumo, nes sisteminių modulių kūrimo realiai nebuvo galima automatizuoti. Paleidžiam:

%ab -n 500 http://dev.erdves.info/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking dev.erdves.info (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: dev.erdves.info
Server Port: 80

Document Path: /
Document Length: 1439 bytes

Concurrency Level: 1
Time taken for tests: 52.362119 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 921000 bytes
HTML transferred: 719500 bytes
Requests per second: 9.55 [#/sec] (mean)
Time per request: 104.724 [ms] (mean)
Time per request: 104.724 [ms] (mean, across all concurrent requests)
Transfer rate: 17.17 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 87 103 35.0 92 476
Waiting: 85 101 34.7 90 473
Total: 87 103 35.0 92 476

Percentage of the requests served within a certain time (ms)
50% 92
66% 94
75% 98
80% 102
90% 134
95% 181
98% 220
99% 241
100% 476 (longest request)

Hmm… Manau, rezultatai viską pasako :) Dar reiktų paminėti ir tai, kad viskas sukasi ant paprasto kelių metų kompiuterio, kurio parametrai yra tokie: Hardware: AMD Duron 900MHz, seni geri 512MB RAM, kurių nelabai ir užtenka paleidinėjant ab. Software: FreeBSD6, PHP5.1.4, Apache 2.0.55. Seniau buvo naudojamas eAccelerator, bet šiuo metu jis yra nebenaudojamas dėl crash’ų.

4. Palyginimui wordpress ir www.zlotkus.com rezultatai:

%ab -n 500 http://www.zlotkus.com/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.zlotkus.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: www.zlotkus.com
Server Port: 80

Document Path: /
Document Length: 13729 bytes

Concurrency Level: 1
Time taken for tests: 334.572849 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 6974000 bytes
HTML transferred: 6864500 bytes
Requests per second: 1.49 [#/sec] (mean)
Time per request: 669.146 [ms] (mean)
Time per request: 669.146 [ms] (mean, across all concurrent requests)
Transfer rate: 20.35 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 1
Processing: 585 668 168.8 607 2537
Waiting: 452 512 126.4 470 2014
Total: 585 668 168.8 607 2537

Percentage of the requests served within a certain time (ms)
50% 607
66% 622
75% 649
80% 689
90% 841
95% 985
98% 1135
99% 1370
100% 2537 (longest request)

Wordpress yra tikrai kažkoks griozdas… Funkcionalumo jame tikrai nėra tiek daug… Lieka tik viena išvada – Wordpress’o kodas yra tikrai prastas :) Ateityje planuoju programuoti weblog’o modulį savo framework’ui. Funkcionalumu jis bus praktiškai toks pat kaip ir Wordpress… O greičio rezultatus tada ir pamatysim :)

Pabaigai…

Rezultatai tikrai nuostabūs. Greitis padidėjo 3,2 karto! :) Artimiausiu metu atnaujinsiu music.lt iki naujausios framework’o versijos… Įdomu, kiek tada jis dar pagreitės? Dabar puslapio sugeneravimas užtrunka vidutiniškai ~60ms. Gal bus 20ms? :) Sunkiai tikėtina… Bet, manau, 30-40ms tikrai pasieksiu :)

Leave a Reply