Оптимизация потоков TCP Nginx - PullRequest
0 голосов
/ 04 июня 2019

Я использую Nginx для подключения моего веб-сервера PHP к моему серверу MySQL (через потоковый модуль), поэтому Nginx работает на веб-сервере и на сервере MySQL, и оба подключены через TCP по SSL.

Я заметил, что первоначальное подключение моего приложения к серверу MySQL занимает 4-6 мс на каждый запрос, и мне интересно, могу ли я сделать что-то еще, чтобы повторно использовать соединения или ускорить процесс в целом - оба сервера находятся в одной сетилокально.

Это конфигурация на моем веб-сервере:

stream {                
    upstream mysql {
        server 192.168.10.5:3999;
    }

    server {
        listen 127.0.0.1:998 so_keepalive=30s:10s:6;

        proxy_pass mysql;

        proxy_connect_timeout 1s;

        proxy_ssl  on;
        proxy_ssl_certificate         mysql.client.crt;
        proxy_ssl_certificate_key     mysql.client.key;
        proxy_ssl_protocols           TLSv1.2;
        proxy_ssl_ciphers             'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        proxy_ssl_trusted_certificate root.crt;
        proxy_ssl_verify              on;
        proxy_ssl_verify_depth        2;
        proxy_ssl_session_reuse       on;
    }
}

Это конфигурация на моем сервере MySQL:

stream {
    upstream mysql_local {
        server 127.0.0.1:3306;
    }

    server {
        listen 3999 ssl so_keepalive=60s:30s:20;

        proxy_pass mysql_local;

        proxy_connect_timeout 1s;

        # SSL configuration - use server certificate & key
        ssl_certificate         mysql.server.crt;
        ssl_certificate_key     mysql.server.key;
        ssl_protocols           TLSv1.2;
        ssl_ciphers             'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        ssl_prefer_server_ciphers on;
        ssl_client_certificate  root.crt;
        ssl_verify_client       on;
        ssl_session_cache       shared:MYSQL:100m;
        ssl_session_tickets     off;
        ssl_session_timeout     600m;
        ssl_handshake_timeout   5s;
    }
}

Я попытался настроить TCP keepaliveс обеих сторон, но не уверен, что нужно что-то еще или как проверить, используются ли соединения еще раз.Существует очень мало онлайн-документации по этому виду настройки, особенно по оптимизации.

Я подозреваю, что я могу сделать еще кое-что, потому что в приложении я также подключаюсь к Elasticsearch (также работающему на сервере MySQL) через HTTP+ SSL, использующий Nginx в качестве HTTP-прокси, и там время подключения намного меньше, хотя это HTTP, он также использует те же сертификаты и также проходит через Nginx в качестве промежуточного звена, но для этого требуется только макс.1 мс для подключения.Я использую HTTP keepalive соединения там.

1 Ответ

0 голосов
/ 13 июня 2019

Кто-то из Nginx подтвердил, что пул TCP-соединений / какой-то метод keepalive в настоящее время не поддерживается и также не планируется на будущее.

Вместо этого я добавил ProxySQL перед Nginx, который имеет встроенный пул соединений. У него также есть и другие преимущества, такие как статистика того, какие запросы выполняются чаще всего, которые занимают больше всего времени и т. Д., Поэтому на самом деле это действительно хороший инструмент, позволяющий выяснить, где можно оптимизировать приложение, и какие запросы могут потребовать дополнительного внимания. Вы даже можете прозрачно кешировать некоторые запросы, хотя меня это не очень интересует. Но будьте осторожны: документация по ProxySQL немного нечеткая, и система конфигурации кажется мне более запутанной, чем полезной, но как только вы ее настроите, она будет работать очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...