Хобрук: Ваш путь к мастерству в программировании

Низкая производительность при использовании nginx в качестве прокси

Текущая настройка нашего бэкэнда использует Route53 для маршрутизации запросов на серверы tomcat, которые работают на экземплярах ec2.

Я пытаюсь настроить nginx в качестве балансировщика нагрузки (прокси) для маршрутизации запросов на наши серверы tomcat.

Вот типы экземпляров,

  1. Тип экземпляра сервера Tomcat = m3.2xlarge
  2. Тип экземпляра сервера nginx = c3.large

Когда я запускаю ab (тест apache) со 100 одновременными подключениями без поддержки активности, я вижу, что производительность одного экземпляра tomcat лучше, чем 2 серверов tomcat перед сервером nginx. Теперь мне интересно, что-то не так с моей конфигурацией nginx. Я проверил файл error.log на экземпляре nginx, ошибок нет. Кроме того, ЦП в экземпляре nginx не превышает 30% при запуске инструмента тестирования. Вот моя конфигурация nginx,

user nginx;
pid /run/nginx.pid;
worker_processes auto;

worker_rlimit_nofile    32768;

events {
    worker_connections 8192;
    multi_accept on;
    use epoll;
}

http {

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;


    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    upstream backend {
        server x.x.x.x:443;
        server x.x.x.x:443;
        keepalive 1024;
    }

    server {
            listen 443;
            server_name localhost;
            ssl on;
            ssl_certificate /etc/nginx/certs/ssl-bundle_2015_2018.crt;
            ssl_certificate_key /etc/nginx/certs/chewie.key;
            ssl_dhparam /etc/nginx/certs/dhparam.pem;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_session_cache    shared:SSL:10m;
            ssl_prefer_server_ciphers on;
            ssl_session_timeout  10m;
            ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";

            location / {
                    proxy_pass https://backend;
                    proxy_cache_bypass true;
                    proxy_no_cache true;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }


    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;


    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
     gzip_comp_level 6;
     gzip_buffers 16 8k;
     gzip_http_version 1.1;
     gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Вот результаты тестов apache без nginx.

Concurrency Level:      100
Time taken for tests:   8.393 seconds
Complete requests:      800
Failed requests:        0
Total transferred:      368000 bytes
HTML transferred:       16800 bytes
Requests per second:    95.32 [#/sec] (mean)
Time per request:       1049.083 [ms] (mean)
Time per request:       10.491 [ms] (mean, across all concurrent requests)
Transfer rate:          42.82 [Kbytes/sec] received

Это результаты с nginx перед двумя серверами tomcat:

Concurrency Level:      100
Time taken for tests:   23.494 seconds
Complete requests:      800
Failed requests:        0
Total transferred:      381600 bytes
HTML transferred:       16800 bytes
Requests per second:    34.05 [#/sec] (mean)
Time per request:       2936.768 [ms] (mean)
Time per request:       29.368 [ms] (mean, across all concurrent requests)
Transfer rate:          15.86 [Kbytes/sec] received

Любые мысли о том, где я должен искать для оптимизации, приветствуются!



Ответы:


1

Вот несколько советов, которые помогут повысить производительность.

  • Преобразуйте трафик между nginx и вышестоящим сервером в http-форму https
  • Используйте правильные ssl-шифры для вашего nginx. Обязательно запустите тест ssl, чтобы убедиться, что используемые шифры безопасны (www.ssllabs.com)
  • Увеличьте ограничения файловых дескрипторов для сервера nginx, а также экземпляров tomcat до большого числа.

Буду обновлять по мере того, как найду новые вещи.

02.11.2015
Новые материалы

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

Универсальный базовый доход
Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

Абсолютно имеет смысл.
Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

МАШИННОЕ ОБУЧЕНИЕ И EDA
Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

В чем основные различия между ReactJS и React-Native?
В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

LeetCode — Умножение строк
Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..