В последнее время я пытался определить, где производительность в нашей среде является узким местом.
Среда (каждый сервер - виртуальная машина Linux, 8 ядер, 32 ГБ ОЗУ):
Баланс нагрузки: 50
Веб-серверы (rsync): 51, 52, 54
БД (мастер-мастер MySQL 5.6): 56, 58
Я установил среду с балансировкой нагрузки с HAProxy для балансировки нагрузки и Nginx для завершения SSL на ...50. HAProxy прослушивает порт 80 и направляет трафик на ...51, 52 или 54. Он также прослушивает порт 3306 и направляет трафик между .._. 56 и 58 для балансировки нагрузки базы данных. Nginx прослушивает порт 443 и обрабатывает подтверждение SSL, перенаправляя фактический трафик на порт 80 на той же машине, где он обрабатывается HAProxy.
Эта настройка обрабатывает соединения без SSL со скоростью ~ 1000 / сек, но SSL-соединения обрабатываются со скоростью ~ 300 / сек.
Недавно я изменил среду, обновив нашу версию HAProxy до версии, которая может обрабатывать завершение SSL. HAProxy теперь прослушивает порт 80 и порт 443, обрабатывая квитирование SSL в последнем случае и перенаправляя трафик на веб-серверы: 51, 52 и 54. Производительность осталась примерно такой же, но конфигурация была намного проще.
Я смотрел верхнюю часть балансировщика нагрузки, и в любом случае, похоже, что на сервере почти нет нагрузки; порт 80 или 443 трафик. Веб-серверы, как и ожидалось, ломаются во время моих тестов порта 80, но они показывают очень небольшую нагрузку во время моих 443 тестов.
Есть ли что-нибудь, о чем вы знаете, что можно сделать, чтобы увеличить время отклика наших SSL-соединений?
Любые советы и предложения приветствуются, я бы хотел добиться максимальной производительности.
Спасибо всем!
Поместите более быстрые SSL-шифры в начало списка (конечно, те, которые соответствуют вашим требованиям безопасности)
Пример для haproxy
bind *:443 ssl crt /etc/ssl/... ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256 prefer-server-ciphers ...
Мои настройки на экземпляре nginx следующие
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
Вы можете проверить скорость SSL-шифров, доступных на вашем балансировщике, например, с помощью
$ openssl speed