Kiểm tra ứng dụng mẫu của chúng tôi

Trong chương trước, chúng ta đã hiểu cách sử dụng cơ bản của Apache Bench để kiểm tra trang web của bên thứ ba. Trong phần này, chúng tôi sẽ sử dụng công cụ này để kiểm tra một ứng dụng web trên máy chủ của chính chúng tôi. Để giữ cho hướng dẫn khép kín trong phạm vi có thể, chúng tôi đã chọn cài đặt một ứng dụng python cho mục đích trình diễn; bạn có thể chọn bất kỳ ngôn ngữ nào khác như PHP hoặc Ruby tùy thuộc vào trình độ chuyên môn của bạn.

Cài đặt Python

Nói chung, Python được cài đặt theo mặc định trên các máy chủ Linux.

Cài đặt Khung Chai và Tạo một Ứng dụng Đơn giản

Chai là một khuôn khổ vi mô được viết bằng python để tạo ứng dụng web và pip là trình quản lý gói python. Gõ lệnh sau vào terminal để cài đặt Chai -

$ sudo apt-get install python-pip
$ sudo pip install bottle

Bây giờ chúng ta hãy tạo một ứng dụng Chai nhỏ. Để làm được điều đó, hãy tạo một thư mục và chuyển vào bên trong nó -

$ mkdir webapp
$ cd webapp

Chúng tôi sẽ tạo một tập lệnh python mới, app.py, bên trong thư mục ứng dụng web -

$ vim app.py

Bây giờ, hãy viết đoạn mã sau vào tệp app.py -

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello')
def hello():
   return "Hello World!"

run(app, host = 'localhost', port = 8080)

Khi bạn đã thêm các dòng trên, hãy lưu và đóng tệp. Sau khi lưu tệp, chúng tôi có thể chạy tập lệnh python để khởi chạy ứng dụng -

$ python app.py

Output

Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Kết quả này cho thấy rằng ứng dụng của chúng tôi đang chạy trên máy cục bộ tại máy chủ http://localhost và nghe trên cổng 8080.

Hãy để chúng tôi kiểm tra xem ứng dụng của chúng tôi có phản hồi đúng các yêu cầu HTTP hay không. Vì thiết bị đầu cuối này không thể nhận bất kỳ thông tin đầu vào nào nếu không cung cấp ứng dụng Chai, chúng tôi cần đăng nhập vào VPS của mình bằng một thiết bị đầu cuối khác. Sau khi đăng nhập vào VPS bằng một thiết bị đầu cuối khác, bạn có thể điều hướng đến ứng dụng của mình bằng cách nhập mã sau vào thiết bị đầu cuối mới.

$ lynx http://localhost:8080/

Lynx là một trình duyệt dòng lệnh và thường được cài đặt theo mặc định trong các bản phân phối Linux khác nhau như Debian và Ubuntu. Nếu bạn thấy kết quả sau, điều đó có nghĩa là ứng dụng của bạn đang hoạt động tốt.

Output

Nếu bạn thấy kết quả ở trên, điều đó có nghĩa là ứng dụng của chúng tôi đã hoạt động và sẵn sàng để thử nghiệm.

Kiểm tra Ứng dụng với Máy chủ Web Phát triển

Xin lưu ý rằng có một lỗi trong ab và nó không thể kiểm tra ứng dụng trên localhost. Vì vậy, chúng tôi sẽ thay đổi máy chủ lưu trữ từ localhost thành 127.0.0.1 trong tệp app.py. Vì vậy, tệp sẽ thay đổi thành như sau:

from bottle import Bottle, run

app = Bottle()

@app.route('/')
@app.route('/hello')
def hello():
   return "Hello World!"

run(app, host = '127.0.0.1', port = 8080)

Bây giờ chúng ta hãy thử nghiệm ứng dụng của mình bằng cách gõ lệnh sau trên cùng một thiết bị đầu cuối đã chạy lệnh lynx:

$ ab -n 100 -c 10  http://127.0.0.1:8080/hello

Output

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done


Server Software:        WSGIServer/0.1
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /hello
Document Length:        12 bytes

Concurrency Level:      10
Time taken for tests:   0.203 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      16500 bytes
HTML transferred:       1200 bytes
Requests per second:    493.78 [#/sec] (mean)
Time per request:       20.252 [ms] (mean)
Time per request:       2.025 [ms] (mean, across all concurrent requests)
Transfer rate:          79.56 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:     1    6  28.2      2     202
Waiting:        1    6  28.2      2     202
Total:          1    6  28.2      2     202

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      2
  95%      2
  98%    202
  99%    202
 100%    202 (longest request)

Trong khi đầu ra trên thiết bị đầu cuối đầu tiên sẽ là (100 lần) như sau:

...
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12   
...

Bạn có thể quan sát các giá trị khác nhau của kết quả ab đã thay đổi như thế nào so với thử nghiệm ban đầu.

Kiểm tra ứng dụng bằng máy chủ web đa luồng

Trong các thử nghiệm trước đây của ab, chúng tôi đã sử dụng máy chủ web mặc định được đóng gói trong khuôn khổ Chai.

Bây giờ chúng ta sẽ thay đổi máy chủ web mặc định đơn luồng bằng máy chủ đa luồng. Do đó, chúng ta hãy cài đặt một thư viện máy chủ web đa luồng nhưcherrypy hoặc là gunicornvà nói với Chai để sử dụng nó. Chúng tôi đã chọn gunicorn cho mục đích trình diễn ở đây (bạn cũng có thể chọn một số khác) -

$  sudo apt-get install gunicorn

Và sửa đổi tệp, đó là thay đổi từ máy chủ web mặc định thành gunicorn -

...
run(server = 'gunicorn'...)
...

Hãy để chúng tôi kiểm tra ứng dụng trong thiết bị đầu cuối thứ hai.

$ ab -n 100 -c 10  http://127.0.0.1:8080/hello

Output

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done


Server Software:        gunicorn/19.0.0
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /hello
Document Length:        12 bytes

Concurrency Level:      10
Time taken for tests:   0.031 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      17200 bytes
HTML transferred:       1200 bytes
Requests per second:    3252.77 [#/sec] (mean)
Time per request:       3.074 [ms] (mean)
Time per request:       0.307 [ms] (mean, across all concurrent requests)
Transfer rate:          546.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.9      0       4
Processing:     1    2   0.7      3       4
Waiting:        0    2   0.8      2       3
Total:          2    3   0.6      3       5
WARNING: The median and mean for the initial connection time are not within a normal
        deviation These results are probably not that reliable.
WARNING: The median and mean for the processing time are not within a normal deviation
        These results are probably not that reliable.

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      3
  75%      3
  80%      3
  90%      4
  95%      5
  98%      5
  99%      5
 100%      5 (longest request)

Quan sát cách Yêu cầu mỗi giây tăng từ 493 lên 3252. Điều đó có nghĩa là gunicorn phù hợp làm máy chủ sản xuất cho các ứng dụng python.