HAProxy - та же скорость, что и у одного веб-сервера - PullRequest
0 голосов
/ 21 февраля 2019

Мы пытаемся настроить серверы с балансировкой нагрузки, чтобы мы могли распределить нагрузку по многим серверам по мере расширения нашего приложения.Наше программное обеспечение создается в Go для прослушивания в качестве веб-сервера.

Мы создали простой сервер в Go, используя PING / PONG, чтобы увидеть, сколько запросов мы можем обработать на сервер при макс.Да, мы понимаем, что когда вы добавляете доступ к базе данных и весь другой код обработки, этот единственный сервер не будет достигать одинакового количества транзакций в секунду.Это всего лишь тестовый код для обеспечения постоянной скорости на каждом блоке, чтобы исключить любые внешние источники задержки.

У нас есть физический блок 2U с оперативной памятью 64 ГБ и (2) процессоры Xeon 4110 8 Core 16 Thread.Наше подключение к Интернету - оптоволокно 1 ГБ, и все серверы подключены внутренне по виртуальной локальной сети, поэтому задержка не должна быть проблемой.

У нас (3) настроены серверы Go, каждый с оперативной памятью 4 ГБ и 4 ЦП в виртуальной машине с использованиемCent OS 7.

Мы можем выполнить 47 000 запросов в секунду на каждом боксе.Мы предположили бы, что если бы у нас был HAProxy перед блоками, мы могли бы набрать около 140 000 к / с для трех серверов вместе взятых.

Мы используем метод маршрутизации TCP в HAProxy, так как он выглядит многобыстрее, чем метод HTTP.Нам не нужно маршрутизировать на основе URL-адреса, поэтому в настоящий момент TCP выглядит лучше.

47000 qps были протестированы с использованием loader.io с 2000 клиентами, охватывающими 4000 клиентов за 1-минутный период.Каждый сервер обрабатывает в среднем одинаковое количество qps.

Мы настроили HAProxy для подключения только к 1 серверу, чтобы увидеть, какая скорость была у него в середине.Мы говорим о 46000 qps при попадании на один сервер.

Мы добавили еще 2 сервера для общего количества 3 за HAProxy, и не было никакого увеличения qps, однако была нагрузка на все 3 сервера, распределенных, как указано всмотрю хтоп на всех машинах.Всего 46000 операций в секунду - это все, чего он достигнет.

Сервер HAProxy был настроен с 8 ЦП и 16 ГБ ОЗУ и НЕ занимал максимальную загрузку ЦП при просмотре htop.

Существует 1 внешний IPадрес поступает в HAProxy, а бэкэнды связаны через внутренние IP-адреса 10.xxx, по 1 на ящик.У каждого внутреннего сервера также есть внешний IP-адрес, который мы использовали для тестирования скорости каждого сервера в отдельности, чтобы убедиться, что все они работают со скоростью 47 000 ~ qps.

Мы увеличили loader.io для запуска 2000 - 8000 клиентов в секундуОн был нацелен на сервер HAProxy, чтобы увеличить нагрузку на него, однако он не увеличил qps.

Похоже, у нас достаточно мощности для обработки простых запросов ping / pong в ЦП, ОЗУ и интернет-трафике.,

Существует ли максимальный лимит, который HAProxy может обрабатывать для каждого внешнего IP-адреса в зависимости от исчерпания порта?Мы увеличили количество портов на сервере до 1024 - 65000.

При использовании watch ss -s используется не более 10 000 портов, используемых максимально, и очень мало состояний ожидания, так как мы установилисервер для повторного использования tcp-соединений, а также для сокращения времени ожидания fin.

Мы просто пытаемся создать интерфейсный веб-прокси, способный обрабатывать большой объем трафика и передавать его на внутренние серверы для обработки.

Наш код Go в настоящее время работает со скоростью около 10000 к / с на виртуальную машину, поэтому, если мы хотим достичь 140 000 к / с в приведенном выше примере, нам потребуется 14 виртуальных машин для его обработки.Цель состоит в том, чтобы иметь возможность выделить более 140 000 и просто добавить дополнительные серверы на сервер, чтобы справиться с увеличением нагрузки.

...