Как уменьшить пинг на своём сайте
Я создал своё 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())