Πώς να εκτελέσετε τη συγκριτική αξιολόγηση απόδοσης διακομιστή Web;

Γνωρίζετε τον μέσο χρόνο απόκρισης του ιστότοπού σας; Γνωρίζετε πόσους ταυτόχρονους χρήστες μπορεί να χειριστεί ο ιστότοπός σας;

Η δοκιμή φόρτωσης είναι απαραίτητη για τις εφαρμογές Ιστού για να γνωρίζουν τη χωρητικότητα του ιστότοπου. Εάν πρόκειται να επιλέξετε τον διακομιστή ιστού, τότε ένα από τα πρώτα πράγματα που θέλετε να κάνετε είναι να εκτελέσετε τη δοκιμή φόρτωσης και να δείτε ποιος λειτουργεί καλά για εσάς.

Η συγκριτική αξιολόγηση μπορεί να σας βοηθήσει να αποφασίσετε.

  • Ποιος διακομιστής ιστού λειτουργεί καλύτερα
  • Αριθμός διακομιστών που χρειάζεστε για να εξυπηρετήσετε x αριθμός αιτημάτων
  • Ποια διαμόρφωση σας δίνει τα καλύτερα αποτελέσματα
  • Ποιες στοίβες τεχνολογίας έχουν καλύτερη απόδοση
  • Πότε ο ιστότοπός σας θα αποδώσει πιο αργά ή θα παρουσιάσει βλάβη

Υπάρχουν πολλά διαδικτυακά εργαλεία για να πραγματοποιήσετε μια δοκιμασία ακραίων καταστάσεων. Ωστόσο, εάν αναζητάτε μια εσωτερική λύση ή θέλετε να κάνετε συγκριτική αξιολόγηση μόνο της απόδοσης του διακομιστή ιστού, τότε μπορείτε να χρησιμοποιήσετε το ApacheBench και εναλλακτικά μερικά από τα παρακάτω εργαλεία.

Έχω χρησιμοποιήσει διακομιστή ιστού Apache & Nginx που φιλοξενείται σε DigitalOcean να το δοκιμάσω.

ApacheBench

ApacheBench Το (ab) είναι ένα πρόγραμμα γραμμής εντολών ανοιχτού κώδικα που λειτουργεί με οποιονδήποτε διακομιστή ιστού. Σε αυτήν την ανάρτηση, θα εξηγήσω πώς να εγκαταστήσετε αυτό το μικρό πρόγραμμα και να εκτελέσετε τη δοκιμή φόρτωσης για τη συγκριτική αξιολόγηση των αποτελεσμάτων.

Απάχης

Ας εγκαταστήσουμε το ApacheBench χρησιμοποιώντας μια εντολή yum.

yum install httpd-tools

Εάν έχετε ήδη httpd-tools, τότε μπορείτε να το αγνοήσετε.

Τώρα, ας δούμε πώς αποδίδει για 5000 αιτήματα με ταυτόχρονο 500.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[[email protected] ~]#

Έτσι, όπως μπορείτε να δείτε, ο Apache έχει χειριστεί 373 αιτήματα ανά δευτερόλεπτο και χρειάστηκαν συνολικά 13.389 δευτερόλεπτα για να εξυπηρετήσει τα συνολικά αιτήματα.

  25 καλύτερες δωρεάν εφαρμογές Video Cutter

Τώρα ξέρετε ότι η προεπιλεγμένη διαμόρφωση μπορεί να εξυπηρετήσει αυτά τα πολλά αιτήματα, οπότε όταν κάνετε οποιεσδήποτε αλλαγές διαμόρφωσης μπορείτε να κάνετε ξανά τη δοκιμή για να συγκρίνετε τα αποτελέσματα και να επιλέξετε το καλύτερο.

Nginx

Ας κάνουμε τη δοκιμή τι κάναμε για το Apache, ώστε να μπορείτε να συγκρίνετε ποιο αποδίδει καλύτερα.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[[email protected] ~]#

ΟΥΑΟΥ!

Το είδες αυτό?

Το Nginx χειρίστηκε 6593 αιτήματα ανά δευτερόλεπτο! Ένας νικητής.

Βλέπετε λοιπόν, συγκρίνοντας μόνο με δύο διακομιστές Ιστού, θα έχετε μια ιδέα ποιον να επιλέξετε για την εφαρμογή Ιστού σας.

Η παραπάνω δοκιμή είναι σε CentOS 6.8, 64 bit. Μπορείτε να δοκιμάσετε πολλούς συνδυασμούς έκδοσης OS & Web Server για βέλτιστα αποτελέσματα.

Δεν σας αρέσει το ApacheBench για οποιονδήποτε λόγο; Μην ανησυχείτε, υπάρχουν πολλά άλλα που μπορείτε να χρησιμοποιήσετε για να εκτελέσετε φόρτωση HTTP.

ΠΟΛΙΟΡΚΙΑ

ΠΟΛΙΟΡΚΙΑ είναι ένα βοηθητικό πρόγραμμα δοκιμής φόρτωσης HTTP που υποστηρίζεται σε UNIX. Μπορείτε να βάλετε πολλαπλές διευθύνσεις URL σε ένα αρχείο κειμένου για τη φόρτωση δοκιμών. Μπορείτε να εγκαταστήσετε το siege χρησιμοποιώντας το yum.

# yum install siege

Ας εκτελέσουμε τη δοκιμή με 500 ταυτόχρονες αιτήσεις για 5 δευτερόλεπτα.

[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[[email protected] ~]#

Να αναλύσουμε τις παραμέτρους.

  Δημιουργήστε παλέτες χρωμάτων στο iPhone σας και συγχρονίστε με το Mac σας

-q – για να το εκτελείτε αθόρυβα (χωρίς εμφάνιση λεπτομερειών αιτήματος)

-t – τρέξτε για 5 δευτερόλεπτα

-γ – 500 ταυτόχρονες αιτήσεις

Έτσι όπως μπορείτε να δείτε, η διαθεσιμότητα είναι 100% και ο χρόνος απόκρισης είναι 0,04 δευτερόλεπτα. Μπορείτε να τροποποιήσετε την παράμετρο δοκιμής φορτίου με βάση τον στόχο σας.

Αλί

Αλί είναι ένα σχετικά νέο εργαλείο δοκιμής φορτίου για την εκτέλεση ανάλυσης σε πραγματικό χρόνο. Υποστηρίζει πολλαπλές πλατφόρμες για εγκατάσταση, συμπεριλαμβανομένου του Docker.

Μόλις εγκατασταθεί, εκτελέστε το ali για να δείτε τις λεπτομέρειες χρήσης.

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

Όπως μπορείτε να δείτε παραπάνω, έχετε την επιλογή να στείλετε κεφαλίδες HTTP, διάρκεια δοκιμής, όριο ρυθμού, χρονικό όριο και πολλά άλλα. Έκανα μια γρήγορη δοκιμή στο grtechpc.org Tools και εδώ φαίνεται η έξοδος.

Η αναφορά είναι διαδραστική και παρέχει λεπτομερείς πληροφορίες για τον λανθάνοντα χρόνο.

Γκόμπενς

Γκόμπενς είναι γραμμένο σε γλώσσα Go και ένα απλό βοηθητικό πρόγραμμα δοκιμής φόρτωσης για συγκριτική αξιολόγηση της απόδοσης του διακομιστή web. Υποστηρίζει περισσότερους από 20.000 ταυτόχρονους χρήστες, κάτι που δεν υποστηρίζει το ApacheBench.

Apache JMeter

JMeter είναι ένα από τα πιο δημοφιλή εργαλεία ανοιχτού κώδικα για τη μέτρηση της απόδοσης των εφαρμογών Ιστού. Το JMeter είναι μια εφαρμογή βασισμένη σε java και όχι μόνο διακομιστής ιστού, αλλά μπορείτε να το χρησιμοποιήσετε ενάντια σε PHP, Java. ASP.net, SOAP, REST κ.λπ.

  Τρόπος εκτέλεσης οποιασδήποτε εφαρμογής σε λειτουργία εικόνας σε εικόνα στο παράθυρο 10

Το JMeter απέκτησε αξιοπρεπές φιλικό GUI και η πιο πρόσφατη έκδοση 3.0 απαιτεί Java 7 ή νεότερη έκδοση για την εκκίνηση της εφαρμογής. Πρέπει να δοκιμάσετε το JMeter εάν ο στόχος σας είναι να βελτιστοποιήσετε την απόδοση της διαδικτυακής εφαρμογής.

wrk

wrk είναι ένα άλλο σύγχρονο εργαλείο μέτρησης απόδοσης για να φορτώσετε τον διακομιστή ιστού σας και να σας δώσει λεπτομέρειες καθυστέρησης, αιτήματος ανά δευτερόλεπτο, μεταφοράς ανά δευτερόλεπτο κ.λπ.

Με το wrk, μπορείτε να καθορίσετε να εκτελέσετε μια δοκιμή φόρτωσης με έναν αριθμό νημάτων.

Ας πάρουμε ένα παράδειγμα εκτέλεσης μιας δοκιμής για 5 λεπτά με 500 ταυτόχρονους χρήστες με 8 νήματα.

wrk –t8 –c500 -d300s http://localhost

Autocannon

Εμπνευσμένο από τη δουλειά, αυτοκανόνι είναι γραμμένο στο Node.js. Μπορείτε να το χρησιμοποιήσετε μέσω προγραμματισμού, μέσω API ή αυτόνομου βοηθητικού προγράμματος. Το μόνο που χρειάζεστε είναι να εγκαταστήσετε το NodeJS ως προαπαιτούμενο.

Μπορείτε να ελέγξετε έναν αριθμό συνδέσεων, αιτημάτων, διάρκειας, εργαζομένων, χρονικού ορίου λήξης, ποσοστού σύνδεσης και να προσφέρετε πολλές επιλογές για τη συγκριτική αξιολόγηση των εφαρμογών ιστού σας.

Curl-loader

φορτωτής μπούκλας είναι γραμμένο σε C για προσομοίωση φόρτωσης εφαρμογής και υποστηρίζει SSL/TLS. Μαζί με τη δοκιμή ιστοσελίδας, μπορείτε επίσης να χρησιμοποιήσετε αυτό το εργαλείο ανοιχτού κώδικα για να εκτελέσετε φόρτωση σε διακομιστές FTP.

Μπορείτε να δημιουργήσετε ένα δοκιμαστικό σχέδιο με συνδυασμό HTTP, HTTPS, FTP και FTPS σε μια διαμόρφωση μεμονωμένης παρτίδας.

httperf

ο httperf είναι ένα εργαλείο υψηλής απόδοσης που εστιάζει σε δείκτες αξιολόγησης μικρο- και μακρο-επιπέδου. Υποστηρίζει πρωτόκολλα HTTP/1.1 και SSL.

Εάν έχετε τον αναμενόμενο αριθμό ταυτόχρονων χρηστών και θέλετε να ελέγξετε εάν ο διακομιστής ιστού σας μπορεί να εξυπηρετήσει έναν αριθμό αιτημάτων, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

Η παραπάνω εντολή θα ελεγχθεί με 100 αιτήματα ανά δευτερόλεπτο για 1000 αιτήματα HTTP.

Τσουνγκ

Τσουνγκ είναι ένα πολυπρωτόκολλο κατανεμημένο εργαλείο δοκιμών ακραίων καταστάσεων για να τονίσει τον διακομιστή HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Υποστηρίζει HTTP/1.0, HTTP/1.1 και ο χειρισμός των cookies γίνεται αυτόματα.

Η δημιουργία αναφοράς είναι εφικτή με το Tsung.

συμπέρασμα

Ελπίζω τα παραπάνω εργαλεία συγκριτικής αξιολόγησης να σας δώσουν μια ιδέα για την απόδοση του διακομιστή ιστού σας και να αποφασίσετε τι λειτουργεί καλύτερα για το έργο σας.

Στη συνέχεια, μην ξεχνάτε να παρακολουθείτε την απόδοση του ιστότοπού σας.