производительность — Как увеличить скорость функции PHP, которая возвращает токен

Добрый день,

Есть файл с именем «bfile», который имеет двоичные значения, например:

7f45 4c46 0201 0103 0000 0000 0000 0000
0200 3e00 0100 0000 300c 4000 0000 0000
4000 0000 0000 0000 5062 0c00 0000 0000
0000 0000 4000 3800 0500 4000 1f00 1c00
0100 0000 0500 0000 0000 0000 0000 0000

Размер файла составляет 814 КБ. Нам не разрешается менять двоичный код в любом случае.

Функция доступа к которой выглядит так:

function get_auth_token() {
$arg = json_encode($_REQUEST);
return `./bfile $arg`;
}

Основываясь на функции, он возвращает токен, подобный этому «z6x6ti5taac1mjn-9wG7w44-», но я не знаю, как это работает и как я могу увеличить скорость.

С моим текущим тестом результат таков:

Server Software:        Apache/2.4.7
Server Hostname:        127.0.0.1
Server Port:            8000

Document Length:        38 bytes

Concurrency Level:      10
Time taken for tests:   201.117 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      226000 bytes
HTML transferred:       38000 bytes
Requests per second:    4.97 [#/sec] (mean)
Time per request:       2011.172 [ms] (mean)
Time per request:       201.117 [ms] (mean, across all concurrent requests)
Transfer rate:          1.10 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     5 1995 1434.6   2010    4055
Waiting:        4 1994 1434.5   2009    4054
Total:          5 1995 1434.6   2010    4055

Percentage of the requests served within a certain time (ms)
50%   2010
66%   3009
75%   3012
80%   4006
90%   4010
95%   4013
98%   4018
99%   4022
100%   4055 (longest request)

На тысячу запросов потребовалось 201 секунда, чтобы закончить.
Я должен улучшить дизайн, чтобы он обрабатывал несколько тысяч запросов в секунду. Я понятия не имею, как это сделать. Пожалуйста помоги. Спасибо!

1

Решение

Если это все еще имеет смысл, вы могли бы сделать что-то, чтобы увеличить количество запросов, которые вы можете обрабатывать: используйте php fpm, проще настроить с помощью nginx, чтобы иметь возможность вызывать fastcgi_finish_request () как только вы получите запрос и вернете статус ответа. Таким образом, остальная часть сценария будет выполняться в фоновом режиме без сохранения слота подключения.
Это должно увеличить частоту запросов, но этого может быть недостаточно. Если это так, вам потребуется масштабировать по горизонтали путем балансировки нагрузки целевой конечной точки API на нескольких серверах и, возможно, использовать шаблон очереди / работника, если вам нужно загрузить некоторые данные в репозиторий, который также может быть перегружен нагрузка, когда она слишком высокая.

Все это также достижимо с Apache и без fpm, но это немного сложнее, так как вам нужно настроить каждый бит права на ответ, чтобы фактически освободить соединение искусственно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]