В нашем приложении сервер A устанавливает TCP-соединение с сервером B, а затем отправляет большое количество запросов серверу B через TCP-соединение. Сообщение запроса основано на XML. Сервер B должен ответить в течение очень короткого периода времени, и для обработки запросов требуется время. Поэтому мы надеемся, что можно будет ввести балансировщик нагрузки и ускорить обработку, используя несколько серверов B. Это не веб-приложение. Я провел небольшое исследование, но не смог найти аналогичного приложения балансировщика нагрузки.
Может ли кто-нибудь сказать мне, может ли в нашем приложении помочь балансировщик нагрузки?
Схема, иллюстрирующая наше приложение:
Хорошо, поправьте меня, если я ошибаюсь, но у вас сейчас такая ситуация:
И вот что вы предлагаете:
Это поможет, только если узкое место внутри B. Если узкое место находится между B и A, это только усугубит ситуацию.
Если узкое место находится внутри B, то добавление LB воля увеличивают накладные расходы на переключение туда и обратно, но при этом нагрузка распределяется между двумя серверами довольно равномерно.
Нет. Балансировщики нагрузки работают, перемещая соединения с одного сервера на другой. Соединение должно быть отключено, а затем отправить следующий запрос, или просто сделать 100 подключений, а затем отправить один запрос по каждому подключению. Поскольку все происходит через одно соединение, вы в значительной степени защищены без каких-либо изменений.
При условии, что каждый запрос является новым TCP-соединением (и запрашиваемые данные относительно статичны), это может быть сбалансировано с помощью чего-то вроде Виртуальный сервер Linux. Однако, если вы можете изменить приложение, почему бы вместо этого не встроить балансировку нагрузки?