Ещё раз привет!
У меня появилась шикарная задача для исследования, и своими результатами я хочу поделиться с сообществом. Смысл задачи состоит в том, чтоб определить лучший вариант деплоя NGINX в AWS EC2/VPC. Лучший он должен быть с многих сторон, особенно со стороны высоконадёжности (High Availability) и скорости ответа. Особенно важным фактором так же является быстрота обработки SSL запросов, поэтому были проведены тесты на SLL-производительность.
Все инстансы находятся в одной сети VPC, ELB тоже поднимается в этой же сети.
Было рассмотрено несколько вариаций деплоймента, но выбор пал на 2 основные конфигурации, тесты над которыми я и провёл.
Конфигурация 1. ELB
Преимущества:
- Обычная схема для многих приложений. ELB стоит перед двумя и более инстансами NGINX'a, пропускает трафик, тем самым делаю конфигурацию высоконадёжной (HA). Если фейлится одна из нод, трафик на неё не идёт.
- Легко масштабируемая схема.
Недостатки:
- Плюс один хоп к сети.
- Не под контролем.
Конфигурация 2. NGINX
Приимущества:
- Прямой доступ к балансировщику без посторонних проксей.
- Полный контроль над инфраструктурой.
Недостатки:
- Настройка высоконадёжности усложняется применением heartbeat проверок и общения между серверами.
- Тяжело масштабируется
Тестирование
Тестирование проходило на m1.medium инстансах (3.75 GiB memory, 2 EC2 Compute Unit (1 virtual core with 2 EC2 Compute Unit)). В качестве веб сервера использовался nginx с дефолтной страничкой. Тест проводился из другого региона AWS с помощью Apache Bench: 6 конкурентных пользователей спрашивали 400 раз страничку. Тест повторялся 100 раз в каждом случае.
Итак, было проведено 4 теста. Обе конфигурации отвечали на http и https запросы.
Non-SLL
Тесты направлены на выявления влияния ELB на скорость ответа структуры. Предполагается, что конфигурации с ELB будет медленнее отзываться, т.к. в сети присутствует дополнительный узел. Но так же требуется взять во внимание то, что за ELB может быть больше одного (в нашем случае 2) инстанса NGINX, которые могут быть производительнее одного.
График среднего времени ответов
Средний результат всех ответов (в мс):
ELB: 209.586
NGINX: 207.934
Выводы
Как видим, результаты практически не отличаются. Хотя и на графике конфигурация NGINX постоянно быстрее ELB, но разница в 1-2% абсолютно приемлема. И так как конфигурация ELB значительно легче в настройке, более стабильна и имеет практически то же время ответа, что и NGINX, мы можем отдать ей предпочтение.
SSL
Тесты направлены на выяснения производительности конфигураций относительно SSL шифрования. В конфигурации ELB SSL шифрование производит ELB, в конфигурации NGINX — один NGINX балансировщик.
График среднего времени ответов
Средний результат всех ответов (в мс):
ELB: 455.921
NGINX: 437.745
Выводы
В начале тестирования ELB значительно отставал в ответах. Но после 30го запроса мы видим прирост в производительности. Это обосновано тем, что ELB был вертикально масштабирован. После повышения вычислительных мощностей, производительность стала почти одинаковой, как видно по графику.
Как известно, ELB — это m1.micro инстанс, который может быть вертикально масштабирован, если он не справляется с задачами. Это никак не контролируется и производится автоматически. Но, благодаря партнёрским отношениям с AWS, можно добиться установки минимального шейпа для ELB, и, например, ELB никогда не будет меньше m1.medium. Делается это для того, чтоб максимально ускорить работу инфраструктуры. Если воспользоваться этой энтерпрайз опцией, то выбор места для SSL шифрования зависит от простоты настройки и других факторов. Пока эти вопросы не рассматривались, но результаты тестов показали, что обе конфигурации приблизительно равнозначны.
Послесловие
Были проведены тесты производительности конфигураций с и без использования ELB в AWS EC2/VPC. Показатели говорят о том, что присутствие ELB очень незначительно влияет на время отклика, хотя тем самым облегчает настройку высокодоступных решений. Так же, с использованием дополнительных опций AWS, особо не важно в каком месте проводить обработку SSL. В других же случаях, с достаточными мощностями (как минимум не m1.micro), её стоит проводить не на ELB.
Если у вас есть другие интересные идеи о том, как сравнить эти конфигурации, я открыт для них. Сейчас всё бежит и можно легко прогнать ещё несколько тестов.
Автор: korjik