Как уменьшить пинг на своём сайте

Я создал своё api и запустил его на удалённом сервере, через https (использую nginx-1.27.2). Но апи отвечает очень медлено, если я обращаюсь к нему, скажем, в 100 потоках одновременно, время пинга вырастает до 50 секунд. В одном потоке обычно пинг 10-15 мс, но иногда бывают просадки до 3-4 секунд.

Программа на сервере выглядит так:

from quart import Quart, request, jsonify
app = Quart(__name__)

@app.route('/api', methods=['GET'])
async def home_api():
    data = await request.get_json()
    return jsonify({"status": "Good"}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

Пробовал Flask и Quart, с асинхронностью и без, post и get запросы. Менял конфиги nginx по подсказкам ChatGPT. Проблема остаётся.

Сервер мощный, с двумя процессорами intel(r) xeon(r) cpu e5-2690 v4 @ 2.60ghz. Всего 28 ядер. Интернет на обоих компьютерах гигабит, оптоволокно, пинг 1 мс. Из-за чего могут быть задержки и как сделать стабильный пинг на укровне 10-15мс?

Конфигурация nginx

server {
    listen 80;
    client_max_body_size 100M;
    server_name your_domain.com www.your_domain.com;
    worker_connections 2048;
    return 301 https://$host$request_uri;  # Перенаправление с HTTP на HTTPS
}

server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;
    client_max_body_size 100M; 
    worker_connections 2048;
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;

    location / {
        # Ваши настройки
        proxy_pass http://localhost:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Клиентская программа выглядит примерно так:

def ping():
    global D
    t1 = time.time()
    i = D.pop()
    data =  {"request":str(i), "limit": 300}
    url = 'https://.../api'
    response = requests.get(url, json=data)
    return(time.time()-t1)

def ping_multiple_requests(num_requests):
    times = []
    for _ in range(num_requests):
        times.append(ping())
    return times

with ThreadPoolExecutor(max_workers=num_threads) as executor:
    futures = [executor.submit(ping_multiple_requests, requests_per_thread) for _ in range(num_threads)]
    for future in futures:
        all_times.extend(future.result())

Ответы (0 шт):